瀏覽代碼

Make clang asan work with FORTIFIED_SOURCE again.

Short version: clang asan hates the glibc strcmp macro in
bits/string2.h if you are passing it a constant string argument of
length two or less.  (I could be off by one here, but that's the
basic idea.)

Closes issue 14821.
Nick Mathewson 10 年之前
父節點
當前提交
67e5d49d8a
共有 2 個文件被更改,包括 13 次插入0 次删除
  1. 4 0
      changes/bug14821
  2. 9 0
      src/common/compat.h

+ 4 - 0
changes/bug14821

@@ -0,0 +1,4 @@
+  o Major bugfixes (compilation):
+    - Correctly repair hardened builds under the clang compiler. Previously,
+      our use of _FORTIFY_SOURCE would conflict with clang's address
+      sanitizer. Closes ticket 14821.

+ 9 - 0
src/common/compat.h

@@ -42,6 +42,15 @@
 #include <netinet6/in6.h>
 #endif
 
+#if defined(__has_feature)
+#  if __has_feature(address_sanitizer)
+/* Some of the fancy glibc strcmp() macros include references to memory that
+ * clang rejects because it is off the end of a less-than-3. Clang hates this,
+ * even though those references never actually happen. */
+#    undef strcmp
+#  endif
+#endif
+
 #include <stdio.h>
 #include <errno.h>