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
|