summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorOndřej Surý <ondrej@sury.org>2017-02-16 08:57:30 +0100
committerNikita Popov <nikita.ppv@gmail.com>2017-02-16 17:35:29 +0100
commit61e59db99d29cd028336b66884b3a8e69b46cf71 (patch)
treee9d8cad0be5c2d807ea718aa59a1701e1d8e1c55 /Zend
parentcf3ef363232af040b9ec63ecd23b603f7acf3751 (diff)
downloadphp-git-61e59db99d29cd028336b66884b3a8e69b46cf71.tar.gz
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.
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_portability.h8
1 files changed, 7 insertions, 1 deletions
diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h
index cce55b71b2..9914621a49 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)