diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-10-07 17:52:35 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-10-07 17:52:35 +0200 |
commit | 8a03fd6a5ef3e5e18ce75278236bccc1bc0b6b60 (patch) | |
tree | 319c7ad4581a4d7964596fe10715a8d84578973f | |
parent | 2624c9a50575234d78b3a278fe6b7bd53366295b (diff) | |
parent | 19e6abebc763e93e5c88f1f17ecaad7a07d2e478 (diff) | |
download | php-git-8a03fd6a5ef3e5e18ce75278236bccc1bc0b6b60.tar.gz |
Merge branch 'PHP-7.2' into PHP-7.3
-rw-r--r-- | ext/standard/tests/filters/object_init_failure.phpt | 19 | ||||
-rw-r--r-- | ext/standard/user_filters.c | 9 |
2 files changed, 25 insertions, 3 deletions
diff --git a/ext/standard/tests/filters/object_init_failure.phpt b/ext/standard/tests/filters/object_init_failure.phpt new file mode 100644 index 0000000000..8175bbe44b --- /dev/null +++ b/ext/standard/tests/filters/object_init_failure.phpt @@ -0,0 +1,19 @@ +--TEST-- +Creating the stream filter object may fail +--FILE-- +<?php +class SampleFilter extends php_user_filter { + private $data = \FOO; +} +stream_filter_register('sample.filter', SampleFilter::class); +try { + var_dump(file_get_contents('php://filter/read=sample.filter/resource='. __FILE__)); +} catch (Error $e) { + echo $e->getMessage(), "\n"; +} +?> +--EXPECTF-- +Warning: file_get_contents(): unable to create or locate filter "sample.filter" in %s on line %d + +Warning: file_get_contents(): Unable to create filter (sample.filter) in %s on line %d +Undefined constant 'FOO' diff --git a/ext/standard/user_filters.c b/ext/standard/user_filters.c index 67452bdab2..584d055145 100644 --- a/ext/standard/user_filters.c +++ b/ext/standard/user_filters.c @@ -320,14 +320,17 @@ static php_stream_filter *user_filter_factory_create(const char *filtername, } } + /* create the object */ + if (object_init_ex(&obj, fdat->ce) == FAILURE) { + return NULL; + } + filter = php_stream_filter_alloc(&userfilter_ops, NULL, 0); if (filter == NULL) { + zval_ptr_dtor(&obj); return NULL; } - /* create the object */ - object_init_ex(&obj, fdat->ce); - /* filtername */ add_property_string(&obj, "filtername", (char*)filtername); |