diff options
-rw-r--r-- | ext/standard/tests/general_functions/is_resource.phpt | 10 | ||||
-rw-r--r-- | ext/standard/type.c | 7 |
2 files changed, 17 insertions, 0 deletions
diff --git a/ext/standard/tests/general_functions/is_resource.phpt b/ext/standard/tests/general_functions/is_resource.phpt new file mode 100644 index 0000000000..d44461e442 --- /dev/null +++ b/ext/standard/tests/general_functions/is_resource.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #27822: is_resource() returns TRUE for closed resources +--FILE-- +<?php + $f = fopen(__FILE__, 'r'); + fclose($f); + var_dump(is_resource($f)); +?> +--EXPECT-- +bool(false) diff --git a/ext/standard/type.c b/ext/standard/type.c index 296353decd..3005df1dce 100644 --- a/ext/standard/type.c +++ b/ext/standard/type.c @@ -218,6 +218,13 @@ static void php_is_type(INTERNAL_FUNCTION_PARAMETERS, int type) RETURN_FALSE; } } + if (type == IS_RESOURCE) { + char *type_name; + type_name = zend_rsrc_list_get_rsrc_type(Z_LVAL_PP(arg) TSRMLS_CC); + if (!type_name) { + RETURN_FALSE; + } + } RETURN_TRUE; } else { RETURN_FALSE; |