--- /dev/null
+--TEST--
+Bug #76667 (Segfault with divide-assign op and __get + __set)
+--FILE--
+<?php
+
+class T {
+ public function __get($k)
+ {
+ return $undefined->$k;
+ }
+
+ public function __set($k, $v)
+ {
+ return $this->$v /= 0;
+ }
+};
+
+$x = new T;
+$x->x = 1;
+?>
+--EXPECTF--
+Notice: Undefined variable: undefined in %sbug76667.php on line %d
+
+Notice: Trying to get property '1' of non-object in %sbug76667.php on line %d
+
+Warning: Division by zero in %sbug76667.php on line %d
+
+Notice: Undefined variable: undefined in %sbug76667.php on line %d
+
+Notice: Trying to get property 'NAN' of non-object in %sbug76667.php on line %d
+
+Warning: Division by zero in %sbug76667.php on line %d
+
+Notice: Undefined variable: undefined in %sbug76667.php on line %d
+
+Notice: Trying to get property 'NAN' of non-object in %sbug76667.php on line %d
+
+Warning: Division by zero in %sbug76667.php on line %d
zend_string *tmp_property_name;
zend_string *property_name = zval_get_tmp_string(property, &tmp_property_name);
zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
- zend_tmp_string_release(property_name);
+ zend_tmp_string_release(tmp_property_name);
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
}
} else {
zend_error(E_WARNING, "Attempt to assign property '%s' of non-object", ZSTR_VAL(property_name));
}
- zend_tmp_string_release(property_name);
+ zend_tmp_string_release(tmp_property_name);
}
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
ZVAL_NULL(EX_VAR(opline->result.var));
zend_string *tmp_property_name;
zend_string *property_name = zval_get_tmp_string(property, &tmp_property_name);
zend_error(E_WARNING, "Attempt to modify property '%s' of non-object", ZSTR_VAL(property_name));
- zend_tmp_string_release(property_name);
+ zend_tmp_string_release(tmp_property_name);
}
return 0;
}
zend_string *tmp_property_name;
zend_string *property_name = zval_get_tmp_string(property, &tmp_property_name);
zend_error(E_NOTICE, "Trying to get property '%s' of non-object", ZSTR_VAL(property_name));
- zend_tmp_string_release(property_name);
+ zend_tmp_string_release(tmp_property_name);
}
static zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_wrong_property_unset(zval *property)
zend_string *tmp_property_name;
zend_string *property_name = zval_get_tmp_string(property, &tmp_property_name);
zend_error(E_NOTICE, "Trying to unset property '%s' of non-object", ZSTR_VAL(property_name));
- zend_tmp_string_release(property_name);
+ zend_tmp_string_release(tmp_property_name);
}
static zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_wrong_property_check(zval *property)
zend_string *tmp_property_name;
zend_string *property_name = zval_get_tmp_string(property, &tmp_property_name);
zend_error(E_NOTICE, "Trying to check property '%s' of non-object", ZSTR_VAL(property_name));
- zend_tmp_string_release(property_name);
+ zend_tmp_string_release(tmp_property_name);
}
static zend_never_inline ZEND_COLD void ZEND_FASTCALL zend_deprecated_function(const zend_function *fbc)