]> granicus.if.org Git - php/commitdiff
MFB5.3: Fixed bug#44712 (stream_context_set_params segfaults on invalid arguments)
authorHannes Magnusson <bjori@php.net>
Sun, 13 Apr 2008 22:40:35 +0000 (22:40 +0000)
committerHannes Magnusson <bjori@php.net>
Sun, 13 Apr 2008 22:40:35 +0000 (22:40 +0000)
ext/standard/streamsfuncs.c
ext/standard/tests/streams/bug44712.phpt [new file with mode: 0644]

index d0dc7353dcc0fe3435c01ae15bb004221bbb4b2b..cf69d9a498888792ba0289000a42ff8cae2aa541 100644 (file)
@@ -972,7 +972,11 @@ static int parse_context_params(php_stream_context *context, zval *params TSRMLS
                context->notifier->dtor = user_space_stream_notifier_dtor;
        }
        if (SUCCESS == zend_ascii_hash_find(Z_ARRVAL_P(params), "options", sizeof("options"), (void**)&tmp)) {
-               parse_context_options(context, *tmp TSRMLS_CC);
+               if (Z_TYPE_PP(tmp) == IS_ARRAY) {
+                       parse_context_options(context, *tmp TSRMLS_CC);
+               } else {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid stream/context parameter");
+               }
        }
        if (SUCCESS == zend_ascii_hash_find(Z_ARRVAL_P(params), "encoding", sizeof("encoding"), (void**)&tmp)) {
                zval strval = **tmp;
diff --git a/ext/standard/tests/streams/bug44712.phpt b/ext/standard/tests/streams/bug44712.phpt
new file mode 100644 (file)
index 0000000..9dfb260
--- /dev/null
@@ -0,0 +1,10 @@
+--TEST--
+bug#44712 (stream_context_set_params segfaults on invalid arguments)
+--FILE--
+<?php
+$ctx = stream_context_get_default();
+stream_context_set_params($ctx, array("options" => 1));
+?>
+--EXPECTF--
+Warning: stream_context_set_params(): Invalid stream/context parameter in %sbug44712.php on line %s
+