From 49c165c5a8a40c0ef6a9cee00a81adac2da71533 Mon Sep 17 00:00:00 2001 From: Ben Wagner Date: Tue, 7 Apr 2020 13:12:18 -0400 Subject: [PATCH 67/68] Don't add to NULL in iterator. In C it is undefined to add anything to NULL. Clang recently began taking advantage of this and can assume that if anything is added or subtracted from a pointer that the pointer can be assumed non-NULL. The Address Sanitizer has been updated to report when this happens at runtime and produces messages like expat/lib/xmlparse.c:6509:23: runtime error: applying zero offset to null pointer SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior expat/lib/xmlparse.c:6509:23 This can be mitigated with 'p ? p + n : NULL' which optimizes to just the add in all optimizing compilers, but avoids the undefined behavior. --- lib/xmlparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/xmlparse.c b/lib/xmlparse.c index 638ea52..849411c 100644 --- a/lib/xmlparse.c +++ b/lib/xmlparse.c @@ -6506,7 +6506,7 @@ hashTableInit(HASH_TABLE *p, const XML_Memory_Handling_Suite *ms) { static void FASTCALL hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) { iter->p = table->v; - iter->end = iter->p + table->size; + iter->end = iter->p ? iter->p + table->size : NULL; } static NAMED *FASTCALL -- 1.8.3.1