]> granicus.if.org Git - php/commitdiff
MFH: Fixed bug #44712 (stream_context_set_params segfaults on invalid
authorHannes Magnusson <bjori@php.net>
Wed, 7 May 2008 20:02:42 +0000 (20:02 +0000)
committerHannes Magnusson <bjori@php.net>
Wed, 7 May 2008 20:02:42 +0000 (20:02 +0000)
arguments).

ext/standard/streamsfuncs.c

index ca598a7f2b12c22b4fa4574b737f7e75688c6de4..60560314ee8ed5d2a2d144e26031dc9276b08697 100644 (file)
@@ -879,7 +879,7 @@ static int parse_context_options(php_stream_context *context, zval *options)
        return ret;
 }
 
-static int parse_context_params(php_stream_context *context, zval *params)
+static int parse_context_params(php_stream_context *context, zval *params TSRMLS_DC)
 {
        int ret = SUCCESS;
        zval **tmp;
@@ -898,7 +898,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;
@@ -1006,7 +1010,7 @@ PHP_FUNCTION(stream_context_set_params)
                RETURN_FALSE;
        }
 
-       RETVAL_BOOL(parse_context_params(context, params) == SUCCESS);
+       RETVAL_BOOL(parse_context_params(context, params TSRMLS_CC) == SUCCESS);
 }
 /* }}} */