php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #61557
Patch CGI-FPM_process_could_crash_when_using_libxml revision 2012-05-11 21:54 UTC by i dot am dot jack dot mail at gmail dot com

Patch CGI-FPM_process_could_crash_when_using_libxml for *XML functions Bug #61557

Patch version 2012-05-11 21:54 UTC

Return to Bug #61557 | Download this patch
Patch Revisions:

Developer: i.am.jack.mail@gmail.com

From 100bb87f5517484d75191ff4cdbbc1fdf579791d Mon Sep 17 00:00:00 2001
From: jjacky <i.am.jack.mail@gmail.com>
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

 
PHP Copyright © 2001-2014 The PHP Group
All rights reserved.
Last updated: Fri Apr 18 10:03:03 2014 UTC