cvs: ZendEngine2 / zend_execute.c zend_vm_def.h zend_vm_execute.h
[email protected] ("Dmitry Stogov")
| Newsgroups | php.zend-engine.cvs |
|---|---|
| Message-ID | <cvsdmitry1204625183@cvsserver> |
dmitry Tue Mar 4 10:06:23 2008 UTC
Modified files:
/ZendEngine2 zend_execute.c zend_vm_def.h zend_vm_execute.h
Log:
Fixed wrong result of cascading assignment to string offset
Fixed memory corruption on cascading assignment of IS_TMP_VAR into string offset
Fixed opcode caches shared memory corruption on cascading assignment of IS_CONST into string offset
dmitry-20080304100623.txt
(text/plain, 29.8 KB)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute.c?r1=1.789&r2=1.790&diff_format=u
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.789 ZendEngine2/zend_execute.c:1.790
--- ZendEngine2/zend_execute.c:1.789 Thu Feb 28 19:33:40 2008
+++ ZendEngine2/zend_execute.c Tue Mar 4 10:06:22 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_execute.c,v 1.789 2008/02/28 19:33:40 felipe Exp $ */
+/* $Id: zend_execute.c,v 1.790 2008/03/04 10:06:22 dmitry Exp $ */
#define ZEND_INTENSIVE_DEBUGGING 0
@@ -652,7 +652,7 @@
}
/* }}} */
-static inline void zend_assign_to_string_offset(temp_variable *T, zval *value, int value_type TSRMLS_DC) /* {{{ */
+static inline int zend_assign_to_string_offset(temp_variable *T, zval *value, int value_type TSRMLS_DC) /* {{{ */
{
if (UG(unicode) && Z_TYPE_P(T->str_offset.str) == IS_STRING && Z_TYPE_P(value) != IS_STRING) {
convert_to_unicode(T->str_offset.str);
@@ -662,7 +662,7 @@
if (((int)T->str_offset.offset < 0)) {
zend_error(E_WARNING, "Illegal string offset: %d", T->str_offset.offset);
- return;
+ return 0;
}
if (T->str_offset.offset >= Z_STRLEN_P(T->str_offset.str)) {
@@ -699,7 +699,7 @@
if (((int)T->str_offset.offset < 0)) {
zend_error(E_WARNING, "Illegal string offset: %d", T->str_offset.offset);
- return;
+ return 0;
}
if (T->str_offset.offset >= Z_USTRLEN_P(T->str_offset.str)) {
@@ -729,6 +729,7 @@
}
}
}
+ return 1;
}
/* }}} */
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.215&r2=1.216&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.215 ZendEngine2/zend_vm_def.h:1.216
--- ZendEngine2/zend_vm_def.h:1.215 Sat Feb 23 17:03:51 2008
+++ ZendEngine2/zend_vm_def.h Tue Mar 4 10:06:22 2008
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_vm_def.h,v 1.215 2008/02/23 17:03:51 helly Exp $ */
+/* $Id: zend_vm_def.h,v 1.216 2008/03/04 10:06:22 dmitry Exp $ */
/* If you change this file, please regenerate the zend_vm_execute.h and
* zend_vm_opcodes.h files by running:
@@ -1586,13 +1586,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -1611,14 +1621,23 @@
zval **variable_ptr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, OP2_TYPE TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, OP2_TYPE TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_OP2_TMP_FREE() TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP1_VAR_PTR();
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.219&r2=1.220&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.219 ZendEngine2/zend_vm_execute.h:1.220
--- ZendEngine2/zend_vm_execute.h:1.219 Sat Feb 23 17:03:52 2008
+++ ZendEngine2/zend_vm_execute.h Tue Mar 4 10:06:22 2008
@@ -10167,13 +10167,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -10192,14 +10202,23 @@
zval **variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_CONST TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_CONST TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, 0 TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
@@ -12035,13 +12054,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -12060,14 +12089,23 @@
zval **variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_TMP_VAR TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_TMP_VAR TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, 1 TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
@@ -13833,13 +13871,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -13858,14 +13906,23 @@
zval **variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_VAR TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_VAR TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, 0 TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
@@ -14904,13 +14961,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -16271,13 +16338,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -16296,14 +16373,23 @@
zval **variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_CV TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_CV TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, 0 TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
@@ -24175,13 +24261,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -24200,14 +24296,23 @@
zval **variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_CONST TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_CONST TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, 0 TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
/* zend_assign_to_variable() always takes care of op2, never free it! */
@@ -25860,13 +25965,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -25885,14 +26000,23 @@
zval **variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_TMP_VAR TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_TMP_VAR TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, 1 TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
/* zend_assign_to_variable() always takes care of op2, never free it! */
@@ -27547,13 +27671,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -27572,14 +27706,23 @@
zval **variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_VAR TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_VAR TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, 0 TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
/* zend_assign_to_variable() always takes care of op2, never free it! */
@@ -28509,13 +28652,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -29772,13 +29925,23 @@
value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
variable_ptr_ptr = _get_zval_ptr_ptr_var(&op_data->op2, EX(Ts), &free_op_data2 TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(op_data->op2.u.var), value, op_data->op1.op_type TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(op_data->op2.u.var).str_offset.str)+EX_T(op_data->op2.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, IS_TMP_FREE(free_op_data1) TSRMLS_CC);
- }
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
FREE_OP_VAR_PTR(free_op_data2);
FREE_OP_IF_VAR(free_op_data1);
@@ -29797,14 +29960,23 @@
zval **variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
if (!variable_ptr_ptr) {
- zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_CV TSRMLS_CC);
+ if (zend_assign_to_string_offset(&EX_T(opline->op1.u.var), value, IS_CV TSRMLS_CC)) {
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+ ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
+ INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
+ ZVAL_STRINGL(EX_T(opline->result.u.var).var.ptr, Z_STRVAL_P(EX_T(opline->op1.u.var).str_offset.str)+EX_T(opline->op1.u.var).str_offset.offset, 1, 1);
+ }
+ } else if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, EG(uninitialized_zval_ptr));
+ PZVAL_LOCK(EG(uninitialized_zval_ptr));
+ }
} else {
value = zend_assign_to_variable(variable_ptr_ptr, value, 0 TSRMLS_CC);
- }
-
- if (!RETURN_VALUE_UNUSED(&opline->result)) {
- AI_SET_PTR(EX_T(opline->result.u.var).var, value);
- PZVAL_LOCK(value);
+ if (!RETURN_VALUE_UNUSED(&opline->result)) {
+ AI_SET_PTR(EX_T(opline->result.u.var).var, value);
+ PZVAL_LOCK(value);
+ }
}
/* zend_assign_to_variable() always takes care of op2, never free it! */