diff options
| author | Ilia Alshanetsky <iliaa@php.net> | 2007-10-04 23:23:43 +0000 |
|---|---|---|
| committer | Ilia Alshanetsky <iliaa@php.net> | 2007-10-04 23:23:43 +0000 |
| commit | 07710a5fb9f9d4ae94bdf9de677d649c6ec19258 (patch) | |
| tree | 00ceb6bef950503363b00da327d2b7915594cc8e /Zend | |
| parent | 1be447eb9584794d40d91fcf56b71c90d76ee46d (diff) | |
| download | php-git-07710a5fb9f9d4ae94bdf9de677d649c6ec19258.tar.gz | |
MFB: Fixed bug #42817 (clone() on a non-object does not result in a fatal
error)
Diffstat (limited to 'Zend')
| -rwxr-xr-x | Zend/tests/bug36071.phpt | 4 | ||||
| -rw-r--r-- | Zend/tests/bug42817.phpt | 9 | ||||
| -rw-r--r-- | Zend/tests/bug42818.phpt | 2 | ||||
| -rw-r--r-- | Zend/zend_vm_def.h | 4 | ||||
| -rw-r--r-- | Zend/zend_vm_execute.h | 12 |
5 files changed, 19 insertions, 12 deletions
diff --git a/Zend/tests/bug36071.phpt b/Zend/tests/bug36071.phpt index 3b8e05dfab..e5146091e1 100755 --- a/Zend/tests/bug36071.phpt +++ b/Zend/tests/bug36071.phpt @@ -6,8 +6,6 @@ error_reporting=4095 <?php $a = clone 0; $a[0]->b = 0; -echo "ok\n"; ?> --EXPECTF-- -Warning: __clone method called on non-object in %sbug36071.php on line 2 -ok
\ No newline at end of file +Fatal error: __clone method called on non-object in %sbug36071.php on line 2
\ No newline at end of file diff --git a/Zend/tests/bug42817.phpt b/Zend/tests/bug42817.phpt new file mode 100644 index 0000000000..b1beca4d0a --- /dev/null +++ b/Zend/tests/bug42817.phpt @@ -0,0 +1,9 @@ +--TEST-- +Bug #42817 (clone() on a non-object does not result in a fatal error) +--FILE-- +<?php +$a = clone(null); +array_push($a->b, $c); +?> +--EXPECTF-- +Fatal error: __clone method called on non-object in %sbug42817.php on line 2 diff --git a/Zend/tests/bug42818.phpt b/Zend/tests/bug42818.phpt index a1d79a41e5..09ad693b44 100644 --- a/Zend/tests/bug42818.phpt +++ b/Zend/tests/bug42818.phpt @@ -5,5 +5,5 @@ Bug #42818 ($foo = clone(array()); leaks memory) $foo = clone(array()); ?> --EXPECTF-- -Warning: __clone method called on non-object in %sbug42818.php on line 2 +Fatal error: __clone method called on non-object in %sbug42818.php on line 2 diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 39235dba7b..514c3f299e 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2531,10 +2531,10 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMP|VAR|UNUSED|CV, ANY) zend_object_clone_obj_t clone_call; if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); + zend_error_noreturn(E_ERROR, "__clone method called on non-object"); EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); EX_T(opline->result.u.var).var.ptr->refcount++; - FREE_OP1(); + FREE_OP1_IF_VAR(); ZEND_VM_NEXT_OPCODE(); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 2caa1db50e..8ce7ef9724 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -1837,7 +1837,7 @@ static int ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_object_clone_obj_t clone_call; if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); + zend_error_noreturn(E_ERROR, "__clone method called on non-object"); EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); EX_T(opline->result.u.var).var.ptr->refcount++; @@ -4412,10 +4412,10 @@ static int ZEND_CLONE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_object_clone_obj_t clone_call; if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); + zend_error_noreturn(E_ERROR, "__clone method called on non-object"); EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); EX_T(opline->result.u.var).var.ptr->refcount++; - zval_dtor(free_op1.var); + ZEND_VM_NEXT_OPCODE(); } @@ -7559,7 +7559,7 @@ static int ZEND_CLONE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_object_clone_obj_t clone_call; if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); + zend_error_noreturn(E_ERROR, "__clone method called on non-object"); EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); EX_T(opline->result.u.var).var.ptr->refcount++; if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; @@ -14719,7 +14719,7 @@ static int ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_object_clone_obj_t clone_call; if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); + zend_error_noreturn(E_ERROR, "__clone method called on non-object"); EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); EX_T(opline->result.u.var).var.ptr->refcount++; @@ -19631,7 +19631,7 @@ static int ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) zend_object_clone_obj_t clone_call; if (!obj || Z_TYPE_P(obj) != IS_OBJECT) { - zend_error(E_WARNING, "__clone method called on non-object"); + zend_error_noreturn(E_ERROR, "__clone method called on non-object"); EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr); EX_T(opline->result.u.var).var.ptr->refcount++; |
