diff options
author | CHU Zhaowei <me@jhdxr.com> | 2019-09-08 09:29:32 +0000 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-09-09 17:27:17 +0200 |
commit | 1ac6b0251b6585490dfb549eb70b8c618cf90913 (patch) | |
tree | 1ebc1b2d63018bba1a09fe9b00a4f0de709c8d66 | |
parent | 8ead77936e68554d47033c5c90d2c48d96db0212 (diff) | |
download | php-git-1ac6b0251b6585490dfb549eb70b8c618cf90913.tar.gz |
Fix bug #72884 isCloneable() on SplFileObject should return false
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/spl/spl_directory.c | 4 | ||||
-rw-r--r-- | ext/spl/tests/bug72884.phpt | 10 | ||||
-rw-r--r-- | ext/spl/tests/bug72888.phpt | 2 |
4 files changed, 17 insertions, 3 deletions
@@ -25,6 +25,10 @@ PHP NEWS . Fixed bug #78510 (Partially uninitialized buffer returned by sodium_crypto_generichash_init()). (Frank Denis, cmb) +- SPL: + . Fixed bug #72884 (SplObject isCloneable() returns true but errs on clone). + (Chu Zhaowei) + 29 Aug 2019, PHP 7.2.22 - Core: diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c index 4f274641e8..91ea2e0265 100644 --- a/ext/spl/spl_directory.c +++ b/ext/spl/spl_directory.c @@ -379,8 +379,7 @@ static zend_object *spl_filesystem_object_clone(zval *zobject) intern->u.dir.index = index; break; case SPL_FS_FILE: - zend_throw_error(NULL, "An object of class %s cannot be cloned", ZSTR_VAL(old_object->ce->name)); - return new_object; + ZEND_ASSERT(0); } intern->file_class = source->file_class; @@ -3168,6 +3167,7 @@ PHP_MINIT_FUNCTION(spl_directory) REGISTER_SPL_IMPLEMENTS(RecursiveDirectoryIterator, RecursiveIterator); memcpy(&spl_filesystem_object_check_handlers, &spl_filesystem_object_handlers, sizeof(zend_object_handlers)); + spl_filesystem_object_check_handlers.clone_obj = NULL; spl_filesystem_object_check_handlers.get_method = spl_filesystem_object_get_method_check; #ifdef HAVE_GLOB diff --git a/ext/spl/tests/bug72884.phpt b/ext/spl/tests/bug72884.phpt new file mode 100644 index 0000000000..178e0e1d70 --- /dev/null +++ b/ext/spl/tests/bug72884.phpt @@ -0,0 +1,10 @@ +--TEST-- +Bug #72884: isCloneable() on SplFileObject should return false +--FILE-- +<?php +$x=new SplFileObject(__FILE__); +$r=new ReflectionObject($x); +var_dump($r->isCloneable()); + +--EXPECT-- +bool(false) diff --git a/ext/spl/tests/bug72888.phpt b/ext/spl/tests/bug72888.phpt index 7d2fc6db08..d354490f88 100644 --- a/ext/spl/tests/bug72888.phpt +++ b/ext/spl/tests/bug72888.phpt @@ -12,7 +12,7 @@ try { var_dump($y); ?> --EXPECTF-- -string(49) "An object of class SplFileObject cannot be cloned" +string(60) "Trying to clone an uncloneable object of class SplFileObject" Notice: Undefined variable: y in %sbug72888.php on line %d NULL |