Browse Source

Fixed bug #44660 (Indexed and reference assignment to propery of non-object don't trigger warning)

experimental/first_unicode_implementation
Dmitry Stogov 18 years ago
parent
commit
1e355b4173
  1. 2
      Zend/tests/bug36303.phpt
  2. 49
      Zend/tests/bug44660.phpt
  3. 1
      Zend/zend_execute.c

2
Zend/tests/bug36303.phpt

@ -8,5 +8,7 @@ foreach($x->a->b as &$v) {
echo "ok\n";
?>
--EXPECTF--
Warning: Attempt to modify property of non-object in %sbug36303.php on line 3
Warning: Invalid argument supplied for foreach() in %sbug36303.php on line 3
ok

49
Zend/tests/bug44660.phpt

@ -0,0 +1,49 @@
--TEST--
Bug #44660 (Indexed and reference assignment to propery of non-object don't trigger warning)
--FILE--
<?php
$s = "hello";
$a = true;
echo "--> read access: ";
echo $a->p;
echo "\n--> direct assignment: ";
$a->p = $s;
echo "\n--> increment: ";
$a->p++;
echo "\n--> reference assignment:";
$a->p =& $s;
echo "\n--> reference assignment:";
$s =& $a->p;
echo "\n--> indexed assignment:";
$a->p[0] = $s;
echo "\n--> Confirm assignments have had no impact:\n";
var_dump($a);
?>
--EXPECTF--
--> read access:
Notice: Trying to get property of non-object in %sbug44660.php on line 6
--> direct assignment:
Warning: Attempt to assign property of non-object in %sbug44660.php on line 9
--> increment:
Warning: Attempt to increment/decrement property of non-object in %sbug44660.php on line 12
--> reference assignment:
Warning: Attempt to modify property of non-object in %sbug44660.php on line 15
--> reference assignment:
Warning: Attempt to modify property of non-object in %sbug44660.php on line 18
--> indexed assignment:
Warning: Attempt to modify property of non-object in %sbug44660.php on line 21
--> Confirm assignments have had no impact:
bool(true)

1
Zend/zend_execute.c

@ -1289,6 +1289,7 @@ static void zend_fetch_property_address(temp_variable *result, zval **container_
zend_error(E_STRICT, "Creating default object from empty value");
object_init(container);
} else {
zend_error(E_WARNING, "Attempt to modify property of non-object");
result->var.ptr_ptr = &EG(error_zval_ptr);
PZVAL_LOCK(EG(error_zval_ptr));
return;

Loading…
Cancel
Save