com php-src: Disable RTLD_DEEPBIND when compiling with AddressSanitizer (-fsanitize=address).: NEWS Zend/zend_portability.h

[email protected] (Nikita Popov)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    61e59db99d29cd028336b66884b3a8e69b46cf71
Author:    Ondřej Surý <[email protected]>         Thu, 16 Feb 2017 08:57:30 +0100
Committer: Nikita Popov <[email protected]>      Thu, 16 Feb 2017 17:35:29 +0100
Parents:   cf3ef363232af040b9ec63ecd23b603f7acf3751
Branches:  PHP-7.0 PHP-7.1 master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=61e59db99d29cd028336b66884b3a8e69b46cf71

Log:
Disable RTLD_DEEPBIND when compiling with AddressSanitizer (-fsanitize=address).

The AddressSanitizer doesn't support RTLD_DEEPBIND resulting in
erratic errors when deinitializing phar module and possibly others.

Clang use __has_feature() macro to indicate compilation with
AddressSanitizer while gcc uses __SANITIZE_ADDRESS__ define.

Fixes bug #73677.

Bugs:
https://bugs.php.net/73677

Changed paths:
  M  NEWS
  M  Zend/zend_portability.h


Diff:
diff --git a/NEWS b/NEWS
index 9b9b452..4c73dbf 100644
--- a/NEWS
+++ b/NEWS
@@ -12,6 +12,8 @@ PHP                                                                        NEWS
     get_object_vars). (mhagstrand)
   . Fixed bug #73954 (NAN check fails on Alpine Linux with musl). (Andrea)
   . Fixed bug #74039 (is_infinite(-INF) returns false). (Christian Schmidt)
+  . Fixed bug #73677 (Generating phar.phar core dump with gcc ASAN enabled
+    build). (ondrej)
 
 - Apache:
   . Fixed bug #61471 (Incomplete POST does not timeout but is passed to PHP).
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index cce55b7..9914621 100644
--- a/Zend/zend_portability.h
+++ b/Zend/zend_portability.h
@@ -131,6 +131,12 @@
 
 #if defined(HAVE_LIBDL) && !defined(ZEND_WIN32)
 
+# if defined(__has_feature)
+#  if __has_feature(address_sanitizer)
+#   define __SANITIZE_ADDRESS__
+#  endif
+# endif
+
 # ifndef RTLD_LAZY
 #  define RTLD_LAZY 1    /* Solaris 1, FreeBSD's (2.1.7.1 and older) */
 # endif
@@ -141,7 +147,7 @@
 
 # if defined(RTLD_GROUP) && defined(RTLD_WORLD) && defined(RTLD_PARENT)
 #  define DL_LOAD(libname)			dlopen(libname, RTLD_LAZY | RTLD_GLOBAL | RTLD_GROUP | RTLD_WORLD | RTLD_PARENT)
-# elif defined(RTLD_DEEPBIND)
+# elif defined(RTLD_DEEPBIND) && !defined(__SANITIZE_ADDRESS__)
 #  define DL_LOAD(libname)			dlopen(libname, RTLD_LAZY | RTLD_GLOBAL | RTLD_DEEPBIND)
 # else
 #  define DL_LOAD(libname)			dlopen(libname, RTLD_LAZY | RTLD_GLOBAL)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.