ref: 26d0f579c01018e2f42250ee48c0250e2e524541
parent: 9b0179597e100e85d543b4e346490ed7b2bb2fff
author: Werner Lemberg <[email protected]>
date: Sat Nov 23 05:28:37 EST 2019
* include/freetype/internal/ftmemory.h (FT_OFFSET): New macro. Use this for `base + offset' pointer calculations where `base' can be NULL (triggering a sanitizer warning even if the resulting pointer gets never dereferenced since it is undefined behaviour in C). Suggested by Ben Wagner.
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2019-11-23 Werner Lemberg <[email protected]>
+
+ * include/freetype/internal/ftmemory.h (FT_OFFSET): New macro.
+
+ Use this for `base + offset' pointer calculations where `base' can
+ be NULL (triggering a sanitizer warning even if the resulting
+ pointer gets never dereferenced since it is undefined behaviour
+ in C).
+
+ Suggested by Ben Wagner.
+
2019-11-23 Ben Wagner <[email protected]>
[sfnt] Ensure OTTO fonts have tables (#57285).
--- a/include/freetype/internal/ftmemory.h
+++ b/include/freetype/internal/ftmemory.h
@@ -57,6 +57,14 @@
/*************************************************************************/
+ /* The calculation `NULL + n' is undefined in C. Even if the resulting */
+ /* pointer doesn't get dereferenced, this causes warnings with */
+ /* sanitizers. */
+ /* */
+ /* We thus provide a macro that should be used if `base' can be NULL. */
+#define FT_OFFSET( base, count ) ( (base) ? (base) + (count) : NULL )
+
+
/*
* C++ refuses to handle statements like p = (void*)anything, with `p' a
* typed pointer. Since we don't have a `typeof' operator in standard C++,