]> granicus.if.org Git - php/commitdiff
- Fixed bug #54440: libxml extension ignores default context.
authorGustavo André dos Santos Lopes <cataphract@php.net>
Sat, 9 Apr 2011 18:32:55 +0000 (18:32 +0000)
committerGustavo André dos Santos Lopes <cataphract@php.net>
Sat, 9 Apr 2011 18:32:55 +0000 (18:32 +0000)
NEWS
ext/libxml/libxml.c
ext/libxml/tests/bug54440.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 1503a1d1c20270d021f8db526d5310ea9383b3b8..2e0029ee07a2db7874ea3cf517a2b5bc54e74097 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -41,6 +41,9 @@ PHP                                                                        NEWS
   . Fixed bug #53339 (Fails to build when compilng with gcc 4.5 and DSO
     libraries). (Clint Byrum, Raphael)
 
+- libxml extension:
+  . Fixed bug #54440 (libxml extension ignores default context). (Gustavo)
+
 - mbstring extension:
   . Fixed bug #54494 (mb_substr() mishandles UTF-32LE and UCS-2LE). (Gustavo)
 
index 0c3b64ea2f3fd72c85012503f5196dc3e39e8136..c9fb2871f3eee7bba77770aab8d2be1559f91834 100644 (file)
@@ -310,9 +310,7 @@ static void *php_libxml_streams_IO_open_wrapper(const char *filename, const char
                }
        }
 
-       if (LIBXML(stream_context)) {
-               context = zend_fetch_resource(&LIBXML(stream_context) TSRMLS_CC, -1, "Stream-Context", NULL, 1, php_le_stream_context());
-       }
+       context = php_stream_context_from_zval(LIBXML(stream_context), 0);
 
        ret_val = php_stream_open_wrapper_ex(path_to_open, (char *)mode, ENFORCE_SAFE_MODE|REPORT_ERRORS, NULL, context);
        if (isescaped) {
diff --git a/ext/libxml/tests/bug54440.phpt b/ext/libxml/tests/bug54440.phpt
new file mode 100644 (file)
index 0000000..4074ff9
--- /dev/null
@@ -0,0 +1,51 @@
+--TEST--
+Bug #54440: libxml extension ignores default context
+--SKIPIF--
+<?php if (!extension_loaded('simplexml')) die('skip simplexml required for this test'); ?>
+--FILE--
+<?php
+
+class TestWrapper {
+
+function stream_open($path, $mode, $options, &$opened_path)
+{
+       if ($this->context)
+               print_r(stream_context_get_options($this->context));
+       return false;
+}
+
+function url_stat($path, $flags)
+{
+return array();
+}
+
+}
+
+stream_wrapper_register("test", "TestWrapper")
+    or die("Failed to register protocol");
+
+$ctx1 = stream_context_create(array('test'=>array('test'=>'test 1')));
+$ctx2 = stream_context_create(array('test'=>array('test'=>'test 2')));
+
+stream_context_set_default(stream_context_get_options($ctx1));
+@simplexml_load_file('test://sdfsdf');
+
+libxml_set_streams_context($ctx2);
+@simplexml_load_file('test://sdfsdf');
+--EXPECT--
+Array
+(
+    [test] => Array
+        (
+            [test] => test 1
+        )
+
+)
+Array
+(
+    [test] => Array
+        (
+            [test] => test 2
+        )
+
+)