summaryrefslogtreecommitdiffstats
path: root/php-5.4.8-libxml.patch
blob: d9e92e9c6bde2aea09778b23ab3c314836a139b2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
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