summaryrefslogtreecommitdiffhomepage
path: root/auto/modules/php
diff options
context:
space:
mode:
authorValentin Bartenev <vbart@nginx.com>2018-11-22 20:23:43 +0300
committerValentin Bartenev <vbart@nginx.com>2018-11-22 20:23:43 +0300
commit262578dc71e4c1aaad01656a9b0c78539b1e7371 (patch)
tree0b2046f05e0fe1aa2e182ce3632e9414a2fa807f /auto/modules/php
parentadf22b6a0d3481f7fc4d38ade08a2a0dd4ea6f19 (diff)
downloadunit-262578dc71e4c1aaad01656a9b0c78539b1e7371.tar.gz
unit-262578dc71e4c1aaad01656a9b0c78539b1e7371.tar.bz2
PHP: workaround for bug #71041.
Since PHP 7, a zend_signal_startup() call is required if the interpreter was built with ZEND_SIGNALS defined; such a call was added in 3fd76e4ce70a. However, the zend_signal_startup() export is missing from the PHP library; as the result, dlopen() fails with the 'Undefined symbol "zend_signal_startup"' error while loading the PHP module. Meanwhile, if PHP is built without ZTS, the zend_signal_startup() call can be omitted; otherwise, the missing call causes segmentation fault. The PHP fix already was committed to upstream, but we still have to deal with numerous unpatched versions remaining at large. See the related PHP bug: https://bugs.php.net/bug.php?id=71041
Diffstat (limited to 'auto/modules/php')
-rw-r--r--auto/modules/php27
1 files changed, 26 insertions, 1 deletions
diff --git a/auto/modules/php b/auto/modules/php
index 5d54c119..362bbc69 100644
--- a/auto/modules/php
+++ b/auto/modules/php
@@ -124,6 +124,30 @@ if /bin/sh -c "${NXT_PHP_CONFIG} --version" >> $NXT_AUTOCONF_ERR 2>&1; then
exit 1;
fi
+ # Bug #71041 (https://bugs.php.net/bug.php?id=71041).
+
+ nxt_feature="PHP zend_signal_startup()"
+ nxt_feature_name=""
+ nxt_feature_run=no
+ nxt_feature_incs="${NXT_PHP_INCLUDE}"
+ nxt_feature_libs="${NXT_PHP_LIB} ${NXT_PHP_LDFLAGS}"
+ nxt_feature_test="
+ #include <php.h>
+ #include <php_main.h>
+
+ int main() {
+ zend_signal_startup();
+ return 0;
+ }"
+
+ . auto/feature
+
+ if [ $nxt_found = yes ]; then
+ NXT_ZEND_SIGNAL_STARTUP=1
+ else
+ NXT_ZEND_SIGNAL_STARTUP=0
+ fi
+
else
$echo
$echo $0: error: no PHP found.
@@ -181,6 +205,7 @@ for nxt_src in $NXT_PHP_MODULE_SRCS; do
$NXT_BUILD_DIR/$nxt_obj: $nxt_src
\$(CC) -c \$(CFLAGS) \$(NXT_INCS) $NXT_PHP_INCLUDE \\
+ -DNXT_ZEND_SIGNAL_STARTUP=$NXT_ZEND_SIGNAL_STARTUP \\
$nxt_dep_flags \\
-o $NXT_BUILD_DIR/$nxt_obj $nxt_src
$nxt_dep_post
@@ -191,7 +216,7 @@ END
done
-
+
cat << END >> $NXT_MAKEFILE
.PHONY: ${NXT_PHP_MODULE}