From 26d0f579c01018e2f42250ee48c0250e2e524541 Mon Sep 17 00:00:00 2001 From: Werner Lemberg Date: Sat, 23 Nov 2019 10:28:37 +0100 Subject: [PATCH] * 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. --- ChangeLog | 11 +++++++++++ include/freetype/internal/ftmemory.h | 8 ++++++++ 2 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index b921853da..23c35958c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2019-11-23 Werner Lemberg + + * 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 [sfnt] Ensure OTTO fonts have tables (#57285). diff --git a/include/freetype/internal/ftmemory.h b/include/freetype/internal/ftmemory.h index f0891ae09..7a8eeb8ac 100644 --- a/include/freetype/internal/ftmemory.h +++ b/include/freetype/internal/ftmemory.h @@ -57,6 +57,14 @@ FT_BEGIN_HEADER /*************************************************************************/ + /* 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++,