diff --git a/.gitignore b/.gitignore index ce0851c..e0f8f3a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,8 @@ +clog php.spec~ php-5.3*.bz2 /php-5.4.4.tar.bz2 /php-5.4.5.tar.bz2 /php-5.4.6.tar.bz2 /php-5.4.7.tar.bz2 +/php-5.4.8.tar.bz2 diff --git a/php-5.4.7-fpm-systemd.patch b/php-5.4.7-fpm-systemd.patch deleted file mode 100644 index 0cbe96f..0000000 --- a/php-5.4.7-fpm-systemd.patch +++ /dev/null @@ -1,279 +0,0 @@ -From 851a04bb7b680954249e825ea3fef420f7d66bb7 Mon Sep 17 00:00:00 2001 -From: Jerome Loyet -Date: Fri, 28 Sep 2012 00:33:05 +0200 -Subject: [PATCH] - Fixed bug #63085 (Systemd integration and daemonize) - ---- - NEWS | 1 + - sapi/fpm/config.m4 | 2 +- - sapi/fpm/fpm/fpm.c | 4 ++-- - sapi/fpm/fpm/fpm.h | 2 +- - sapi/fpm/fpm/fpm_conf.c | 11 ++++++++--- - sapi/fpm/fpm/fpm_conf.h | 2 +- - sapi/fpm/fpm/fpm_main.c | 18 ++++++++++++++++-- - sapi/fpm/init.d.php-fpm.in | 2 +- - sapi/fpm/php-fpm.8.in | 23 ++++++++++++++++++++++- - 9 files changed, 53 insertions(+), 12 deletions(-) - -diff --git a/sapi/fpm/config.m4 b/sapi/fpm/config.m4 -index c23485a..7687660 100644 ---- a/sapi/fpm/config.m4 -+++ b/sapi/fpm/config.m4 -@@ -589,7 +589,7 @@ - - PHP_ADD_BUILD_DIR(sapi/fpm/fpm) - PHP_ADD_BUILD_DIR(sapi/fpm/fpm/events) -- PHP_OUTPUT(sapi/fpm/php-fpm.conf sapi/fpm/init.d.php-fpm sapi/fpm/php-fpm.8 sapi/fpm/status.html) -+ PHP_OUTPUT(sapi/fpm/php-fpm.conf sapi/fpm/init.d.php-fpm sapi/fpm/php-fpm.service sapi/fpm/php-fpm.8 sapi/fpm/status.html) - PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/fpm/Makefile.frag]) - - SAPI_FPM_PATH=sapi/fpm/php-fpm -diff --git a/sapi/fpm/fpm/fpm.c b/sapi/fpm/fpm/fpm.c -index 2f42175..b866f37 100644 ---- a/sapi/fpm/fpm/fpm.c -+++ b/sapi/fpm/fpm/fpm.c -@@ -42,7 +42,7 @@ struct fpm_globals_s fpm_globals = { - .send_config_pipe = {0, 0}, - }; - --int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root) /* {{{ */ -+int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root, int force_daemon) /* {{{ */ - { - fpm_globals.argc = argc; - fpm_globals.argv = argv; -@@ -55,7 +55,7 @@ int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int t - - if (0 > fpm_php_init_main() || - 0 > fpm_stdio_init_main() || -- 0 > fpm_conf_init_main(test_conf) || -+ 0 > fpm_conf_init_main(test_conf, force_daemon) || - 0 > fpm_unix_init_main() || - 0 > fpm_scoreboard_init_main() || - 0 > fpm_pctl_init_main() || -diff --git a/sapi/fpm/fpm/fpm.h b/sapi/fpm/fpm/fpm.h -index c576876..65d0e0d 100644 ---- a/sapi/fpm/fpm/fpm.h -+++ b/sapi/fpm/fpm/fpm.h -@@ -37,7 +37,7 @@ - - - int fpm_run(int *max_requests); --int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root); -+int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root, int force_daemon); - - struct fpm_globals_s { - pid_t parent_pid; -diff --git a/sapi/fpm/fpm/fpm_conf.c b/sapi/fpm/fpm/fpm_conf.c -index dfe6792..25e2cc4 100644 ---- a/sapi/fpm/fpm/fpm_conf.c -+++ b/sapi/fpm/fpm/fpm_conf.c -@@ -1115,7 +1115,7 @@ int fpm_conf_write_pid() /* {{{ */ - } - /* }}} */ - --static int fpm_conf_post_process(TSRMLS_D) /* {{{ */ -+static int fpm_conf_post_process(int force_daemon TSRMLS_DC) /* {{{ */ - { - struct fpm_worker_pool_s *wp; - -@@ -1123,6 +1123,11 @@ static int fpm_conf_post_process(TSRMLS_D) /* {{{ */ - fpm_evaluate_full_path(&fpm_global_config.pid_file, NULL, PHP_LOCALSTATEDIR, 0); - } - -+ if (force_daemon >= 0) { -+ /* forced from command line options */ -+ fpm_global_config.daemonize = force_daemon; -+ } -+ - fpm_globals.log_level = fpm_global_config.log_level; - - if (fpm_global_config.process_max < 0) { -@@ -1584,7 +1589,7 @@ static void fpm_conf_dump() /* {{{ */ - } - /* }}} */ - --int fpm_conf_init_main(int test_conf) /* {{{ */ -+int fpm_conf_init_main(int test_conf, int force_daemon) /* {{{ */ - { - int ret; - TSRMLS_FETCH(); -@@ -1630,7 +1635,7 @@ int fpm_conf_init_main(int test_conf) /* {{{ */ - return -1; - } - -- if (0 > fpm_conf_post_process(TSRMLS_C)) { -+ if (0 > fpm_conf_post_process(force_daemon TSRMLS_CC)) { - zlog(ZLOG_ERROR, "failed to post process the configuration"); - return -1; - } -diff --git a/sapi/fpm/fpm/fpm_conf.h b/sapi/fpm/fpm/fpm_conf.h -index f780f03..dc54133 100644 ---- a/sapi/fpm/fpm/fpm_conf.h -+++ b/sapi/fpm/fpm/fpm_conf.h -@@ -97,7 +97,7 @@ enum { - PM_STYLE_ONDEMAND = 3 - }; - --int fpm_conf_init_main(int test_conf); -+int fpm_conf_init_main(int test_conf, int force_daemon); - int fpm_worker_pool_config_free(struct fpm_worker_pool_config_s *wpc); - int fpm_conf_write_pid(); - int fpm_conf_unlink_pid(); -diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c -index 70e917a..3faf308 100644 ---- a/sapi/fpm/fpm/fpm_main.c -+++ b/sapi/fpm/fpm/fpm_main.c -@@ -155,6 +155,8 @@ - {'p', 1, "prefix"}, - {'g', 1, "pid"}, - {'R', 0, "allow-to-run-as-root"}, -+ {'D', 0, "daemonize"}, -+ {'F', 0, "nodaemonize"}, - {'-', 0, NULL} /* end of args */ - }; - -@@ -912,7 +914,7 @@ - prog = "php"; - } - -- php_printf( "Usage: %s [-n] [-e] [-h] [-i] [-m] [-v] [-t] [-p ] [-g ] [-c ] [-d foo[=bar]] [-y ]\n" -+ php_printf( "Usage: %s [-n] [-e] [-h] [-i] [-m] [-v] [-t] [-p ] [-g ] [-c ] [-d foo[=bar]] [-y ] [-D] [-F]\n" - " -c | Look for php.ini file in this directory\n" - " -n No php.ini file will be used\n" - " -d foo[=bar] Define INI entry foo with value 'bar'\n" -@@ -928,6 +930,9 @@ - " -y, --fpm-config \n" - " Specify alternative path to FastCGI process manager config file.\n" - " -t, --test Test FPM configuration and exit\n" -+ " -D, --daemonize force to run in background, and ignore daemonize option from config file\n" -+ " -F, --nodaemonize\n" -+ " force to stay in foreground, and ignore daemonize option from config file\n" - " -R, --allow-to-run-as-root\n" - " Allow pool to run as root (disabled by default)\n", - prog, PHP_PREFIX); -@@ -1550,6 +1555,7 @@ - char *fpm_prefix = NULL; - char *fpm_pid = NULL; - int test_conf = 0; -+ int force_daemon = -1; - int php_information = 0; - int php_allow_to_run_as_root = 0; - -@@ -1670,6 +1676,14 @@ - php_allow_to_run_as_root = 1; - break; - -+ case 'D': /* daemonize */ -+ force_daemon = 1; -+ break; -+ -+ case 'F': /* nodaemonize */ -+ force_daemon = 0; -+ break; -+ - default: - case 'h': - case '?': -@@ -1797,7 +1811,7 @@ - } - } - -- if (0 > fpm_init(argc, argv, fpm_config ? fpm_config : CGIG(fpm_config), fpm_prefix, fpm_pid, test_conf, php_allow_to_run_as_root)) { -+ if (0 > fpm_init(argc, argv, fpm_config ? fpm_config : CGIG(fpm_config), fpm_prefix, fpm_pid, test_conf, php_allow_to_run_as_root, force_daemon)) { - - if (fpm_globals.send_config_pipe[1]) { - int writeval = 0; -diff --git a/sapi/fpm/init.d.php-fpm.in b/sapi/fpm/init.d.php-fpm.in -index dc66310..3edd64f 100644 ---- a/sapi/fpm/init.d.php-fpm.in -+++ b/sapi/fpm/init.d.php-fpm.in -@@ -54,7 +54,7 @@ case "$1" in - start) - echo -n "Starting php-fpm " - -- $php_fpm_BIN $php_opts -+ $php_fpm_BIN --daemonize $php_opts - - if [ "$?" != 0 ] ; then - echo " failed" -diff --git a/sapi/fpm/php-fpm.8.in b/sapi/fpm/php-fpm.8.in -index 6c9c6d6..a4e7e74 100644 ---- a/sapi/fpm/php-fpm.8.in -+++ b/sapi/fpm/php-fpm.8.in -@@ -99,6 +99,20 @@ Test FPM configuration file and exit - If called twice (-tt), the configuration is dumped before exiting. - .TP - .PD 0 -+.B \-\-daemonize -+.TP -+.PD 1 -+.B \-D -+Force to run in background and ignore daemonize option from configuration file. -+.TP -+.PD 0 -+.B \-\-nodaemonize -+.TP -+.PD 1 -+.B \-F -+Force to stay in foreground and ignore daemonize option from configuration file. -+.TP -+.PD 0 - .B \-\-zend\-extension \fIfile\fP - .TP - .PD 1 -@@ -113,13 +127,20 @@ The configuration file for the php-fpm daemon. - .B php.ini - The standard php configuration file. - .SH EXAMPLES --You should use the init script provided to start and stop the php-fpm daemon. This situation applies for any unix systems which use init.d for their main process manager. -+For any unix systems which use init.d for their main process manager, you should use the init script provided to start and stop the php-fpm daemon. - .P - .PD 1 - .RS - sudo /etc/init.d/php-fpm start - .RE - .TP -+For any unix systems which use systemd for their main process manager, you should use the unit file provided to start and stop the php-fpm daemon. -+.P -+.PD 1 -+.RS -+sudo systemctl start php-fpm.service -+.RE -+.TP - If your installation has no appropriate init script, launch php-fpm with no arguments. It will launch as a daemon (background process) by default. The file @php_fpm_localstatedir@/run/php-fpm.pid determines whether php-fpm is already up and running. Once started, php-fpm then responds to several POSIX signals: - .P - .PD 0 --- -1.7.8 - -From 2259a8f18b1f25c175c486f54849fcd9e61ecde1 Mon Sep 17 00:00:00 2001 -From: Jerome Loyet -Date: Fri, 28 Sep 2012 00:47:56 +0200 -Subject: [PATCH] - add missing php-fpm.service.in - ---- - sapi/fpm/php-fpm.service.in | 12 ++++++++++++ - 1 files changed, 12 insertions(+), 0 deletions(-) - create mode 100644 sapi/fpm/php-fpm.service.in - -diff --git a/sapi/fpm/php-fpm.service.in b/sapi/fpm/php-fpm.service.in -new file mode 100644 -index 0000000..396a88d ---- /dev/null -+++ b/sapi/fpm/php-fpm.service.in -@@ -0,0 +1,12 @@ -+[Unit] -+Description=The PHP FastCGI Process Manager -+After=syslog.target network.target -+ -+[Service] -+PIDFile=@localstatedir@/run/php-fpm.pid -+ExecStart=@sbindir@/php-fpm --nodaemonize --fpm-config @sysconfdir@/php-fpm.conf -+ExecReload=/bin/kill -USR2 $MAINPID -+ -+[Install] -+WantedBy=multi-user.target -+ --- -1.7.8 - diff --git a/php-5.4.7-fpm.patch b/php-5.4.7-fpm.patch deleted file mode 100644 index f237876..0000000 --- a/php-5.4.7-fpm.patch +++ /dev/null @@ -1,223 +0,0 @@ -From b5eb1456aa17e83b7b734dfc2316d632c9adcc6c Mon Sep 17 00:00:00 2001 -From: Jerome Loyet -Date: Fri, 28 Sep 2012 00:05:48 +0200 -Subject: [PATCH] - Fixed bug #62954 (startup problems fpm / php-fpm) - Fixed - bug #62886 (PHP-FPM may segfault/hang on startup) - ---- - NEWS | 4 ++ - sapi/fpm/fpm/fpm.c | 2 +- - sapi/fpm/fpm/fpm.h | 2 +- - sapi/fpm/fpm/fpm_main.c | 16 +++++--- - sapi/fpm/fpm/fpm_signals.c | 12 ------ - sapi/fpm/fpm/fpm_signals.h | 3 -- - sapi/fpm/fpm/fpm_unix.c | 81 +++++++++++++++++++++++++------------------ - 7 files changed, 63 insertions(+), 57 deletions(-) - -diff --git a/sapi/fpm/fpm/fpm.c b/sapi/fpm/fpm/fpm.c -index dab415d..2f42175 100644 ---- a/sapi/fpm/fpm/fpm.c -+++ b/sapi/fpm/fpm/fpm.c -@@ -39,7 +39,7 @@ struct fpm_globals_s fpm_globals = { - .test_successful = 0, - .heartbeat = 0, - .run_as_root = 0, -- .send_config_signal = 0, -+ .send_config_pipe = {0, 0}, - }; - - int fpm_init(int argc, char **argv, char *config, char *prefix, char *pid, int test_conf, int run_as_root) /* {{{ */ -diff --git a/sapi/fpm/fpm/fpm.h b/sapi/fpm/fpm/fpm.h -index 7a2903d..c576876 100644 ---- a/sapi/fpm/fpm/fpm.h -+++ b/sapi/fpm/fpm/fpm.h -@@ -55,7 +55,7 @@ struct fpm_globals_s { - int test_successful; - int heartbeat; - int run_as_root; -- int send_config_signal; -+ int send_config_pipe[2]; - }; - - extern struct fpm_globals_s fpm_globals; -diff --git a/sapi/fpm/fpm/fpm_main.c b/sapi/fpm/fpm/fpm_main.c -index cdec235..925cbc1 100644 ---- a/sapi/fpm/fpm/fpm_main.c -+++ b/sapi/fpm/fpm/fpm_main.c -@@ -1799,16 +1799,20 @@ consult the installation file that came with this distribution, or visit \n\ - - if (0 > fpm_init(argc, argv, fpm_config ? fpm_config : CGIG(fpm_config), fpm_prefix, fpm_pid, test_conf, php_allow_to_run_as_root)) { - -- if (fpm_globals.send_config_signal) { -- zlog(ZLOG_DEBUG, "Sending SIGUSR2 (error) to parent %d", getppid()); -- kill(getppid(), SIGUSR2); -+ if (fpm_globals.send_config_pipe[1]) { -+ int writeval = 0; -+ zlog(ZLOG_DEBUG, "Sending \"0\" (error) to parent via fd=%d", fpm_globals.send_config_pipe[1]); -+ write(fpm_globals.send_config_pipe[1], &writeval, sizeof(writeval)); -+ close(fpm_globals.send_config_pipe[1]); - } - return FPM_EXIT_CONFIG; - } - -- if (fpm_globals.send_config_signal) { -- zlog(ZLOG_DEBUG, "Sending SIGUSR1 (OK) to parent %d", getppid()); -- kill(getppid(), SIGUSR1); -+ if (fpm_globals.send_config_pipe[1]) { -+ int writeval = 1; -+ zlog(ZLOG_DEBUG, "Sending \"1\" (OK) to parent via fd=%d", fpm_globals.send_config_pipe[1]); -+ write(fpm_globals.send_config_pipe[1], &writeval, sizeof(writeval)); -+ close(fpm_globals.send_config_pipe[1]); - } - fpm_is_running = 1; - -diff --git a/sapi/fpm/fpm/fpm_signals.c b/sapi/fpm/fpm/fpm_signals.c -index 656269f..8993a86 100644 ---- a/sapi/fpm/fpm/fpm_signals.c -+++ b/sapi/fpm/fpm/fpm_signals.c -@@ -249,15 +249,3 @@ int fpm_signals_get_fd() /* {{{ */ - } - /* }}} */ - --void fpm_signals_sighandler_exit_ok(pid_t pid) /* {{{ */ --{ -- exit(FPM_EXIT_OK); --} --/* }}} */ -- --void fpm_signals_sighandler_exit_config(pid_t pid) /* {{{ */ --{ -- exit(FPM_EXIT_CONFIG); --} --/* }}} */ -- -diff --git a/sapi/fpm/fpm/fpm_signals.h b/sapi/fpm/fpm/fpm_signals.h -index 13484cb..eb80fae 100644 ---- a/sapi/fpm/fpm/fpm_signals.h -+++ b/sapi/fpm/fpm/fpm_signals.h -@@ -11,9 +11,6 @@ int fpm_signals_init_main(); - int fpm_signals_init_child(); - int fpm_signals_get_fd(); - --void fpm_signals_sighandler_exit_ok(pid_t pid); --void fpm_signals_sighandler_exit_config(pid_t pid); -- - extern const char *fpm_signal_names[NSIG + 1]; - - #endif -diff --git a/sapi/fpm/fpm/fpm_unix.c b/sapi/fpm/fpm/fpm_unix.c -index 5c5e37c..1a75944 100644 ---- a/sapi/fpm/fpm/fpm_unix.c -+++ b/sapi/fpm/fpm/fpm_unix.c -@@ -262,36 +262,19 @@ int fpm_unix_init_main() /* {{{ */ - * The parent process has then to wait for the master - * process to initialize to return a consistent exit - * value. For this pupose, the master process will -- * send USR1 if everything went well and USR2 -- * otherwise. -+ * send \"1\" into the pipe if everything went well -+ * and \"0\" otherwise. - */ - -- struct sigaction act; -- struct sigaction oldact_usr1; -- struct sigaction oldact_usr2; -- struct timeval tv; - -- /* -- * set sigaction for USR1 before fork -- * save old sigaction to restore it after -- * fork in the child process (the master process) -- */ -- memset(&act, 0, sizeof(act)); -- memset(&act, 0, sizeof(oldact_usr1)); -- act.sa_handler = fpm_signals_sighandler_exit_ok; -- sigfillset(&act.sa_mask); -- sigaction(SIGUSR1, &act, &oldact_usr1); -+ struct timeval tv; -+ fd_set rfds; -+ int ret; - -- /* -- * set sigaction for USR2 before fork -- * save old sigaction to restore it after -- * fork in the child process (the master process) -- */ -- memset(&act, 0, sizeof(act)); -- memset(&act, 0, sizeof(oldact_usr2)); -- act.sa_handler = fpm_signals_sighandler_exit_config; -- sigfillset(&act.sa_mask); -- sigaction(SIGUSR2, &act, &oldact_usr2); -+ if (pipe(fpm_globals.send_config_pipe) == -1) { -+ zlog(ZLOG_SYSERROR, "failed to create pipe"); -+ return -1; -+ } - - /* then fork */ - pid_t pid = fork(); -@@ -302,24 +285,54 @@ int fpm_unix_init_main() /* {{{ */ - return -1; - - case 0 : /* children */ -- /* restore USR1 and USR2 sigaction */ -- sigaction(SIGUSR1, &oldact_usr1, NULL); -- sigaction(SIGUSR2, &oldact_usr2, NULL); -- fpm_globals.send_config_signal = 1; -+ close(fpm_globals.send_config_pipe[0]); /* close the read side of the pipe */ - break; - - default : /* parent */ -- fpm_cleanups_run(FPM_CLEANUP_PARENT_EXIT); -+ close(fpm_globals.send_config_pipe[1]); /* close the write side of the pipe */ - - /* - * wait for 10s before exiting with error -- * the child is supposed to send USR1 or USR2 to tell the parent -+ * the child is supposed to send 1 or 0 into the pipe to tell the parent - * how it goes for it - */ -+ FD_ZERO(&rfds); -+ FD_SET(fpm_globals.send_config_pipe[0], &rfds); -+ - tv.tv_sec = 10; - tv.tv_usec = 0; -- zlog(ZLOG_DEBUG, "The calling process is waiting for the master process to ping"); -- select(0, NULL, NULL, NULL, &tv); -+ -+ zlog(ZLOG_DEBUG, "The calling process is waiting for the master process to ping via fd=%d", fpm_globals.send_config_pipe[0]); -+ ret = select(fpm_globals.send_config_pipe[0] + 1, &rfds, NULL, NULL, &tv); -+ if (ret == -1) { -+ zlog(ZLOG_SYSERROR, "failed to select"); -+ exit(FPM_EXIT_SOFTWARE); -+ } -+ if (ret) { /* data available */ -+ int readval; -+ ret = read(fpm_globals.send_config_pipe[0], &readval, sizeof(readval)); -+ if (ret == -1) { -+ zlog(ZLOG_SYSERROR, "failed to read from pipe"); -+ exit(FPM_EXIT_SOFTWARE); -+ } -+ -+ if (ret == 0) { -+ zlog(ZLOG_ERROR, "no data have been read from pipe"); -+ exit(FPM_EXIT_SOFTWARE); -+ } else { -+ if (readval == 1) { -+ zlog(ZLOG_DEBUG, "I received a valid acknoledge from the master process, I can exit without error"); -+ fpm_cleanups_run(FPM_CLEANUP_PARENT_EXIT); -+ exit(FPM_EXIT_OK); -+ } else { -+ zlog(ZLOG_DEBUG, "The master process returned an error !"); -+ exit(FPM_EXIT_SOFTWARE); -+ } -+ } -+ } else { /* no date sent ! */ -+ zlog(ZLOG_ERROR, "the master process didn't send back its status (via the pipe to the calling process)"); -+ exit(FPM_EXIT_SOFTWARE); -+ } - exit(FPM_EXIT_SOFTWARE); - } - } --- -1.7.8 - diff --git a/php-5.4.8-libxml.patch b/php-5.4.8-libxml.patch new file mode 100644 index 0000000..d9e92e9 --- /dev/null +++ b/php-5.4.8-libxml.patch @@ -0,0 +1,50 @@ +From 100bb87f5517484d75191ff4cdbbc1fdf579791d Mon Sep 17 00:00:00 2001 +From: jjacky +Date: Fri, 11 May 2012 22:38:05 +0200 +Subject: [PATCH] CGI/FPM process could crash when using libxml, fixes #61557 + +Since d8bddb9665637d96f20dc4a2ae5668ba376f3b17 some SAPI would only setup/reset +callbacks to libxml once, instead of for each request processed. However, this +also included a callback for structured errors, which should remain per request +(as it can be defined through PHP's libxml_use_internal_errors). + +As a result, after the internal handler was set in a request, processing another +request would result in the handler being triggered while the memory associated +with it (LIBXML(error_list)) had been free-d/reset, leading to the process +segfaulting. + +This reset the handler for structured errors after each request. + +(see #61325 also possibly the same bug) +--- + ext/libxml/libxml.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c +index e42d845..92c1099 100644 +--- a/ext/libxml/libxml.c ++++ b/ext/libxml/libxml.c +@@ -851,7 +851,6 @@ static PHP_MSHUTDOWN_FUNCTION(libxml) + { + if (!_php_libxml_per_request_initialization) { + xmlSetGenericErrorFunc(NULL, NULL); +- xmlSetStructuredErrorFunc(NULL, NULL); + + xmlParserInputBufferCreateFilenameDefault(NULL); + xmlOutputBufferCreateFilenameDefault(NULL); +@@ -867,11 +866,11 @@ static int php_libxml_post_deactivate() + /* reset libxml generic error handling */ + if (_php_libxml_per_request_initialization) { + xmlSetGenericErrorFunc(NULL, NULL); +- xmlSetStructuredErrorFunc(NULL, NULL); + + xmlParserInputBufferCreateFilenameDefault(NULL); + xmlOutputBufferCreateFilenameDefault(NULL); + } ++ xmlSetStructuredErrorFunc(NULL, NULL); + + if (LIBXML(stream_context)) { + /* the steam_context resource will be released by resource list destructor */ +-- +1.7.10.1 + diff --git a/php-fpm-www.conf b/php-fpm-www.conf index a5b8a13..9cdbb4f 100644 --- a/php-fpm-www.conf +++ b/php-fpm-www.conf @@ -221,5 +221,6 @@ php_admin_flag[log_errors] = on ;php_admin_value[memory_limit] = 128M ; Set session path to a directory owned by process user -php_admin_value[session.save_path] = /var/lib/php/session +php_value[session.save_handler] = files +php_value[session.save_path] = /var/lib/php/session diff --git a/php.spec b/php.spec index 99b5cc8..6d56f90 100644 --- a/php.spec +++ b/php.spec @@ -51,8 +51,8 @@ Summary: PHP scripting language for creating dynamic web sites Name: php -Version: 5.4.7 -Release: 11%{?dist} +Version: 5.4.8 +Release: 1%{?dist} License: PHP Group: Development/Languages URL: http://www.php.net/ @@ -81,8 +81,8 @@ Patch20: php-5.4.7-imap.patch Patch21: php-5.4.7-odbctimer.patch # https://bugs.php.net/63149 check sqlite3_column_table_name Patch22: php-5.4.7-sqlite.patch -# https://bugs.php.net/bug.php?id=62886 - php-fpm startup -Patch23: php-5.4.7-fpm.patch +# https://bugs.php.net/61557 crash in libxml +Patch23: php-5.4.8-libxml.patch # Functional changes Patch40: php-5.4.0-dlopen.patch @@ -92,8 +92,6 @@ Patch42: php-5.3.1-systzdata-v10.patch Patch43: php-5.4.0-phpize.patch # Use system libzip instead of bundled one Patch44: php-5.4.5-system-libzip.patch -# https://bugs.php.net/63085 systemd integration -Patch45: php-5.4.7-fpm-systemd.patch # Fixes for tests @@ -167,6 +165,7 @@ Summary: PHP FastCGI Process Manager Requires: php-common%{?_isa} = %{version}-%{release} BuildRequires: systemd-units Requires: systemd-units +Requires(pre): /usr/sbin/useradd Requires(post): systemd-units Requires(preun): systemd-units Requires(postun): systemd-units @@ -241,7 +240,8 @@ package and the php-cli package. %package devel Group: Development/Libraries Summary: Files needed for building PHP extensions -Requires: php%{?_isa} = %{version}-%{release}, autoconf, automake +Requires: php-cli%{?_isa} = %{version}-%{release}, autoconf, automake +Requires: pcre-devel%{?_isa} Obsoletes: php-pecl-pdo-devel Provides: php-zts-devel = %{version}-%{release} Provides: php-zts-devel%{?_isa} = %{version}-%{release} @@ -592,7 +592,7 @@ support for using the enchant library to PHP. %patch20 -p1 -b .imap %patch21 -p1 -b .odbctimer %patch22 -p1 -b .tablename -%patch23 -p1 -b .fpmstartup +%patch23 -p1 -b .libxmlcrash %patch40 -p1 -b .dlopen %patch41 -p1 -b .easter @@ -601,7 +601,6 @@ support for using the enchant library to PHP. %if %{with_libzip} %patch44 -p1 -b .systzip %endif -%patch45 -p1 -b .systemd # Prevent %%doc confusion over LICENSE files cp Zend/LICENSE Zend/ZEND_LICENSE @@ -620,17 +619,9 @@ mkdir build-cgi build-apache build-embedded build-zts build-ztscli \ rm -f tests/basic/php_egg_logo_guid.phpt # affected by systzdata patch rm -f ext/date/tests/timezone_location_get.phpt -# https://bugs.php.net/63147 tests requiring an internet connection -rm -f ext/standard/tests/network/gethostbyname_basic002.phpt -rm -f ext/standard/tests/network/gethostbyname_error004.phpt -rm -f ext/standard/tests/network/getmxrr.phpt -# https://bugzilla.redhat.com/859878 - missing feature in SQLite -# https://bugs.php.net/63149 - build against system SQLite -rm -f ext/pdo_sqlite/tests/bug_42589.phpt # fails sometime rm -f ext/sockets/tests/mcast_ipv?_recv.phpt - # Safety check for API version change. pver=$(sed -n '/#define PHP_VERSION /{s/.* "//;s/".*$//;p}' main/php_version.h) if test "x${pver}" != "x%{version}%{?rcver}"; then @@ -944,7 +935,7 @@ build --with-apxs2=%{_httpd_apxs} \ --with-mysql=shared,%{_prefix} \ --with-mysqli=shared,%{mysql_config} \ --with-pdo-mysql=shared,%{mysql_config} \ - --with-pdo-sqlite=shared,%{_prefix} \ + --without-pdo-sqlite \ ${without_shared} popd @@ -956,6 +947,7 @@ popd cd build-apache # Run tests, using the CLI SAPI export NO_INTERACTION=1 REPORT_EXIT_STATUS=1 MALLOC_CHECK_=2 +export SKIP_ONLINE_TESTS=1 unset TZ LANG LC_ALL if ! make test; then set +x @@ -1160,6 +1152,15 @@ rm -f README.{Zeus,QNX,CVS-RULES} rm files.* macros.php %if %{with_fpm} +%pre fpm +# Add the "apache" user as we don't require httpd +getent group apache >/dev/null || \ + groupadd -g 48 -r apache +getent passwd apache >/dev/null || \ + useradd -r -u 48 -g apache -s /sbin/nologin \ + -d %{contentdir} -c "Apache" apache +exit 0 + %post fpm %if 0%{?systemd_post:1} %systemd_post php-fpm.service @@ -1316,6 +1317,14 @@ fi %changelog +* Thu Oct 18 2012 Remi Collet 5.4.8-1 +- update to 5.4.8 +- define both session.save_handler and session.save_path +- fix possible segfault in libxml (#828526) +- php-fpm: create apache user if needed +- use SKIP_ONLINE_TEST during make test +- php-devel requires pcre-devel and php-cli (instead of php) + * Fri Oct 5 2012 Remi Collet 5.4.7-11 - provides php-phar - update systzdata patch to v10, timezone are case insensitive diff --git a/sources b/sources index 619861b..54445d2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -9cd421f1cc8fa8e7f215e44a1b06199f php-5.4.7.tar.bz2 +bb8c816a9299be8995255ef70c63b800 php-5.4.8.tar.bz2