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

index ecd18f9aa97d300418b14c00a4f5287dacba0d11..d1c4d2889d0826028afa40fbab6c90d3744018b3 100644 (file)
@@ -901,7 +901,11 @@ static int parse_context_params(php_stream_context *context, zval *params)
                context->notifier->dtor = user_space_stream_notifier_dtor;
        }
        if (SUCCESS == zend_hash_find(Z_ARRVAL_P(params), "options", sizeof("options"), (void**)&tmp)) {
-               parse_context_options(context, *tmp);
+               if (Z_TYPE_PP(tmp) == IS_ARRAY) {
+                       parse_context_options(context, *tmp);
+               } else {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid stream/context parameter");
+               }
        }
        
        return ret;
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
+