1 : /*
2 : +----------------------------------------------------------------------+
3 : | Zend Engine |
4 : +----------------------------------------------------------------------+
5 : | Copyright (c) 1998-2007 Zend Technologies Ltd. (http://www.zend.com) |
6 : +----------------------------------------------------------------------+
7 : | This source file is subject to version 2.00 of the Zend license, |
8 : | that is bundled with this package in the file LICENSE, and is |
9 : | available through the world-wide-web at the following url: |
10 : | http://www.zend.com/license/2_00.txt. |
11 : | If you did not receive a copy of the Zend license and are unable to |
12 : | obtain it through the world-wide-web, please send a note to |
13 : | license@zend.com so we can mail you a copy immediately. |
14 : +----------------------------------------------------------------------+
15 : | Authors: Andi Gutmans <andi@zend.com> |
16 : | Zeev Suraski <zeev@zend.com> |
17 : | Dmitry Stogov <dmitry@zend.com> |
18 : +----------------------------------------------------------------------+
19 : */
20 :
21 : static opcode_handler_t zend_user_opcode_handlers[256] = {(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL,(opcode_handler_t)NULL};
22 :
23 : static zend_uchar zend_user_opcodes[256] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255};
24 :
25 : static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op);
26 :
27 :
28 : #define ZEND_VM_CONTINUE() return 0
29 : #define ZEND_VM_RETURN() return 1
30 : #define ZEND_VM_DISPATCH(opcode, opline) return zend_vm_get_opcode_handler(opcode, opline)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
31 :
32 : #define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL execute_data TSRMLS_CC
33 :
34 : ZEND_API void execute(zend_op_array *op_array TSRMLS_DC)
35 30301 : {
36 : zend_execute_data execute_data;
37 :
38 :
39 30301 : if (EG(exception)) {
40 0 : return;
41 : }
42 :
43 : /* Initialize execute_data */
44 30301 : EX(fbc) = NULL;
45 30301 : EX(object) = NULL;
46 30301 : EX(old_error_reporting) = NULL;
47 30301 : if (op_array->T < TEMP_VAR_STACK_LIMIT) {
48 30301 : EX(Ts) = (temp_variable *) do_alloca(sizeof(temp_variable) * op_array->T);
49 : } else {
50 0 : EX(Ts) = (temp_variable *) safe_emalloc(sizeof(temp_variable), op_array->T, 0);
51 : }
52 30301 : EX(CVs) = (zval***)do_alloca(sizeof(zval**) * op_array->last_var);
53 30301 : memset(EX(CVs), 0, sizeof(zval**) * op_array->last_var);
54 30301 : EX(op_array) = op_array;
55 30301 : EX(original_in_execution) = EG(in_execution);
56 30301 : EX(symbol_table) = EG(active_symbol_table);
57 30301 : EX(prev_execute_data) = EG(current_execute_data);
58 30301 : EG(current_execute_data) = &execute_data;
59 :
60 30301 : EG(in_execution) = 1;
61 30301 : if (op_array->start_op) {
62 0 : ZEND_VM_SET_OPCODE(op_array->start_op);
63 : } else {
64 30301 : ZEND_VM_SET_OPCODE(op_array->opcodes);
65 : }
66 :
67 30301 : if (op_array->uses_this && EG(This)) {
68 9 : EG(This)->refcount++; /* For $this pointer */
69 9 : if (zend_hash_add(EG(active_symbol_table), "this", sizeof("this"), &EG(This), sizeof(zval *), NULL)==FAILURE) {
70 0 : EG(This)->refcount--;
71 : }
72 : }
73 :
74 30301 : EG(opline_ptr) = &EX(opline);
75 :
76 30301 : EX(function_state).function = (zend_function *) op_array;
77 30301 : EG(function_state_ptr) = &EX(function_state);
78 : #if ZEND_DEBUG
79 : /* function_state.function_symbol_table is saved as-is to a stack,
80 : * which is an intentional UMR. Shut it up if we're in DEBUG.
81 : */
82 : EX(function_state).function_symbol_table = NULL;
83 : #endif
84 :
85 : while (1) {
86 : #ifdef ZEND_WIN32
87 : if (EG(timed_out)) {
88 : zend_timeout(0);
89 : }
90 : #endif
91 :
92 1356964 : if (EX(opline)->handler(&execute_data TSRMLS_CC) > 0) {
93 30289 : return;
94 : }
95 :
96 1326663 : }
97 : zend_error_noreturn(E_ERROR, "Arrived at end of main loop which shouldn't happen");
98 : }
99 :
100 : #undef EX
101 : #define EX(element) execute_data->element
102 :
103 : static int ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
104 61774 : {
105 : #if DEBUG_ZEND>=2
106 : printf("Jumping to %d\n", EX(opline)->op1.u.opline_num);
107 : #endif
108 61774 : ZEND_VM_SET_OPCODE(EX(opline)->op1.u.jmp_addr);
109 61774 : ZEND_VM_CONTINUE(); /* CHECK_ME */
110 : }
111 :
112 : static int ZEND_INIT_STRING_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
113 5292 : {
114 5292 : zval *tmp = &EX_T(EX(opline)->result.u.var).tmp_var;
115 :
116 5292 : tmp->value.str.val = emalloc(1);
117 5292 : tmp->value.str.val[0] = 0;
118 5292 : tmp->value.str.len = 0;
119 5292 : tmp->refcount = 1;
120 5292 : tmp->type = IS_STRING;
121 5292 : tmp->is_ref = 0;
122 5292 : ZEND_VM_NEXT_OPCODE();
123 : }
124 :
125 : static int zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS)
126 110714 : {
127 110714 : zend_op *opline = EX(opline);
128 : zval **original_return_value;
129 110714 : zend_class_entry *current_scope = NULL;
130 110714 : zval *current_this = NULL;
131 110714 : int return_value_used = RETURN_VALUE_USED(opline);
132 : zend_bool should_change_scope;
133 : zend_op *ctor_opline;
134 :
135 110714 : if (EX(function_state).function->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) {
136 1 : if (EX(function_state).function->common.fn_flags & ZEND_ACC_ABSTRACT) {
137 0 : zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", EX(function_state).function->common.scope->name, EX(function_state).function->common.function_name);
138 : ZEND_VM_NEXT_OPCODE(); /* Never reached */
139 : }
140 1 : if (EX(function_state).function->common.fn_flags & ZEND_ACC_DEPRECATED) {
141 1 : zend_error(E_STRICT, "Function %s%s%s() is deprecated",
142 : EX(function_state).function->common.scope ? EX(function_state).function->common.scope->name : "",
143 : EX(function_state).function->common.scope ? "::" : "",
144 : EX(function_state).function->common.function_name);
145 : }
146 : }
147 :
148 110714 : zend_ptr_stack_2_push(&EG(argument_stack), (void *) opline->extended_value, NULL);
149 :
150 110714 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
151 :
152 141542 : if (EX(function_state).function->type == ZEND_USER_FUNCTION
153 : || EX(function_state).function->common.scope) {
154 30828 : should_change_scope = 1;
155 30828 : current_this = EG(This);
156 30828 : EG(This) = EX(object);
157 30828 : current_scope = EG(scope);
158 30828 : EG(scope) = (EX(function_state).function->type == ZEND_USER_FUNCTION || !EX(object)) ? EX(function_state).function->common.scope : NULL;
159 : } else {
160 79886 : should_change_scope = 0;
161 : }
162 :
163 110714 : EX_T(opline->result.u.var).var.fcall_returned_reference = 0;
164 :
165 110714 : if (EX(function_state).function->common.scope) {
166 1886 : if (!EG(This) && !(EX(function_state).function->common.fn_flags & ZEND_ACC_STATIC)) {
167 : int severity;
168 : char *severity_word;
169 0 : if (EX(function_state).function->common.fn_flags & ZEND_ACC_ALLOW_STATIC) {
170 0 : severity = E_STRICT;
171 0 : severity_word = "should not";
172 : } else {
173 0 : severity = E_ERROR;
174 0 : severity_word = "cannot";
175 : }
176 0 : zend_error(severity, "Non-static method %s::%s() %s be called statically", EX(function_state).function->common.scope->name, EX(function_state).function->common.function_name, severity_word);
177 : }
178 : }
179 110714 : if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
180 81518 : unsigned char return_reference = EX(function_state).function->common.return_reference;
181 :
182 81518 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
183 81518 : INIT_ZVAL(*(EX_T(opline->result.u.var).var.ptr));
184 :
185 81518 : if (EX(function_state).function->common.arg_info) {
186 77570 : zend_uint i=0;
187 : zval **p;
188 : ulong arg_count;
189 :
190 77570 : p = (zval **) EG(argument_stack).top_element-2;
191 77570 : arg_count = (ulong) *p;
192 :
193 285263 : while (arg_count>0) {
194 130123 : zend_verify_arg_type(EX(function_state).function, ++i, *(p-arg_count) TSRMLS_CC);
195 130123 : arg_count--;
196 : }
197 : }
198 81518 : if (!zend_execute_internal) {
199 : /* saves one function call if zend_execute_internal is not used */
200 81518 : ((zend_internal_function *) EX(function_state).function)->handler(opline->extended_value, EX_T(opline->result.u.var).var.ptr, EX(function_state).function->common.return_reference?&EX_T(opline->result.u.var).var.ptr:NULL, EX(object), return_value_used TSRMLS_CC);
201 : } else {
202 0 : zend_execute_internal(execute_data, return_value_used TSRMLS_CC);
203 : }
204 :
205 81512 : EG(current_execute_data) = execute_data;
206 :
207 : /* We shouldn't fix bad extensions here,
208 : because it can break proper ones (Bug #34045)
209 : if (!EX(function_state).function->common.return_reference) {
210 : EX_T(opline->result.u.var).var.ptr->is_ref = 0;
211 : EX_T(opline->result.u.var).var.ptr->refcount = 1;
212 : }
213 : */
214 81512 : if (!return_value_used) {
215 2972 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
216 : } else {
217 78540 : EX_T(opline->result.u.var).var.fcall_returned_reference = return_reference;
218 : }
219 29196 : } else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
220 29196 : EX_T(opline->result.u.var).var.ptr = NULL;
221 29196 : if (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
222 : /*printf("Cache hit! Reusing %x\n", symtable_cache[symtable_cache_ptr]);*/
223 28947 : EX(function_state).function_symbol_table = *(EG(symtable_cache_ptr)--);
224 : } else {
225 249 : ALLOC_HASHTABLE(EX(function_state).function_symbol_table);
226 249 : zend_hash_init(EX(function_state).function_symbol_table, 0, NULL, ZVAL_PTR_DTOR, 0);
227 : /*printf("Cache miss! Initialized %x\n", function_state.function_symbol_table);*/
228 : }
229 29196 : EG(active_symbol_table) = EX(function_state).function_symbol_table;
230 29196 : original_return_value = EG(return_value_ptr_ptr);
231 29196 : EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr;
232 29196 : EG(active_op_array) = (zend_op_array *) EX(function_state).function;
233 :
234 29196 : zend_execute(EG(active_op_array) TSRMLS_CC);
235 29193 : EX_T(opline->result.u.var).var.fcall_returned_reference = EG(active_op_array)->return_reference;
236 :
237 29193 : if (return_value_used && !EX_T(opline->result.u.var).var.ptr) {
238 0 : if (!EG(exception)) {
239 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
240 0 : INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr);
241 : }
242 29193 : } else if (!return_value_used && EX_T(opline->result.u.var).var.ptr) {
243 1198 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
244 : }
245 :
246 29193 : EG(opline_ptr) = &EX(opline);
247 29193 : EG(active_op_array) = EX(op_array);
248 29193 : EG(return_value_ptr_ptr)=original_return_value;
249 29193 : if (EG(symtable_cache_ptr)>=EG(symtable_cache_limit)) {
250 0 : zend_hash_destroy(EX(function_state).function_symbol_table);
251 0 : FREE_HASHTABLE(EX(function_state).function_symbol_table);
252 : } else {
253 : /* clean before putting into the cache, since clean
254 : could call dtors, which could use cached hash */
255 29193 : zend_hash_clean(EX(function_state).function_symbol_table);
256 29193 : *(++EG(symtable_cache_ptr)) = EX(function_state).function_symbol_table;
257 : }
258 29193 : EG(active_symbol_table) = EX(symbol_table);
259 : } else { /* ZEND_OVERLOADED_FUNCTION */
260 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
261 0 : INIT_ZVAL(*(EX_T(opline->result.u.var).var.ptr));
262 :
263 : /* Not sure what should be done here if it's a static method */
264 0 : if (EX(object)) {
265 0 : Z_OBJ_HT_P(EX(object))->call_method(EX(fbc)->common.function_name, opline->extended_value, EX_T(opline->result.u.var).var.ptr, &EX_T(opline->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC);
266 : } else {
267 0 : zend_error_noreturn(E_ERROR, "Cannot call overloaded function for non-object");
268 : }
269 :
270 0 : if (EX(function_state).function->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY) {
271 0 : efree(EX(function_state).function->common.function_name);
272 : }
273 0 : efree(EX(fbc));
274 :
275 0 : if (!return_value_used) {
276 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
277 : } else {
278 0 : EX_T(opline->result.u.var).var.ptr->is_ref = 0;
279 0 : EX_T(opline->result.u.var).var.ptr->refcount = 1;
280 : }
281 : }
282 :
283 110705 : ctor_opline = (zend_op*)zend_ptr_stack_pop(&EG(arg_types_stack));
284 :
285 110705 : if (EG(This)) {
286 2182 : if (EG(exception) && ctor_opline) {
287 0 : if (RETURN_VALUE_USED(ctor_opline)) {
288 0 : EG(This)->refcount--;
289 : }
290 0 : if (EG(This)->refcount == 1) {
291 0 : zend_object_store_ctor_failed(EG(This) TSRMLS_CC);
292 : }
293 : }
294 2182 : if (should_change_scope) {
295 1841 : zval_ptr_dtor(&EG(This));
296 : }
297 : }
298 :
299 110705 : if (should_change_scope) {
300 30823 : EG(This) = current_this;
301 30823 : EG(scope) = current_scope;
302 : }
303 110705 : zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc));
304 :
305 110705 : EX(function_state).function = (zend_function *) EX(op_array);
306 110705 : EG(function_state_ptr) = &EX(function_state);
307 110705 : zend_ptr_stack_clear_multiple(TSRMLS_C);
308 :
309 110705 : if (EG(exception)) {
310 12 : zend_throw_exception_internal(NULL TSRMLS_CC);
311 12 : if (return_value_used && EX_T(opline->result.u.var).var.ptr) {
312 4 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
313 : }
314 : }
315 :
316 110705 : ZEND_VM_NEXT_OPCODE();
317 : }
318 :
319 : static int ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
320 13369 : {
321 13369 : EX(function_state).function = EX(fbc);
322 13369 : return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
323 : }
324 :
325 : static int ZEND_CATCH_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
326 24 : {
327 24 : zend_op *opline = EX(opline);
328 : zend_class_entry *ce;
329 :
330 : /* Check whether an exception has been thrown, if not, jump over code */
331 24 : if (EG(exception) == NULL) {
332 0 : ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
333 0 : ZEND_VM_CONTINUE(); /* CHECK_ME */
334 : }
335 24 : ce = Z_OBJCE_P(EG(exception));
336 24 : if (ce != EX_T(opline->op1.u.var).class_entry) {
337 18 : if (!instanceof_function(ce, EX_T(opline->op1.u.var).class_entry TSRMLS_CC)) {
338 0 : if (opline->op1.u.EA.type) {
339 0 : zend_throw_exception_internal(NULL TSRMLS_CC);
340 0 : ZEND_VM_NEXT_OPCODE();
341 : }
342 0 : ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[opline->extended_value]);
343 0 : ZEND_VM_CONTINUE(); /* CHECK_ME */
344 : }
345 : }
346 :
347 24 : zend_hash_update(EG(active_symbol_table), opline->op2.u.constant.value.str.val,
348 : opline->op2.u.constant.value.str.len+1, &EG(exception), sizeof(zval *), (void **) NULL);
349 24 : EG(exception) = NULL;
350 24 : ZEND_VM_NEXT_OPCODE();
351 : }
352 :
353 : static int ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
354 148464 : {
355 148464 : zend_op *opline = EX(opline);
356 : zval **param;
357 148464 : zend_uint arg_num = Z_LVAL(opline->op1.u.constant);
358 :
359 148464 : if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) {
360 : char *space;
361 0 : char *class_name = get_active_class_name(&space TSRMLS_CC);
362 0 : zend_execute_data *ptr = EX(prev_execute_data);
363 :
364 0 : zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, NULL TSRMLS_CC);
365 0 : if(ptr && ptr->op_array) {
366 0 : zend_error(E_WARNING, "Missing argument %ld for %s%s%s(), called in %s on line %d and defined", opline->op1.u.constant.value.lval, class_name, space, get_active_function_name(TSRMLS_C), ptr->op_array->filename, ptr->opline->lineno);
367 : } else {
368 0 : zend_error(E_WARNING, "Missing argument %ld for %s%s%s()", opline->op1.u.constant.value.lval, class_name, space, get_active_function_name(TSRMLS_C));
369 : }
370 0 : if (opline->result.op_type == IS_VAR) {
371 0 : PZVAL_UNLOCK_FREE(*EX_T(opline->result.u.var).var.ptr_ptr);
372 : }
373 : } else {
374 : zend_free_op free_res;
375 : zval **var_ptr;
376 :
377 148464 : zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, *param TSRMLS_CC);
378 148464 : var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);
379 148464 : if (PZVAL_IS_REF(*param)) {
380 221 : zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC);
381 : } else {
382 148243 : zend_receive(var_ptr, *param TSRMLS_CC);
383 : }
384 : }
385 :
386 148464 : ZEND_VM_NEXT_OPCODE();
387 : }
388 :
389 : static int ZEND_NEW_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
390 118 : {
391 118 : zend_op *opline = EX(opline);
392 : zval *object_zval;
393 : zend_function *constructor;
394 :
395 118 : if (EX_T(opline->op1.u.var).class_entry->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLICIT_ABSTRACT_CLASS|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS)) {
396 : char *class_type;
397 :
398 0 : if (EX_T(opline->op1.u.var).class_entry->ce_flags & ZEND_ACC_INTERFACE) {
399 0 : class_type = "interface";
400 : } else {
401 0 : class_type = "abstract class";
402 : }
403 0 : zend_error_noreturn(E_ERROR, "Cannot instantiate %s %s", class_type, EX_T(opline->op1.u.var).class_entry->name);
404 : }
405 118 : ALLOC_ZVAL(object_zval);
406 118 : object_init_ex(object_zval, EX_T(opline->op1.u.var).class_entry);
407 118 : INIT_PZVAL(object_zval);
408 :
409 118 : constructor = Z_OBJ_HT_P(object_zval)->get_constructor(object_zval TSRMLS_CC);
410 :
411 118 : if (constructor == NULL) {
412 1 : if (RETURN_VALUE_USED(opline)) {
413 1 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
414 1 : EX_T(opline->result.u.var).var.ptr = object_zval;
415 : } else {
416 0 : zval_ptr_dtor(&object_zval);
417 : }
418 1 : ZEND_VM_JMP(EX(op_array)->opcodes + opline->op2.u.opline_num);
419 : } else {
420 117 : SELECTIVE_PZVAL_LOCK(object_zval, &opline->result);
421 117 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
422 117 : EX_T(opline->result.u.var).var.ptr = object_zval;
423 :
424 117 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), opline);
425 :
426 : /* We are not handling overloaded classes right now */
427 117 : EX(object) = object_zval;
428 117 : EX(fbc) = constructor;
429 :
430 117 : ZEND_VM_NEXT_OPCODE();
431 : }
432 : }
433 :
434 : static int ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
435 4660 : {
436 4660 : zend_op *opline = EX(opline);
437 :
438 4660 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = EG(error_reporting);
439 4660 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG; /* shouldn't be necessary */
440 4660 : if (EX(old_error_reporting) == NULL) {
441 4660 : EX(old_error_reporting) = &EX_T(opline->result.u.var).tmp_var;
442 : }
443 :
444 4660 : if (EG(error_reporting)) {
445 4660 : zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), "0", 1, ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
446 : }
447 4660 : ZEND_VM_NEXT_OPCODE();
448 : }
449 :
450 : static int ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
451 0 : {
452 0 : zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", EG(scope)->name, EX(op_array)->function_name);
453 : ZEND_VM_NEXT_OPCODE(); /* Never reached */
454 : }
455 :
456 : static int ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
457 0 : {
458 0 : if (!EG(no_extensions)) {
459 0 : zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, EX(op_array) TSRMLS_CC);
460 : }
461 0 : ZEND_VM_NEXT_OPCODE();
462 : }
463 :
464 : static int ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
465 0 : {
466 0 : if (!EG(no_extensions)) {
467 0 : zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, EX(op_array) TSRMLS_CC);
468 : }
469 0 : ZEND_VM_NEXT_OPCODE();
470 : }
471 :
472 : static int ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
473 0 : {
474 0 : if (!EG(no_extensions)) {
475 0 : zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, EX(op_array) TSRMLS_CC);
476 : }
477 0 : ZEND_VM_NEXT_OPCODE();
478 : }
479 :
480 : static int ZEND_DECLARE_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
481 0 : {
482 0 : zend_op *opline = EX(opline);
483 :
484 0 : EX_T(opline->result.u.var).class_entry = do_bind_class(opline, EG(class_table), 0 TSRMLS_CC);
485 0 : ZEND_VM_NEXT_OPCODE();
486 : }
487 :
488 : static int ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
489 0 : {
490 0 : zend_op *opline = EX(opline);
491 :
492 0 : EX_T(opline->result.u.var).class_entry = do_bind_inherited_class(opline, EG(class_table), EX_T(opline->extended_value).class_entry, 0 TSRMLS_CC);
493 0 : ZEND_VM_NEXT_OPCODE();
494 : }
495 :
496 : static int ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
497 0 : {
498 0 : do_bind_function(EX(opline), EG(function_table), 0);
499 0 : ZEND_VM_NEXT_OPCODE();
500 : }
501 :
502 : static int ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
503 0 : {
504 0 : ZEND_VM_NEXT_OPCODE();
505 : }
506 :
507 : static int ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
508 891 : {
509 891 : ZEND_VM_NEXT_OPCODE();
510 : }
511 :
512 : static int ZEND_ADD_INTERFACE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
513 0 : {
514 0 : zend_op *opline = EX(opline);
515 0 : zend_class_entry *ce = EX_T(opline->op1.u.var).class_entry;
516 0 : zend_class_entry *iface = EX_T(opline->op2.u.var).class_entry;
517 :
518 0 : if (!(iface->ce_flags & ZEND_ACC_INTERFACE)) {
519 0 : zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ce->name, iface->name);
520 : }
521 :
522 0 : zend_do_implement_interface(ce, iface TSRMLS_CC);
523 :
524 0 : ZEND_VM_NEXT_OPCODE();
525 : }
526 :
527 : static int ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
528 24 : {
529 24 : zend_uint op_num = EG(opline_before_exception)-EG(active_op_array)->opcodes;
530 : int i;
531 : zend_uint catch_op_num;
532 24 : int catched = 0;
533 : zval **stack_zval_pp;
534 : zval restored_error_reporting;
535 :
536 24 : stack_zval_pp = (zval **) EG(argument_stack).top_element - 1;
537 48 : while (*stack_zval_pp != NULL) {
538 0 : zval_ptr_dtor(stack_zval_pp);
539 0 : EG(argument_stack).top_element--;
540 0 : EG(argument_stack).top--;
541 0 : stack_zval_pp--;
542 : }
543 :
544 49 : for (i=0; i<EG(active_op_array)->last_try_catch; i++) {
545 26 : if (EG(active_op_array)->try_catch_array[i].try_op > op_num) {
546 : /* further blocks will not be relevant... */
547 1 : break;
548 : }
549 25 : if (op_num >= EG(active_op_array)->try_catch_array[i].try_op
550 : && op_num < EG(active_op_array)->try_catch_array[i].catch_op) {
551 24 : catch_op_num = EX(op_array)->try_catch_array[i].catch_op;
552 24 : catched = 1;
553 : }
554 : }
555 :
556 48 : while (EX(fbc)) {
557 0 : zend_op *ctor_opline = (zend_op*)zend_ptr_stack_pop(&EG(arg_types_stack));
558 :
559 0 : if (EX(object)) {
560 0 : if (ctor_opline && RETURN_VALUE_USED(ctor_opline)) {
561 0 : EX(object)->refcount--;
562 : }
563 0 : zval_ptr_dtor(&EX(object));
564 : }
565 0 : zend_ptr_stack_2_pop(&EG(arg_types_stack), (void**)&EX(object), (void**)&EX(fbc));
566 : }
567 :
568 49 : for (i=0; i<EX(op_array)->last_brk_cont; i++) {
569 31 : if (EX(op_array)->brk_cont_array[i].start > op_num) {
570 : /* further blocks will not be relevant... */
571 6 : break;
572 : }
573 25 : if (op_num < EX(op_array)->brk_cont_array[i].brk) {
574 20 : if (!catched ||
575 : catch_op_num >= EX(op_array)->brk_cont_array[i].brk) {
576 1 : zend_op *brk_opline = &EX(op_array)->opcodes[EX(op_array)->brk_cont_array[i].brk];
577 :
578 1 : switch (brk_opline->opcode) {
579 : case ZEND_SWITCH_FREE:
580 0 : zend_switch_free(brk_opline, EX(Ts) TSRMLS_CC);
581 0 : break;
582 : case ZEND_FREE:
583 0 : zendi_zval_dtor(EX_T(brk_opline->op1.u.var).tmp_var);
584 : break;
585 : }
586 : }
587 : }
588 : }
589 :
590 : /* restore previous error_reporting value */
591 24 : if (!EG(error_reporting) && EX(old_error_reporting) != NULL && Z_LVAL_P(EX(old_error_reporting)) != 0) {
592 0 : Z_TYPE(restored_error_reporting) = IS_LONG;
593 0 : Z_LVAL(restored_error_reporting) = Z_LVAL_P(EX(old_error_reporting));
594 0 : convert_to_string(&restored_error_reporting);
595 0 : zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
596 0 : zendi_zval_dtor(restored_error_reporting);
597 : }
598 24 : EX(old_error_reporting) = NULL;
599 :
600 24 : if (!catched) {
601 0 : ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
602 : } else {
603 24 : ZEND_VM_SET_OPCODE(&EX(op_array)->opcodes[catch_op_num]);
604 24 : ZEND_VM_CONTINUE();
605 : }
606 : }
607 :
608 : static int ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
609 0 : {
610 0 : zend_verify_abstract_class(EX_T(EX(opline)->op1.u.var).class_entry TSRMLS_CC);
611 0 : ZEND_VM_NEXT_OPCODE();
612 : }
613 :
614 : static int ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
615 0 : {
616 0 : int ret = zend_user_opcode_handlers[EX(opline)->opcode](ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_INTERNAL);
617 :
618 0 : switch (ret) {
619 : case ZEND_USER_OPCODE_CONTINUE:
620 0 : ZEND_VM_CONTINUE();
621 : case ZEND_USER_OPCODE_RETURN:
622 0 : ZEND_VM_RETURN();
623 : case ZEND_USER_OPCODE_DISPATCH:
624 0 : ZEND_VM_DISPATCH(EX(opline)->opcode, EX(opline));
625 : default:
626 0 : ZEND_VM_DISPATCH(ret & 0xff, EX(opline));
627 : }
628 : }
629 :
630 : static int ZEND_FETCH_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
631 236 : {
632 236 : zend_op *opline = EX(opline);
633 : zval *class_name;
634 :
635 :
636 :
637 : if (IS_CONST == IS_UNUSED) {
638 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
639 : ZEND_VM_NEXT_OPCODE();
640 : }
641 :
642 236 : class_name = &opline->op2.u.constant;
643 :
644 236 : switch (Z_TYPE_P(class_name)) {
645 : case IS_OBJECT:
646 0 : EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name);
647 0 : break;
648 : case IS_STRING:
649 236 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
650 236 : break;
651 : default:
652 0 : zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
653 : break;
654 : }
655 :
656 236 : ZEND_VM_NEXT_OPCODE();
657 : }
658 :
659 : static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
660 294 : {
661 294 : zend_op *opline = EX(opline);
662 : zval *function_name;
663 : zend_class_entry *ce;
664 :
665 294 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
666 :
667 294 : ce = EX_T(opline->op1.u.var).class_entry;
668 : if(IS_CONST != IS_UNUSED) {
669 : char *function_name_strval;
670 : int function_name_strlen;
671 294 : zend_bool is_const = (IS_CONST == IS_CONST);
672 :
673 :
674 294 : if (is_const) {
675 294 : function_name_strval = Z_STRVAL(opline->op2.u.constant);
676 294 : function_name_strlen = Z_STRLEN(opline->op2.u.constant);
677 : } else {
678 0 : function_name = &opline->op2.u.constant;
679 :
680 0 : if (Z_TYPE_P(function_name) != IS_STRING) {
681 0 : zend_error_noreturn(E_ERROR, "Function name must be a string");
682 : }
683 0 : function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
684 0 : function_name_strlen = function_name->value.str.len;
685 : }
686 :
687 294 : EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
688 :
689 294 : if (!is_const) {
690 0 : efree(function_name_strval);
691 :
692 : }
693 : } else {
694 : if(!ce->constructor) {
695 : zend_error_noreturn(E_ERROR, "Can not call constructor");
696 : }
697 : if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
698 : zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name);
699 : }
700 : EX(fbc) = ce->constructor;
701 : }
702 :
703 294 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
704 44 : EX(object) = NULL;
705 : } else {
706 250 : if (IS_CONST != IS_UNUSED &&
707 : EG(This) &&
708 : Z_OBJ_HT_P(EG(This))->get_class_entry &&
709 : !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
710 : /* We are calling method of the other (incompatible) class,
711 : but passing $this. This is done for compatibility with php-4. */
712 0 : zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
713 :
714 : }
715 250 : if ((EX(object) = EG(This))) {
716 250 : EX(object)->refcount++;
717 : }
718 : }
719 :
720 294 : ZEND_VM_NEXT_OPCODE();
721 : }
722 :
723 : static int ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
724 11483 : {
725 11483 : zend_op *opline = EX(opline);
726 : zval *function_name;
727 : zend_function *function;
728 : char *function_name_strval, *lcname;
729 : int function_name_strlen;
730 :
731 :
732 11483 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
733 :
734 : if (IS_CONST == IS_CONST) {
735 11483 : function_name_strval = opline->op2.u.constant.value.str.val;
736 11483 : function_name_strlen = opline->op2.u.constant.value.str.len;
737 : } else {
738 : function_name = &opline->op2.u.constant;
739 :
740 : if (Z_TYPE_P(function_name) != IS_STRING) {
741 : zend_error_noreturn(E_ERROR, "Function name must be a string");
742 : }
743 : function_name_strval = function_name->value.str.val;
744 : function_name_strlen = function_name->value.str.len;
745 : }
746 :
747 11483 : lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
748 11483 : if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &function)==FAILURE) {
749 0 : efree(lcname);
750 0 : zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
751 : }
752 :
753 11483 : efree(lcname);
754 : if (IS_CONST != IS_CONST) {
755 :
756 : }
757 :
758 11483 : EX(object) = NULL;
759 :
760 11483 : EX(fbc) = function;
761 :
762 11483 : ZEND_VM_NEXT_OPCODE();
763 : }
764 :
765 :
766 : static int ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
767 901 : {
768 901 : zend_op *opline = EX(opline);
769 : zval **param, *assignment_value;
770 901 : zend_uint arg_num = Z_LVAL(opline->op1.u.constant);
771 : zend_free_op free_res;
772 :
773 901 : if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) {
774 116 : if (Z_TYPE(opline->op2.u.constant) == IS_CONSTANT || Z_TYPE(opline->op2.u.constant)==IS_CONSTANT_ARRAY) {
775 : zval *default_value;
776 :
777 0 : ALLOC_ZVAL(default_value);
778 0 : *default_value = opline->op2.u.constant;
779 0 : if (Z_TYPE(opline->op2.u.constant)==IS_CONSTANT_ARRAY) {
780 0 : zval_copy_ctor(default_value);
781 : }
782 0 : default_value->refcount=1;
783 0 : zval_update_constant(&default_value, 0 TSRMLS_CC);
784 0 : default_value->refcount=0;
785 0 : default_value->is_ref=0;
786 0 : param = &default_value;
787 0 : assignment_value = default_value;
788 : } else {
789 116 : param = NULL;
790 116 : assignment_value = &opline->op2.u.constant;
791 : }
792 116 : zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC);
793 116 : zend_assign_to_variable(NULL, &opline->result, NULL, assignment_value, IS_VAR, EX(Ts) TSRMLS_CC);
794 : } else {
795 785 : zval **var_ptr = get_zval_ptr_ptr(&opline->result, EX(Ts), &free_res, BP_VAR_W);
796 :
797 785 : assignment_value = *param;
798 785 : zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, assignment_value TSRMLS_CC);
799 785 : if (PZVAL_IS_REF(assignment_value)) {
800 0 : zend_assign_to_variable_reference(var_ptr, param TSRMLS_CC);
801 : } else {
802 785 : zend_receive(var_ptr, assignment_value TSRMLS_CC);
803 : }
804 : }
805 :
806 901 : ZEND_VM_NEXT_OPCODE();
807 : }
808 :
809 : static int ZEND_BRK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
810 220 : {
811 220 : zend_op *opline = EX(opline);
812 :
813 : zend_brk_cont_element *el;
814 :
815 220 : el = zend_brk_cont(&opline->op2.u.constant, opline->op1.u.opline_num,
816 : EX(op_array), EX(Ts) TSRMLS_CC);
817 :
818 220 : ZEND_VM_JMP(EX(op_array)->opcodes + el->brk);
819 : }
820 :
821 : static int ZEND_CONT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
822 467 : {
823 467 : zend_op *opline = EX(opline);
824 :
825 : zend_brk_cont_element *el;
826 :
827 467 : el = zend_brk_cont(&opline->op2.u.constant, opline->op1.u.opline_num,
828 : EX(op_array), EX(Ts) TSRMLS_CC);
829 :
830 467 : ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
831 : }
832 :
833 : static int ZEND_FETCH_CLASS_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
834 0 : {
835 0 : zend_op *opline = EX(opline);
836 : zval *class_name;
837 : zend_free_op free_op2;
838 :
839 :
840 : if (IS_TMP_VAR == IS_UNUSED) {
841 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
842 : ZEND_VM_NEXT_OPCODE();
843 : }
844 :
845 0 : class_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
846 :
847 0 : switch (Z_TYPE_P(class_name)) {
848 : case IS_OBJECT:
849 0 : EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name);
850 0 : break;
851 : case IS_STRING:
852 0 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
853 0 : break;
854 : default:
855 0 : zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
856 : break;
857 : }
858 :
859 0 : zval_dtor(free_op2.var);
860 0 : ZEND_VM_NEXT_OPCODE();
861 : }
862 :
863 : static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
864 0 : {
865 0 : zend_op *opline = EX(opline);
866 : zval *function_name;
867 : zend_class_entry *ce;
868 :
869 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
870 :
871 0 : ce = EX_T(opline->op1.u.var).class_entry;
872 : if(IS_TMP_VAR != IS_UNUSED) {
873 : char *function_name_strval;
874 : int function_name_strlen;
875 0 : zend_bool is_const = (IS_TMP_VAR == IS_CONST);
876 : zend_free_op free_op2;
877 :
878 0 : if (is_const) {
879 0 : function_name_strval = Z_STRVAL(opline->op2.u.constant);
880 0 : function_name_strlen = Z_STRLEN(opline->op2.u.constant);
881 : } else {
882 0 : function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
883 :
884 0 : if (Z_TYPE_P(function_name) != IS_STRING) {
885 0 : zend_error_noreturn(E_ERROR, "Function name must be a string");
886 : }
887 0 : function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
888 0 : function_name_strlen = function_name->value.str.len;
889 : }
890 :
891 0 : EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
892 :
893 0 : if (!is_const) {
894 0 : efree(function_name_strval);
895 0 : zval_dtor(free_op2.var);
896 : }
897 : } else {
898 : if(!ce->constructor) {
899 : zend_error_noreturn(E_ERROR, "Can not call constructor");
900 : }
901 : if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
902 : zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name);
903 : }
904 : EX(fbc) = ce->constructor;
905 : }
906 :
907 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
908 0 : EX(object) = NULL;
909 : } else {
910 0 : if (IS_TMP_VAR != IS_UNUSED &&
911 : EG(This) &&
912 : Z_OBJ_HT_P(EG(This))->get_class_entry &&
913 : !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
914 : /* We are calling method of the other (incompatible) class,
915 : but passing $this. This is done for compatibility with php-4. */
916 0 : zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
917 :
918 : }
919 0 : if ((EX(object) = EG(This))) {
920 0 : EX(object)->refcount++;
921 : }
922 : }
923 :
924 0 : ZEND_VM_NEXT_OPCODE();
925 : }
926 :
927 : static int ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
928 0 : {
929 0 : zend_op *opline = EX(opline);
930 : zval *function_name;
931 : zend_function *function;
932 : char *function_name_strval, *lcname;
933 : int function_name_strlen;
934 : zend_free_op free_op2;
935 :
936 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
937 :
938 : if (IS_TMP_VAR == IS_CONST) {
939 : function_name_strval = opline->op2.u.constant.value.str.val;
940 : function_name_strlen = opline->op2.u.constant.value.str.len;
941 : } else {
942 0 : function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
943 :
944 0 : if (Z_TYPE_P(function_name) != IS_STRING) {
945 0 : zend_error_noreturn(E_ERROR, "Function name must be a string");
946 : }
947 0 : function_name_strval = function_name->value.str.val;
948 0 : function_name_strlen = function_name->value.str.len;
949 : }
950 :
951 0 : lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
952 0 : if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &function)==FAILURE) {
953 0 : efree(lcname);
954 0 : zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
955 : }
956 :
957 0 : efree(lcname);
958 : if (IS_TMP_VAR != IS_CONST) {
959 0 : zval_dtor(free_op2.var);
960 : }
961 :
962 0 : EX(object) = NULL;
963 :
964 0 : EX(fbc) = function;
965 :
966 0 : ZEND_VM_NEXT_OPCODE();
967 : }
968 :
969 :
970 : static int ZEND_BRK_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
971 0 : {
972 0 : zend_op *opline = EX(opline);
973 : zend_free_op free_op2;
974 : zend_brk_cont_element *el;
975 :
976 0 : el = zend_brk_cont(_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC), opline->op1.u.opline_num,
977 : EX(op_array), EX(Ts) TSRMLS_CC);
978 0 : zval_dtor(free_op2.var);
979 0 : ZEND_VM_JMP(EX(op_array)->opcodes + el->brk);
980 : }
981 :
982 : static int ZEND_CONT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
983 0 : {
984 0 : zend_op *opline = EX(opline);
985 : zend_free_op free_op2;
986 : zend_brk_cont_element *el;
987 :
988 0 : el = zend_brk_cont(_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC), opline->op1.u.opline_num,
989 : EX(op_array), EX(Ts) TSRMLS_CC);
990 0 : zval_dtor(free_op2.var);
991 0 : ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
992 : }
993 :
994 : static int ZEND_FETCH_CLASS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
995 0 : {
996 0 : zend_op *opline = EX(opline);
997 : zval *class_name;
998 : zend_free_op free_op2;
999 :
1000 :
1001 : if (IS_VAR == IS_UNUSED) {
1002 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
1003 : ZEND_VM_NEXT_OPCODE();
1004 : }
1005 :
1006 0 : class_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
1007 :
1008 0 : switch (Z_TYPE_P(class_name)) {
1009 : case IS_OBJECT:
1010 0 : EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name);
1011 0 : break;
1012 : case IS_STRING:
1013 0 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
1014 0 : break;
1015 : default:
1016 0 : zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
1017 : break;
1018 : }
1019 :
1020 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1021 0 : ZEND_VM_NEXT_OPCODE();
1022 : }
1023 :
1024 : static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1025 0 : {
1026 0 : zend_op *opline = EX(opline);
1027 : zval *function_name;
1028 : zend_class_entry *ce;
1029 :
1030 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
1031 :
1032 0 : ce = EX_T(opline->op1.u.var).class_entry;
1033 : if(IS_VAR != IS_UNUSED) {
1034 : char *function_name_strval;
1035 : int function_name_strlen;
1036 0 : zend_bool is_const = (IS_VAR == IS_CONST);
1037 : zend_free_op free_op2;
1038 :
1039 0 : if (is_const) {
1040 0 : function_name_strval = Z_STRVAL(opline->op2.u.constant);
1041 0 : function_name_strlen = Z_STRLEN(opline->op2.u.constant);
1042 : } else {
1043 0 : function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
1044 :
1045 0 : if (Z_TYPE_P(function_name) != IS_STRING) {
1046 0 : zend_error_noreturn(E_ERROR, "Function name must be a string");
1047 : }
1048 0 : function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
1049 0 : function_name_strlen = function_name->value.str.len;
1050 : }
1051 :
1052 0 : EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
1053 :
1054 0 : if (!is_const) {
1055 0 : efree(function_name_strval);
1056 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1057 : }
1058 : } else {
1059 : if(!ce->constructor) {
1060 : zend_error_noreturn(E_ERROR, "Can not call constructor");
1061 : }
1062 : if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1063 : zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name);
1064 : }
1065 : EX(fbc) = ce->constructor;
1066 : }
1067 :
1068 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
1069 0 : EX(object) = NULL;
1070 : } else {
1071 0 : if (IS_VAR != IS_UNUSED &&
1072 : EG(This) &&
1073 : Z_OBJ_HT_P(EG(This))->get_class_entry &&
1074 : !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
1075 : /* We are calling method of the other (incompatible) class,
1076 : but passing $this. This is done for compatibility with php-4. */
1077 0 : zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1078 :
1079 : }
1080 0 : if ((EX(object) = EG(This))) {
1081 0 : EX(object)->refcount++;
1082 : }
1083 : }
1084 :
1085 0 : ZEND_VM_NEXT_OPCODE();
1086 : }
1087 :
1088 : static int ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1089 0 : {
1090 0 : zend_op *opline = EX(opline);
1091 : zval *function_name;
1092 : zend_function *function;
1093 : char *function_name_strval, *lcname;
1094 : int function_name_strlen;
1095 : zend_free_op free_op2;
1096 :
1097 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
1098 :
1099 : if (IS_VAR == IS_CONST) {
1100 : function_name_strval = opline->op2.u.constant.value.str.val;
1101 : function_name_strlen = opline->op2.u.constant.value.str.len;
1102 : } else {
1103 0 : function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
1104 :
1105 0 : if (Z_TYPE_P(function_name) != IS_STRING) {
1106 0 : zend_error_noreturn(E_ERROR, "Function name must be a string");
1107 : }
1108 0 : function_name_strval = function_name->value.str.val;
1109 0 : function_name_strlen = function_name->value.str.len;
1110 : }
1111 :
1112 0 : lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
1113 0 : if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &function)==FAILURE) {
1114 0 : efree(lcname);
1115 0 : zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
1116 : }
1117 :
1118 0 : efree(lcname);
1119 : if (IS_VAR != IS_CONST) {
1120 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1121 : }
1122 :
1123 0 : EX(object) = NULL;
1124 :
1125 0 : EX(fbc) = function;
1126 :
1127 0 : ZEND_VM_NEXT_OPCODE();
1128 : }
1129 :
1130 :
1131 : static int ZEND_BRK_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1132 0 : {
1133 0 : zend_op *opline = EX(opline);
1134 : zend_free_op free_op2;
1135 : zend_brk_cont_element *el;
1136 :
1137 0 : el = zend_brk_cont(_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC), opline->op1.u.opline_num,
1138 : EX(op_array), EX(Ts) TSRMLS_CC);
1139 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1140 0 : ZEND_VM_JMP(EX(op_array)->opcodes + el->brk);
1141 : }
1142 :
1143 : static int ZEND_CONT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1144 0 : {
1145 0 : zend_op *opline = EX(opline);
1146 : zend_free_op free_op2;
1147 : zend_brk_cont_element *el;
1148 :
1149 0 : el = zend_brk_cont(_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC), opline->op1.u.opline_num,
1150 : EX(op_array), EX(Ts) TSRMLS_CC);
1151 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
1152 0 : ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
1153 : }
1154 :
1155 : static int ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1156 250 : {
1157 250 : zend_op *opline = EX(opline);
1158 : zval *class_name;
1159 :
1160 :
1161 :
1162 : if (IS_UNUSED == IS_UNUSED) {
1163 250 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
1164 250 : ZEND_VM_NEXT_OPCODE();
1165 : }
1166 :
1167 : class_name = NULL;
1168 :
1169 : switch (Z_TYPE_P(class_name)) {
1170 : case IS_OBJECT:
1171 : EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name);
1172 : break;
1173 : case IS_STRING:
1174 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
1175 : break;
1176 : default:
1177 : zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
1178 : break;
1179 : }
1180 :
1181 : ZEND_VM_NEXT_OPCODE();
1182 : }
1183 :
1184 : static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1185 0 : {
1186 0 : zend_op *opline = EX(opline);
1187 : zval *function_name;
1188 : zend_class_entry *ce;
1189 :
1190 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
1191 :
1192 0 : ce = EX_T(opline->op1.u.var).class_entry;
1193 : if(IS_UNUSED != IS_UNUSED) {
1194 : char *function_name_strval;
1195 : int function_name_strlen;
1196 : zend_bool is_const = (IS_UNUSED == IS_CONST);
1197 :
1198 :
1199 : if (is_const) {
1200 : function_name_strval = Z_STRVAL(opline->op2.u.constant);
1201 : function_name_strlen = Z_STRLEN(opline->op2.u.constant);
1202 : } else {
1203 : function_name = NULL;
1204 :
1205 : if (Z_TYPE_P(function_name) != IS_STRING) {
1206 : zend_error_noreturn(E_ERROR, "Function name must be a string");
1207 : }
1208 : function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
1209 : function_name_strlen = function_name->value.str.len;
1210 : }
1211 :
1212 : EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
1213 :
1214 : if (!is_const) {
1215 : efree(function_name_strval);
1216 :
1217 : }
1218 : } else {
1219 0 : if(!ce->constructor) {
1220 0 : zend_error_noreturn(E_ERROR, "Can not call constructor");
1221 : }
1222 0 : if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1223 0 : zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name);
1224 : }
1225 0 : EX(fbc) = ce->constructor;
1226 : }
1227 :
1228 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
1229 0 : EX(object) = NULL;
1230 : } else {
1231 : if (IS_UNUSED != IS_UNUSED &&
1232 : EG(This) &&
1233 : Z_OBJ_HT_P(EG(This))->get_class_entry &&
1234 : !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
1235 : /* We are calling method of the other (incompatible) class,
1236 : but passing $this. This is done for compatibility with php-4. */
1237 : zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1238 :
1239 : }
1240 0 : if ((EX(object) = EG(This))) {
1241 0 : EX(object)->refcount++;
1242 : }
1243 : }
1244 :
1245 0 : ZEND_VM_NEXT_OPCODE();
1246 : }
1247 :
1248 : static int ZEND_FETCH_CLASS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1249 12 : {
1250 12 : zend_op *opline = EX(opline);
1251 : zval *class_name;
1252 :
1253 :
1254 :
1255 : if (IS_CV == IS_UNUSED) {
1256 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(NULL, 0, opline->extended_value TSRMLS_CC);
1257 : ZEND_VM_NEXT_OPCODE();
1258 : }
1259 :
1260 12 : class_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
1261 :
1262 12 : switch (Z_TYPE_P(class_name)) {
1263 : case IS_OBJECT:
1264 0 : EX_T(opline->result.u.var).class_entry = Z_OBJCE_P(class_name);
1265 0 : break;
1266 : case IS_STRING:
1267 12 : EX_T(opline->result.u.var).class_entry = zend_fetch_class(Z_STRVAL_P(class_name), Z_STRLEN_P(class_name), opline->extended_value TSRMLS_CC);
1268 12 : break;
1269 : default:
1270 0 : zend_error_noreturn(E_ERROR, "Class name must be a valid object or a string");
1271 : break;
1272 : }
1273 :
1274 12 : ZEND_VM_NEXT_OPCODE();
1275 : }
1276 :
1277 : static int ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1278 0 : {
1279 0 : zend_op *opline = EX(opline);
1280 : zval *function_name;
1281 : zend_class_entry *ce;
1282 :
1283 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
1284 :
1285 0 : ce = EX_T(opline->op1.u.var).class_entry;
1286 : if(IS_CV != IS_UNUSED) {
1287 : char *function_name_strval;
1288 : int function_name_strlen;
1289 0 : zend_bool is_const = (IS_CV == IS_CONST);
1290 :
1291 :
1292 0 : if (is_const) {
1293 0 : function_name_strval = Z_STRVAL(opline->op2.u.constant);
1294 0 : function_name_strlen = Z_STRLEN(opline->op2.u.constant);
1295 : } else {
1296 0 : function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
1297 :
1298 0 : if (Z_TYPE_P(function_name) != IS_STRING) {
1299 0 : zend_error_noreturn(E_ERROR, "Function name must be a string");
1300 : }
1301 0 : function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
1302 0 : function_name_strlen = function_name->value.str.len;
1303 : }
1304 :
1305 0 : EX(fbc) = zend_std_get_static_method(ce, function_name_strval, function_name_strlen TSRMLS_CC);
1306 :
1307 0 : if (!is_const) {
1308 0 : efree(function_name_strval);
1309 :
1310 : }
1311 : } else {
1312 : if(!ce->constructor) {
1313 : zend_error_noreturn(E_ERROR, "Can not call constructor");
1314 : }
1315 : if (EG(This) && Z_OBJCE_P(EG(This)) != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) {
1316 : zend_error(E_COMPILE_ERROR, "Cannot call private %s::__construct()", ce->name);
1317 : }
1318 : EX(fbc) = ce->constructor;
1319 : }
1320 :
1321 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
1322 0 : EX(object) = NULL;
1323 : } else {
1324 0 : if (IS_CV != IS_UNUSED &&
1325 : EG(This) &&
1326 : Z_OBJ_HT_P(EG(This))->get_class_entry &&
1327 : !instanceof_function(Z_OBJCE_P(EG(This)), ce TSRMLS_CC)) {
1328 : /* We are calling method of the other (incompatible) class,
1329 : but passing $this. This is done for compatibility with php-4. */
1330 0 : zend_error(E_STRICT, "Non-static method %s::%s() should not be called statically, assuming $this from incompatible context", EX(fbc)->common.scope->name, EX(fbc)->common.function_name);
1331 :
1332 : }
1333 0 : if ((EX(object) = EG(This))) {
1334 0 : EX(object)->refcount++;
1335 : }
1336 : }
1337 :
1338 0 : ZEND_VM_NEXT_OPCODE();
1339 : }
1340 :
1341 : static int ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1342 0 : {
1343 0 : zend_op *opline = EX(opline);
1344 : zval *function_name;
1345 : zend_function *function;
1346 : char *function_name_strval, *lcname;
1347 : int function_name_strlen;
1348 :
1349 :
1350 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
1351 :
1352 : if (IS_CV == IS_CONST) {
1353 : function_name_strval = opline->op2.u.constant.value.str.val;
1354 : function_name_strlen = opline->op2.u.constant.value.str.len;
1355 : } else {
1356 0 : function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
1357 :
1358 0 : if (Z_TYPE_P(function_name) != IS_STRING) {
1359 0 : zend_error_noreturn(E_ERROR, "Function name must be a string");
1360 : }
1361 0 : function_name_strval = function_name->value.str.val;
1362 0 : function_name_strlen = function_name->value.str.len;
1363 : }
1364 :
1365 0 : lcname = zend_str_tolower_dup(function_name_strval, function_name_strlen);
1366 0 : if (zend_hash_find(EG(function_table), lcname, function_name_strlen+1, (void **) &function)==FAILURE) {
1367 0 : efree(lcname);
1368 0 : zend_error_noreturn(E_ERROR, "Call to undefined function %s()", function_name_strval);
1369 : }
1370 :
1371 0 : efree(lcname);
1372 : if (IS_CV != IS_CONST) {
1373 :
1374 : }
1375 :
1376 0 : EX(object) = NULL;
1377 :
1378 0 : EX(fbc) = function;
1379 :
1380 0 : ZEND_VM_NEXT_OPCODE();
1381 : }
1382 :
1383 :
1384 : static int ZEND_BRK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1385 0 : {
1386 0 : zend_op *opline = EX(opline);
1387 :
1388 : zend_brk_cont_element *el;
1389 :
1390 0 : el = zend_brk_cont(_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC), opline->op1.u.opline_num,
1391 : EX(op_array), EX(Ts) TSRMLS_CC);
1392 :
1393 0 : ZEND_VM_JMP(EX(op_array)->opcodes + el->brk);
1394 : }
1395 :
1396 : static int ZEND_CONT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1397 0 : {
1398 0 : zend_op *opline = EX(opline);
1399 :
1400 : zend_brk_cont_element *el;
1401 :
1402 0 : el = zend_brk_cont(_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC), opline->op1.u.opline_num,
1403 : EX(op_array), EX(Ts) TSRMLS_CC);
1404 :
1405 0 : ZEND_VM_JMP(EX(op_array)->opcodes + el->cont);
1406 : }
1407 :
1408 : static int ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1409 0 : {
1410 0 : zend_op *opline = EX(opline);
1411 :
1412 :
1413 0 : bitwise_not_function(&EX_T(opline->result.u.var).tmp_var,
1414 : &opline->op1.u.constant TSRMLS_CC);
1415 :
1416 0 : ZEND_VM_NEXT_OPCODE();
1417 : }
1418 :
1419 : static int ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1420 0 : {
1421 0 : zend_op *opline = EX(opline);
1422 :
1423 :
1424 0 : boolean_not_function(&EX_T(opline->result.u.var).tmp_var,
1425 : &opline->op1.u.constant TSRMLS_CC);
1426 :
1427 0 : ZEND_VM_NEXT_OPCODE();
1428 : }
1429 :
1430 : static int ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1431 218 : {
1432 218 : zend_op *opline = EX(opline);
1433 :
1434 : zval z_copy;
1435 218 : zval *z = &opline->op1.u.constant;
1436 :
1437 218 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL &&
1438 : zend_std_cast_object_tostring(z, &z_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
1439 0 : zend_print_variable(&z_copy);
1440 0 : zval_dtor(&z_copy);
1441 : } else {
1442 218 : zend_print_variable(z);
1443 : }
1444 :
1445 218 : ZEND_VM_NEXT_OPCODE();
1446 : }
1447 :
1448 : static int ZEND_PRINT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1449 4 : {
1450 4 : zend_op *opline = EX(opline);
1451 :
1452 4 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1;
1453 4 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG;
1454 :
1455 4 : return ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1456 : }
1457 :
1458 : static int zend_fetch_var_address_helper_SPEC_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
1459 8275 : {
1460 8275 : zend_op *opline = EX(opline);
1461 : zend_free_op free_op1;
1462 8275 : zval *varname = &opline->op1.u.constant;
1463 : zval **retval;
1464 : zval tmp_varname;
1465 : HashTable *target_symbol_table;
1466 :
1467 8275 : if (Z_TYPE_P(varname) != IS_STRING) {
1468 0 : tmp_varname = *varname;
1469 0 : zval_copy_ctor(&tmp_varname);
1470 0 : convert_to_string(&tmp_varname);
1471 0 : varname = &tmp_varname;
1472 : }
1473 :
1474 8275 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
1475 0 : retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
1476 : } else {
1477 8275 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
1478 : /*
1479 : if (!target_symbol_table) {
1480 : ZEND_VM_NEXT_OPCODE();
1481 : }
1482 : */
1483 8275 : if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &retval) == FAILURE) {
1484 10 : switch (type) {
1485 : case BP_VAR_R:
1486 : case BP_VAR_UNSET:
1487 0 : zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
1488 : /* break missing intentionally */
1489 : case BP_VAR_IS:
1490 0 : retval = &EG(uninitialized_zval_ptr);
1491 0 : break;
1492 : case BP_VAR_RW:
1493 0 : zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
1494 : /* break missing intentionally */
1495 : case BP_VAR_W: {
1496 10 : zval *new_zval = &EG(uninitialized_zval);
1497 :
1498 10 : new_zval->refcount++;
1499 10 : zend_hash_update(target_symbol_table, varname->value.str.val, varname->value.str.len+1, &new_zval, sizeof(zval *), (void **) &retval);
1500 : }
1501 : break;
1502 : EMPTY_SWITCH_DEFAULT_CASE()
1503 : }
1504 : }
1505 8275 : switch (opline->op2.u.EA.type) {
1506 : case ZEND_FETCH_GLOBAL:
1507 : if (IS_CONST != IS_TMP_VAR) {
1508 :
1509 : }
1510 9 : break;
1511 : case ZEND_FETCH_LOCAL:
1512 :
1513 4661 : break;
1514 : case ZEND_FETCH_STATIC:
1515 7 : zval_update_constant(retval, (void*) 1 TSRMLS_CC);
1516 : break;
1517 : case ZEND_FETCH_GLOBAL_LOCK:
1518 : if (IS_CONST == IS_VAR && !free_op1.var) {
1519 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
1520 : }
1521 : break;
1522 : }
1523 : }
1524 :
1525 :
1526 8275 : if (varname == &tmp_varname) {
1527 0 : zval_dtor(varname);
1528 : }
1529 8275 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
1530 8275 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
1531 8275 : PZVAL_LOCK(*retval);
1532 8275 : switch (type) {
1533 : case BP_VAR_R:
1534 : case BP_VAR_IS:
1535 2870 : AI_USE_PTR(EX_T(opline->result.u.var).var);
1536 2870 : break;
1537 : case BP_VAR_UNSET: {
1538 : zend_free_op free_res;
1539 :
1540 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
1541 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
1542 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
1543 : }
1544 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
1545 0 : FREE_OP_VAR_PTR(free_res);
1546 : break;
1547 : }
1548 : }
1549 : }
1550 8275 : ZEND_VM_NEXT_OPCODE();
1551 : }
1552 :
1553 : static int ZEND_FETCH_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1554 2866 : {
1555 2866 : return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1556 : }
1557 :
1558 : static int ZEND_FETCH_W_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1559 5405 : {
1560 5405 : return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1561 : }
1562 :
1563 : static int ZEND_FETCH_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1564 0 : {
1565 0 : return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1566 : }
1567 :
1568 : static int ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1569 4 : {
1570 4 : return zend_fetch_var_address_helper_SPEC_CONST(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1571 : }
1572 :
1573 : static int ZEND_FETCH_UNSET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1574 0 : {
1575 0 : return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1576 : }
1577 :
1578 : static int ZEND_FETCH_IS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1579 0 : {
1580 0 : return zend_fetch_var_address_helper_SPEC_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1581 : }
1582 :
1583 : static int ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1584 1798 : {
1585 1798 : zend_op *opline = EX(opline);
1586 :
1587 1798 : int ret = i_zend_is_true(&opline->op1.u.constant);
1588 :
1589 1798 : if (!ret) {
1590 : #if DEBUG_ZEND>=2
1591 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
1592 : #endif
1593 0 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
1594 : }
1595 :
1596 1798 : ZEND_VM_NEXT_OPCODE();
1597 : }
1598 :
1599 : static int ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1600 0 : {
1601 0 : zend_op *opline = EX(opline);
1602 :
1603 0 : int ret = i_zend_is_true(&opline->op1.u.constant);
1604 :
1605 0 : if (ret) {
1606 : #if DEBUG_ZEND>=2
1607 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
1608 : #endif
1609 0 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
1610 : }
1611 :
1612 0 : ZEND_VM_NEXT_OPCODE();
1613 : }
1614 :
1615 : static int ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1616 0 : {
1617 0 : zend_op *opline = EX(opline);
1618 :
1619 0 : int retval = i_zend_is_true(&opline->op1.u.constant);
1620 :
1621 0 : if (retval) {
1622 : #if DEBUG_ZEND>=2
1623 : printf("Conditional jmp on true to %d\n", opline->extended_value);
1624 : #endif
1625 0 : ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]);
1626 : } else {
1627 : #if DEBUG_ZEND>=2
1628 : printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num);
1629 : #endif
1630 0 : ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
1631 : }
1632 : }
1633 :
1634 : static int ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1635 0 : {
1636 0 : zend_op *opline = EX(opline);
1637 :
1638 0 : int retval = i_zend_is_true(&opline->op1.u.constant);
1639 :
1640 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval;
1641 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
1642 0 : if (!retval) {
1643 : #if DEBUG_ZEND>=2
1644 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
1645 : #endif
1646 0 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
1647 : }
1648 0 : ZEND_VM_NEXT_OPCODE();
1649 : }
1650 :
1651 : static int ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1652 0 : {
1653 0 : zend_op *opline = EX(opline);
1654 :
1655 0 : int retval = i_zend_is_true(&opline->op1.u.constant);
1656 :
1657 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval;
1658 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
1659 0 : if (retval) {
1660 : #if DEBUG_ZEND>=2
1661 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
1662 : #endif
1663 0 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
1664 : }
1665 0 : ZEND_VM_NEXT_OPCODE();
1666 : }
1667 :
1668 : static int ZEND_DO_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1669 97345 : {
1670 97345 : zend_op *opline = EX(opline);
1671 :
1672 97345 : zval *fname = &opline->op1.u.constant;
1673 :
1674 97345 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
1675 :
1676 97345 : if (zend_hash_find(EG(function_table), fname->value.str.val, fname->value.str.len+1, (void **) &EX(function_state).function)==FAILURE) {
1677 0 : zend_error_noreturn(E_ERROR, "Call to undefined function %s()", fname->value.str.val);
1678 : }
1679 97345 : EX(object) = NULL;
1680 :
1681 97345 : return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
1682 : }
1683 :
1684 : static int ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1685 1642 : {
1686 1642 : zend_op *opline = EX(opline);
1687 : zval *retval_ptr;
1688 : zval **retval_ptr_ptr;
1689 :
1690 :
1691 1642 : if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) {
1692 :
1693 : if (IS_CONST == IS_CONST || IS_CONST == IS_TMP_VAR) {
1694 : /* Not supposed to happen, but we'll allow it */
1695 0 : zend_error(E_NOTICE, "Only variable references should be returned by reference");
1696 0 : goto return_by_value;
1697 : }
1698 :
1699 : retval_ptr_ptr = NULL;
1700 :
1701 : if (!retval_ptr_ptr) {
1702 : zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
1703 : }
1704 :
1705 : if (IS_CONST == IS_VAR && !(*retval_ptr_ptr)->is_ref) {
1706 : if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
1707 : EX_T(opline->op1.u.var).var.fcall_returned_reference) {
1708 : } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) {
1709 : if (IS_CONST == IS_VAR && !0) {
1710 : PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
1711 : }
1712 : zend_error(E_NOTICE, "Only variable references should be returned by reference");
1713 : goto return_by_value;
1714 : }
1715 : }
1716 :
1717 : SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
1718 : (*retval_ptr_ptr)->refcount++;
1719 :
1720 : (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr);
1721 : } else {
1722 1642 : return_by_value:
1723 :
1724 1642 : retval_ptr = &opline->op1.u.constant;
1725 :
1726 1642 : if (EG(ze1_compatibility_mode) && Z_TYPE_P(retval_ptr) == IS_OBJECT) {
1727 : zval *ret;
1728 : char *class_name;
1729 : zend_uint class_name_len;
1730 : int dup;
1731 :
1732 0 : ALLOC_ZVAL(ret);
1733 0 : INIT_PZVAL_COPY(ret, retval_ptr);
1734 0 : dup = zend_get_object_classname(retval_ptr, &class_name, &class_name_len TSRMLS_CC);
1735 0 : if (Z_OBJ_HT_P(retval_ptr)->clone_obj == NULL) {
1736 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", class_name);
1737 : }
1738 0 : zend_error(E_STRICT, "Implicit cloning object of class '%s' because of 'zend.ze1_compatibility_mode'", class_name);
1739 0 : ret->value.obj = Z_OBJ_HT_P(retval_ptr)->clone_obj(retval_ptr TSRMLS_CC);
1740 0 : *EG(return_value_ptr_ptr) = ret;
1741 0 : if (!dup) {
1742 0 : efree(class_name);
1743 : }
1744 : } else if (!0) { /* Not a temp var */
1745 3284 : if (EG(active_op_array)->return_reference == ZEND_RETURN_REF ||
1746 : (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) {
1747 : zval *ret;
1748 :
1749 1642 : ALLOC_ZVAL(ret);
1750 1642 : INIT_PZVAL_COPY(ret, retval_ptr);
1751 1642 : zval_copy_ctor(ret);
1752 1642 : *EG(return_value_ptr_ptr) = ret;
1753 : } else {
1754 0 : *EG(return_value_ptr_ptr) = retval_ptr;
1755 0 : retval_ptr->refcount++;
1756 : }
1757 : } else {
1758 : zval *ret;
1759 :
1760 : ALLOC_ZVAL(ret);
1761 : INIT_PZVAL_COPY(ret, retval_ptr);
1762 : *EG(return_value_ptr_ptr) = ret;
1763 : }
1764 : }
1765 :
1766 1642 : ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
1767 : }
1768 :
1769 : static int ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1770 0 : {
1771 0 : zend_op *opline = EX(opline);
1772 : zval *value;
1773 : zval *exception;
1774 :
1775 :
1776 0 : value = &opline->op1.u.constant;
1777 :
1778 0 : if (Z_TYPE_P(value) != IS_OBJECT) {
1779 0 : zend_error_noreturn(E_ERROR, "Can only throw objects");
1780 : }
1781 : /* Not sure if a complete copy is what we want here */
1782 0 : ALLOC_ZVAL(exception);
1783 0 : INIT_PZVAL_COPY(exception, value);
1784 : if (!0) {
1785 0 : zval_copy_ctor(exception);
1786 : }
1787 :
1788 0 : zend_throw_exception_object(exception TSRMLS_CC);
1789 :
1790 0 : ZEND_VM_NEXT_OPCODE();
1791 : }
1792 :
1793 : static int ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1794 31506 : {
1795 31506 : zend_op *opline = EX(opline);
1796 31506 : if (opline->extended_value==ZEND_DO_FCALL_BY_NAME
1797 : && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
1798 0 : zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num);
1799 : }
1800 : {
1801 : zval *valptr;
1802 : zval *value;
1803 :
1804 :
1805 31506 : value = &opline->op1.u.constant;
1806 :
1807 31506 : ALLOC_ZVAL(valptr);
1808 31506 : INIT_PZVAL_COPY(valptr, value);
1809 : if (!0) {
1810 31506 : zval_copy_ctor(valptr);
1811 : }
1812 31506 : zend_ptr_stack_push(&EG(argument_stack), valptr);
1813 :
1814 : }
1815 31506 : ZEND_VM_NEXT_OPCODE();
1816 : }
1817 :
1818 : static int ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1819 0 : {
1820 0 : zend_op *opline = EX(opline);
1821 :
1822 :
1823 : /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
1824 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(&opline->op1.u.constant);
1825 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
1826 :
1827 0 : ZEND_VM_NEXT_OPCODE();
1828 : }
1829 :
1830 : static int ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1831 0 : {
1832 0 : zend_op *opline = EX(opline);
1833 :
1834 0 : zval *obj = &opline->op1.u.constant;
1835 : zend_class_entry *ce;
1836 : zend_function *clone;
1837 : zend_object_clone_obj_t clone_call;
1838 :
1839 0 : if (!obj || Z_TYPE_P(obj) != IS_OBJECT) {
1840 0 : zend_error(E_WARNING, "__clone method called on non-object");
1841 0 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
1842 0 : EX_T(opline->result.u.var).var.ptr->refcount++;
1843 :
1844 0 : ZEND_VM_NEXT_OPCODE();
1845 : }
1846 :
1847 0 : ce = Z_OBJCE_P(obj);
1848 0 : clone = ce ? ce->clone : NULL;
1849 0 : clone_call = Z_OBJ_HT_P(obj)->clone_obj;
1850 0 : if (!clone_call) {
1851 0 : if (ce) {
1852 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
1853 : } else {
1854 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
1855 : }
1856 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
1857 : EX_T(opline->result.u.var).var.ptr->refcount++;
1858 : }
1859 :
1860 0 : if (ce && clone) {
1861 0 : if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
1862 : /* Ensure that if we're calling a private function, we're allowed to do so.
1863 : */
1864 0 : if (ce != EG(scope)) {
1865 0 : zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
1866 : }
1867 0 : } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
1868 : /* Ensure that if we're calling a protected function, we're allowed to do so.
1869 : */
1870 0 : if (!zend_check_protected(clone->common.scope, EG(scope))) {
1871 0 : zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
1872 : }
1873 : }
1874 : }
1875 :
1876 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
1877 0 : if (!EG(exception)) {
1878 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
1879 0 : Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC);
1880 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT;
1881 0 : EX_T(opline->result.u.var).var.ptr->refcount=1;
1882 0 : EX_T(opline->result.u.var).var.ptr->is_ref=1;
1883 0 : if (!RETURN_VALUE_USED(opline) || EG(exception)) {
1884 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
1885 : }
1886 : }
1887 :
1888 0 : ZEND_VM_NEXT_OPCODE();
1889 : }
1890 :
1891 : static int ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1892 0 : {
1893 0 : zend_op *opline = EX(opline);
1894 :
1895 0 : zval *expr = &opline->op1.u.constant;
1896 0 : zval *result = &EX_T(opline->result.u.var).tmp_var;
1897 :
1898 0 : *result = *expr;
1899 : if (!0) {
1900 0 : zendi_zval_copy_ctor(*result);
1901 : }
1902 0 : switch (opline->extended_value) {
1903 : case IS_NULL:
1904 0 : convert_to_null(result);
1905 0 : break;
1906 : case IS_BOOL:
1907 0 : convert_to_boolean(result);
1908 0 : break;
1909 : case IS_LONG:
1910 0 : convert_to_long(result);
1911 0 : break;
1912 : case IS_DOUBLE:
1913 0 : convert_to_double(result);
1914 0 : break;
1915 : case IS_STRING: {
1916 : zval var_copy;
1917 : int use_copy;
1918 :
1919 0 : zend_make_printable_zval(result, &var_copy, &use_copy);
1920 0 : if (use_copy) {
1921 0 : zval_dtor(result);
1922 0 : *result = var_copy;
1923 : }
1924 0 : break;
1925 : }
1926 : case IS_ARRAY:
1927 0 : convert_to_array(result);
1928 0 : break;
1929 : case IS_OBJECT:
1930 0 : convert_to_object(result);
1931 : break;
1932 : }
1933 :
1934 0 : ZEND_VM_NEXT_OPCODE();
1935 : }
1936 :
1937 : static int ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
1938 116 : {
1939 116 : zend_op *opline = EX(opline);
1940 116 : zend_op_array *new_op_array=NULL;
1941 116 : zval **original_return_value = EG(return_value_ptr_ptr);
1942 : int return_value_used;
1943 :
1944 116 : zval *inc_filename = &opline->op1.u.constant;
1945 : zval tmp_inc_filename;
1946 116 : zend_bool failure_retval=0;
1947 :
1948 116 : if (inc_filename->type!=IS_STRING) {
1949 0 : tmp_inc_filename = *inc_filename;
1950 0 : zval_copy_ctor(&tmp_inc_filename);
1951 0 : convert_to_string(&tmp_inc_filename);
1952 0 : inc_filename = &tmp_inc_filename;
1953 : }
1954 :
1955 116 : return_value_used = RETURN_VALUE_USED(opline);
1956 :
1957 116 : switch (Z_LVAL(opline->op2.u.constant)) {
1958 : case ZEND_INCLUDE_ONCE:
1959 : case ZEND_REQUIRE_ONCE: {
1960 : zend_file_handle file_handle;
1961 : char cwd[MAXPATHLEN];
1962 : cwd_state state;
1963 :
1964 0 : if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
1965 0 : cwd[0] = '\0';
1966 0 : } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
1967 0 : cwd[0] = '\0';
1968 : }
1969 :
1970 0 : state.cwd_length = strlen(cwd);
1971 0 : state.cwd = zend_strndup(cwd, state.cwd_length);
1972 :
1973 0 : failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
1974 : zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1));
1975 :
1976 0 : free(state.cwd);
1977 :
1978 0 : if (failure_retval) {
1979 : /* do nothing */
1980 0 : } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
1981 :
1982 0 : if (!file_handle.opened_path) {
1983 0 : file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
1984 : }
1985 :
1986 0 : if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
1987 0 : new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
1988 0 : zend_destroy_file_handle(&file_handle TSRMLS_CC);
1989 : } else {
1990 0 : zend_file_handle_dtor(&file_handle);
1991 0 : failure_retval=1;
1992 : }
1993 : } else {
1994 0 : if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
1995 0 : zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
1996 : } else {
1997 0 : zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
1998 : }
1999 : }
2000 : }
2001 0 : break;
2002 : case ZEND_INCLUDE:
2003 : case ZEND_REQUIRE:
2004 116 : new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
2005 116 : break;
2006 : case ZEND_EVAL: {
2007 0 : char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
2008 :
2009 0 : new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
2010 0 : efree(eval_desc);
2011 : }
2012 : break;
2013 : EMPTY_SWITCH_DEFAULT_CASE()
2014 : }
2015 116 : if (inc_filename==&tmp_inc_filename) {
2016 0 : zval_dtor(&tmp_inc_filename);
2017 : }
2018 116 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
2019 116 : if (new_op_array) {
2020 : zval *saved_object;
2021 : zend_function *saved_function;
2022 :
2023 116 : EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr;
2024 116 : EG(active_op_array) = new_op_array;
2025 116 : EX_T(opline->result.u.var).var.ptr = NULL;
2026 :
2027 116 : saved_object = EX(object);
2028 116 : saved_function = EX(function_state).function;
2029 :
2030 116 : EX(function_state).function = (zend_function *) new_op_array;
2031 116 : EX(object) = NULL;
2032 :
2033 116 : zend_execute(new_op_array TSRMLS_CC);
2034 :
2035 116 : EX(function_state).function = saved_function;
2036 116 : EX(object) = saved_object;
2037 :
2038 116 : if (!return_value_used) {
2039 116 : if (EX_T(opline->result.u.var).var.ptr) {
2040 116 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
2041 : }
2042 : } else { /* return value is used */
2043 0 : if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */
2044 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
2045 0 : INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
2046 0 : Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1;
2047 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL;
2048 : }
2049 : }
2050 :
2051 116 : EG(opline_ptr) = &EX(opline);
2052 116 : EG(active_op_array) = EX(op_array);
2053 116 : EG(function_state_ptr) = &EX(function_state);
2054 116 : destroy_op_array(new_op_array TSRMLS_CC);
2055 116 : efree(new_op_array);
2056 116 : if (EG(exception)) {
2057 0 : zend_throw_exception_internal(NULL TSRMLS_CC);
2058 : }
2059 : } else {
2060 0 : if (return_value_used) {
2061 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
2062 0 : INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr);
2063 0 : Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval;
2064 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL;
2065 : }
2066 : }
2067 :
2068 116 : EG(return_value_ptr_ptr) = original_return_value;
2069 116 : ZEND_VM_NEXT_OPCODE();
2070 : }
2071 :
2072 : static int ZEND_UNSET_VAR_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2073 1 : {
2074 1 : zend_op *opline = EX(opline);
2075 : zval tmp, *varname;
2076 : HashTable *target_symbol_table;
2077 :
2078 :
2079 1 : varname = &opline->op1.u.constant;
2080 :
2081 1 : if (Z_TYPE_P(varname) != IS_STRING) {
2082 0 : tmp = *varname;
2083 0 : zval_copy_ctor(&tmp);
2084 0 : convert_to_string(&tmp);
2085 0 : varname = &tmp;
2086 : } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
2087 : varname->refcount++;
2088 : }
2089 :
2090 1 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
2091 0 : zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname) TSRMLS_CC);
2092 : } else {
2093 1 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC);
2094 1 : if (zend_hash_del(target_symbol_table, varname->value.str.val, varname->value.str.len+1) == SUCCESS) {
2095 1 : zend_execute_data *ex = execute_data;
2096 1 : ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
2097 :
2098 : do {
2099 : int i;
2100 :
2101 1 : if (ex->op_array) {
2102 2 : for (i = 0; i < ex->op_array->last_var; i++) {
2103 2 : if (ex->op_array->vars[i].hash_value == hash_value &&
2104 : ex->op_array->vars[i].name_len == varname->value.str.len &&
2105 : !memcmp(ex->op_array->vars[i].name, varname->value.str.val, varname->value.str.len)) {
2106 1 : ex->CVs[i] = NULL;
2107 1 : break;
2108 : }
2109 : }
2110 : }
2111 1 : ex = ex->prev_execute_data;
2112 1 : } while (ex && ex->symbol_table == target_symbol_table);
2113 : }
2114 : }
2115 :
2116 1 : if (varname == &tmp) {
2117 0 : zval_dtor(&tmp);
2118 : } else if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
2119 : zval_ptr_dtor(&varname);
2120 : }
2121 :
2122 1 : ZEND_VM_NEXT_OPCODE();
2123 : }
2124 :
2125 : static int ZEND_FE_RESET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2126 0 : {
2127 0 : zend_op *opline = EX(opline);
2128 : zend_free_op free_op1;
2129 : zval *array_ptr, **array_ptr_ptr;
2130 : HashTable *fe_ht;
2131 0 : zend_object_iterator *iter = NULL;
2132 0 : zend_class_entry *ce = NULL;
2133 0 : zend_bool is_empty = 0;
2134 :
2135 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
2136 0 : array_ptr_ptr = NULL;
2137 0 : if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) {
2138 0 : ALLOC_INIT_ZVAL(array_ptr);
2139 0 : } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
2140 0 : if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) {
2141 0 : zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class");
2142 0 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
2143 : }
2144 :
2145 0 : ce = Z_OBJCE_PP(array_ptr_ptr);
2146 0 : if (!ce || ce->get_iterator == NULL) {
2147 0 : SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
2148 0 : (*array_ptr_ptr)->refcount++;
2149 : }
2150 0 : array_ptr = *array_ptr_ptr;
2151 : } else {
2152 0 : if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) {
2153 0 : SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
2154 0 : if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
2155 0 : (*array_ptr_ptr)->is_ref = 1;
2156 : }
2157 : }
2158 0 : array_ptr = *array_ptr_ptr;
2159 0 : array_ptr->refcount++;
2160 : }
2161 : } else {
2162 0 : array_ptr = &opline->op1.u.constant;
2163 : if (0) { /* IS_TMP_VAR */
2164 : zval *tmp;
2165 :
2166 : ALLOC_ZVAL(tmp);
2167 : INIT_PZVAL_COPY(tmp, array_ptr);
2168 : array_ptr = tmp;
2169 0 : } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
2170 0 : ce = Z_OBJCE_P(array_ptr);
2171 0 : if (!ce || !ce->get_iterator) {
2172 0 : array_ptr->refcount++;
2173 : }
2174 : } else {
2175 : if (IS_CONST == IS_VAR &&
2176 : free_op1.var == NULL &&
2177 : !array_ptr->is_ref &&
2178 : array_ptr->refcount > 1) {
2179 : /* non-separated return value from function */
2180 : zval *tmp;
2181 :
2182 : ALLOC_ZVAL(tmp);
2183 : INIT_PZVAL_COPY(tmp, array_ptr);
2184 : zval_copy_ctor(tmp);
2185 : array_ptr = tmp;
2186 : } else {
2187 0 : array_ptr->refcount++;
2188 : }
2189 : }
2190 : }
2191 :
2192 0 : if (IS_CONST != IS_TMP_VAR && ce && ce->get_iterator) {
2193 0 : iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
2194 :
2195 0 : if (iter && !EG(exception)) {
2196 0 : array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
2197 : } else {
2198 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
2199 :
2200 : } else {
2201 :
2202 : }
2203 0 : if (!EG(exception)) {
2204 0 : zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
2205 : }
2206 0 : zend_throw_exception_internal(NULL TSRMLS_CC);
2207 0 : ZEND_VM_NEXT_OPCODE();
2208 : }
2209 : }
2210 :
2211 0 : PZVAL_LOCK(array_ptr);
2212 0 : EX_T(opline->result.u.var).var.ptr = array_ptr;
2213 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
2214 :
2215 0 : if (iter) {
2216 0 : iter->index = 0;
2217 0 : if (iter->funcs->rewind) {
2218 0 : iter->funcs->rewind(iter TSRMLS_CC);
2219 0 : if (EG(exception)) {
2220 0 : array_ptr->refcount--;
2221 0 : zval_ptr_dtor(&array_ptr);
2222 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
2223 :
2224 : } else {
2225 :
2226 : }
2227 0 : ZEND_VM_NEXT_OPCODE();
2228 : }
2229 : }
2230 0 : is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS;
2231 0 : if (EG(exception)) {
2232 0 : array_ptr->refcount--;
2233 0 : zval_ptr_dtor(&array_ptr);
2234 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
2235 :
2236 : } else {
2237 :
2238 : }
2239 0 : ZEND_VM_NEXT_OPCODE();
2240 : }
2241 0 : iter->index = -1; /* will be set to 0 before using next handler */
2242 0 : } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
2243 0 : zend_hash_internal_pointer_reset(fe_ht);
2244 0 : if (ce) {
2245 0 : zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC);
2246 0 : while (zend_hash_has_more_elements(fe_ht) == SUCCESS) {
2247 : char *str_key;
2248 : uint str_key_len;
2249 : ulong int_key;
2250 : zend_uchar key_type;
2251 :
2252 0 : key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
2253 0 : if (key_type != HASH_KEY_NON_EXISTANT &&
2254 : (key_type == HASH_KEY_IS_LONG ||
2255 : zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) {
2256 : break;
2257 : }
2258 0 : zend_hash_move_forward(fe_ht);
2259 : }
2260 : }
2261 0 : is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
2262 0 : zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos);
2263 : } else {
2264 0 : zend_error(E_WARNING, "Invalid argument supplied for foreach()");
2265 0 : is_empty = 1;
2266 : }
2267 :
2268 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
2269 :
2270 : } else {
2271 :
2272 : }
2273 0 : if (is_empty) {
2274 0 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
2275 : } else {
2276 0 : ZEND_VM_NEXT_OPCODE();
2277 : }
2278 : }
2279 :
2280 : static int ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2281 221 : {
2282 221 : zend_op *opline = EX(opline);
2283 :
2284 221 : zval tmp, *varname = &opline->op1.u.constant;
2285 : zval **value;
2286 221 : zend_bool isset = 1;
2287 : HashTable *target_symbol_table;
2288 :
2289 221 : if (Z_TYPE_P(varname) != IS_STRING) {
2290 0 : tmp = *varname;
2291 0 : zval_copy_ctor(&tmp);
2292 0 : convert_to_string(&tmp);
2293 0 : varname = &tmp;
2294 : }
2295 :
2296 221 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
2297 0 : value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1 TSRMLS_CC);
2298 0 : if (!value) {
2299 0 : isset = 0;
2300 : }
2301 : } else {
2302 221 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC);
2303 221 : if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
2304 218 : isset = 0;
2305 : }
2306 : }
2307 :
2308 221 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
2309 :
2310 221 : switch (opline->extended_value) {
2311 : case ZEND_ISSET:
2312 220 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
2313 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
2314 : } else {
2315 220 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset;
2316 : }
2317 220 : break;
2318 : case ZEND_ISEMPTY:
2319 1 : if (!isset || !i_zend_is_true(*value)) {
2320 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1;
2321 : } else {
2322 1 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
2323 : }
2324 : break;
2325 : }
2326 :
2327 221 : if (varname == &tmp) {
2328 0 : zval_dtor(&tmp);
2329 : }
2330 :
2331 221 : ZEND_VM_NEXT_OPCODE();
2332 : }
2333 :
2334 : static int ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2335 1 : {
2336 : #if 0 || (IS_CONST != IS_UNUSED)
2337 1 : zend_op *opline = EX(opline);
2338 : if (IS_CONST != IS_UNUSED) {
2339 :
2340 1 : zval *ptr = &opline->op1.u.constant;
2341 :
2342 1 : if (Z_TYPE_P(ptr) == IS_LONG) {
2343 1 : EG(exit_status) = Z_LVAL_P(ptr);
2344 : } else {
2345 0 : zend_print_variable(ptr);
2346 : }
2347 :
2348 : }
2349 : #endif
2350 1 : zend_bailout();
2351 0 : ZEND_VM_NEXT_OPCODE();
2352 : }
2353 :
2354 : static int ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2355 3652 : {
2356 3652 : zend_op *opline = EX(opline);
2357 :
2358 3652 : zval *value = &opline->op1.u.constant;
2359 :
2360 3652 : EX_T(opline->result.u.var).tmp_var = *value;
2361 : if (!0) {
2362 3652 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
2363 : }
2364 :
2365 3652 : ZEND_VM_NEXT_OPCODE();
2366 : }
2367 :
2368 : static int ZEND_TICKS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2369 0 : {
2370 0 : zend_op *opline = EX(opline);
2371 :
2372 0 : if (++EG(ticks_count)>=Z_LVAL(opline->op1.u.constant)) {
2373 0 : EG(ticks_count)=0;
2374 0 : if (zend_ticks_function) {
2375 0 : zend_ticks_function(Z_LVAL(opline->op1.u.constant));
2376 : }
2377 : }
2378 0 : ZEND_VM_NEXT_OPCODE();
2379 : }
2380 :
2381 : static int ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2382 0 : {
2383 0 : zend_op *opline = EX(opline);
2384 :
2385 :
2386 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
2387 : &opline->op1.u.constant,
2388 : &opline->op2.u.constant TSRMLS_CC);
2389 :
2390 :
2391 0 : ZEND_VM_NEXT_OPCODE();
2392 : }
2393 :
2394 : static int ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2395 1441 : {
2396 1441 : zend_op *opline = EX(opline);
2397 :
2398 :
2399 1441 : sub_function(&EX_T(opline->result.u.var).tmp_var,
2400 : &opline->op1.u.constant,
2401 : &opline->op2.u.constant TSRMLS_CC);
2402 :
2403 :
2404 1441 : ZEND_VM_NEXT_OPCODE();
2405 : }
2406 :
2407 : static int ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2408 0 : {
2409 0 : zend_op *opline = EX(opline);
2410 :
2411 :
2412 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
2413 : &opline->op1.u.constant,
2414 : &opline->op2.u.constant TSRMLS_CC);
2415 :
2416 :
2417 0 : ZEND_VM_NEXT_OPCODE();
2418 : }
2419 :
2420 : static int ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2421 0 : {
2422 0 : zend_op *opline = EX(opline);
2423 :
2424 :
2425 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
2426 : &opline->op1.u.constant,
2427 : &opline->op2.u.constant TSRMLS_CC);
2428 :
2429 :
2430 0 : ZEND_VM_NEXT_OPCODE();
2431 : }
2432 :
2433 : static int ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2434 0 : {
2435 0 : zend_op *opline = EX(opline);
2436 :
2437 :
2438 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
2439 : &opline->op1.u.constant,
2440 : &opline->op2.u.constant TSRMLS_CC);
2441 :
2442 :
2443 0 : ZEND_VM_NEXT_OPCODE();
2444 : }
2445 :
2446 : static int ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2447 0 : {
2448 0 : zend_op *opline = EX(opline);
2449 :
2450 :
2451 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
2452 : &opline->op1.u.constant,
2453 : &opline->op2.u.constant TSRMLS_CC);
2454 :
2455 :
2456 0 : ZEND_VM_NEXT_OPCODE();
2457 : }
2458 :
2459 : static int ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2460 0 : {
2461 0 : zend_op *opline = EX(opline);
2462 :
2463 :
2464 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
2465 : &opline->op1.u.constant,
2466 : &opline->op2.u.constant TSRMLS_CC);
2467 :
2468 :
2469 0 : ZEND_VM_NEXT_OPCODE();
2470 : }
2471 :
2472 : static int ZEND_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2473 10 : {
2474 10 : zend_op *opline = EX(opline);
2475 :
2476 :
2477 10 : concat_function(&EX_T(opline->result.u.var).tmp_var,
2478 : &opline->op1.u.constant,
2479 : &opline->op2.u.constant TSRMLS_CC);
2480 :
2481 :
2482 10 : ZEND_VM_NEXT_OPCODE();
2483 : }
2484 :
2485 : static int ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2486 0 : {
2487 0 : zend_op *opline = EX(opline);
2488 :
2489 :
2490 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
2491 : &opline->op1.u.constant,
2492 : &opline->op2.u.constant TSRMLS_CC);
2493 :
2494 :
2495 0 : ZEND_VM_NEXT_OPCODE();
2496 : }
2497 :
2498 : static int ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2499 0 : {
2500 0 : zend_op *opline = EX(opline);
2501 :
2502 :
2503 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
2504 : &opline->op1.u.constant,
2505 : &opline->op2.u.constant TSRMLS_CC);
2506 :
2507 :
2508 0 : ZEND_VM_NEXT_OPCODE();
2509 : }
2510 :
2511 : static int ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2512 0 : {
2513 0 : zend_op *opline = EX(opline);
2514 :
2515 :
2516 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
2517 : &opline->op1.u.constant,
2518 : &opline->op2.u.constant TSRMLS_CC);
2519 :
2520 :
2521 0 : ZEND_VM_NEXT_OPCODE();
2522 : }
2523 :
2524 : static int ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2525 0 : {
2526 0 : zend_op *opline = EX(opline);
2527 :
2528 :
2529 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
2530 : &opline->op1.u.constant,
2531 : &opline->op2.u.constant TSRMLS_CC);
2532 :
2533 :
2534 0 : ZEND_VM_NEXT_OPCODE();
2535 : }
2536 :
2537 : static int ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2538 0 : {
2539 0 : zend_op *opline = EX(opline);
2540 :
2541 :
2542 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
2543 : &opline->op1.u.constant,
2544 : &opline->op2.u.constant TSRMLS_CC);
2545 :
2546 :
2547 0 : ZEND_VM_NEXT_OPCODE();
2548 : }
2549 :
2550 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2551 0 : {
2552 0 : zend_op *opline = EX(opline);
2553 :
2554 :
2555 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
2556 : &opline->op1.u.constant,
2557 : &opline->op2.u.constant TSRMLS_CC);
2558 :
2559 :
2560 0 : ZEND_VM_NEXT_OPCODE();
2561 : }
2562 :
2563 : static int ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2564 0 : {
2565 0 : zend_op *opline = EX(opline);
2566 :
2567 :
2568 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
2569 : &opline->op1.u.constant,
2570 : &opline->op2.u.constant TSRMLS_CC);
2571 :
2572 :
2573 0 : ZEND_VM_NEXT_OPCODE();
2574 : }
2575 :
2576 : static int ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2577 0 : {
2578 0 : zend_op *opline = EX(opline);
2579 :
2580 :
2581 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
2582 : &opline->op1.u.constant,
2583 : &opline->op2.u.constant TSRMLS_CC);
2584 :
2585 :
2586 0 : ZEND_VM_NEXT_OPCODE();
2587 : }
2588 :
2589 : static int ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2590 0 : {
2591 0 : zend_op *opline = EX(opline);
2592 :
2593 :
2594 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
2595 : &opline->op1.u.constant,
2596 : &opline->op2.u.constant TSRMLS_CC);
2597 :
2598 :
2599 0 : ZEND_VM_NEXT_OPCODE();
2600 : }
2601 :
2602 : static int ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2603 0 : {
2604 0 : zend_op *opline = EX(opline);
2605 :
2606 :
2607 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
2608 : &opline->op1.u.constant,
2609 : &opline->op2.u.constant TSRMLS_CC);
2610 :
2611 :
2612 0 : ZEND_VM_NEXT_OPCODE();
2613 : }
2614 :
2615 : static int ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2616 0 : {
2617 0 : zend_op *opline = EX(opline);
2618 :
2619 0 : zval *container = &opline->op1.u.constant;
2620 :
2621 0 : if (Z_TYPE_P(container) != IS_ARRAY) {
2622 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
2623 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
2624 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
2625 : }
2626 : } else {
2627 :
2628 0 : zval *dim = &opline->op2.u.constant;
2629 :
2630 0 : EX_T(opline->result.u.var).var.ptr_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, BP_VAR_R TSRMLS_CC);
2631 0 : SELECTIVE_PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &opline->result);
2632 :
2633 : }
2634 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
2635 0 : ZEND_VM_NEXT_OPCODE();
2636 : }
2637 :
2638 : static int ZEND_CASE_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2639 0 : {
2640 0 : zend_op *opline = EX(opline);
2641 0 : int switch_expr_is_overloaded=0;
2642 :
2643 :
2644 : if (IS_CONST==IS_VAR) {
2645 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
2646 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
2647 : } else {
2648 : switch_expr_is_overloaded = 1;
2649 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
2650 : }
2651 : }
2652 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
2653 : &opline->op1.u.constant,
2654 : &opline->op2.u.constant TSRMLS_CC);
2655 :
2656 0 : if (switch_expr_is_overloaded) {
2657 : /* We only free op1 if this is a string offset,
2658 : * Since if it is a TMP_VAR, it'll be reused by
2659 : * other CASE opcodes (whereas string offsets
2660 : * are allocated at each get_zval_ptr())
2661 : */
2662 :
2663 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
2664 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
2665 : }
2666 0 : ZEND_VM_NEXT_OPCODE();
2667 : }
2668 :
2669 : static int ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2670 62 : {
2671 62 : zend_op *opline = EX(opline);
2672 62 : zend_class_entry *ce = NULL;
2673 : zval **value;
2674 :
2675 : if (IS_CONST == IS_UNUSED) {
2676 : /* This seems to be a reminant of namespaces
2677 : if (EG(scope)) {
2678 : ce = EG(scope);
2679 : if (zend_hash_find(&ce->constants_table, Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void **) &value) == SUCCESS) {
2680 : zval_update_constant(value, (void *) 1 TSRMLS_CC);
2681 : EX_T(opline->result.u.var).tmp_var = **value;
2682 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
2683 : ZEND_VM_NEXT_OPCODE();
2684 : }
2685 : }
2686 : */
2687 : if (!zend_get_constant(opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len, &EX_T(opline->result.u.var).tmp_var TSRMLS_CC)) {
2688 : zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
2689 : opline->op2.u.constant.value.str.val,
2690 : opline->op2.u.constant.value.str.val);
2691 : EX_T(opline->result.u.var).tmp_var = opline->op2.u.constant;
2692 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
2693 : }
2694 : ZEND_VM_NEXT_OPCODE();
2695 : }
2696 :
2697 62 : ce = EX_T(opline->op1.u.var).class_entry;
2698 :
2699 62 : if (zend_hash_find(&ce->constants_table, opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len+1, (void **) &value) == SUCCESS) {
2700 62 : zval_update_constant(value, (void *) 1 TSRMLS_CC);
2701 62 : EX_T(opline->result.u.var).tmp_var = **value;
2702 62 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
2703 : } else {
2704 0 : zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", opline->op2.u.constant.value.str.val);
2705 : }
2706 :
2707 62 : ZEND_VM_NEXT_OPCODE();
2708 : }
2709 :
2710 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2711 1197 : {
2712 1197 : zend_op *opline = EX(opline);
2713 :
2714 1197 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
2715 : zval *expr_ptr;
2716 1197 : zval *offset=&opline->op2.u.constant;
2717 :
2718 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
2719 : zval **expr_ptr_ptr = NULL;
2720 :
2721 : if (opline->extended_value) {
2722 : expr_ptr_ptr=NULL;
2723 : expr_ptr = *expr_ptr_ptr;
2724 : } else {
2725 : expr_ptr=&opline->op1.u.constant;
2726 : }
2727 : #else
2728 1197 : expr_ptr=&opline->op1.u.constant;
2729 : #endif
2730 :
2731 : if (0) { /* temporary variable */
2732 : zval *new_expr;
2733 :
2734 : ALLOC_ZVAL(new_expr);
2735 : INIT_PZVAL_COPY(new_expr, expr_ptr);
2736 : expr_ptr = new_expr;
2737 : } else {
2738 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
2739 : if (opline->extended_value) {
2740 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
2741 : expr_ptr = *expr_ptr_ptr;
2742 : expr_ptr->refcount++;
2743 : } else
2744 : #endif
2745 1197 : if (PZVAL_IS_REF(expr_ptr)) {
2746 : zval *new_expr;
2747 :
2748 1197 : ALLOC_ZVAL(new_expr);
2749 1197 : INIT_PZVAL_COPY(new_expr, expr_ptr);
2750 1197 : expr_ptr = new_expr;
2751 1197 : zendi_zval_copy_ctor(*expr_ptr);
2752 : } else {
2753 0 : expr_ptr->refcount++;
2754 : }
2755 : }
2756 1197 : if (offset) {
2757 1197 : switch (Z_TYPE_P(offset)) {
2758 : case IS_DOUBLE:
2759 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
2760 0 : break;
2761 : case IS_LONG:
2762 : case IS_BOOL:
2763 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
2764 0 : break;
2765 : case IS_STRING:
2766 1197 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
2767 1197 : break;
2768 : case IS_NULL:
2769 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
2770 0 : break;
2771 : default:
2772 0 : zend_error(E_WARNING, "Illegal offset type");
2773 0 : zval_ptr_dtor(&expr_ptr);
2774 : /* do nothing */
2775 : break;
2776 : }
2777 :
2778 : } else {
2779 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
2780 : }
2781 1197 : if (opline->extended_value) {
2782 :
2783 : } else {
2784 :
2785 : }
2786 1197 : ZEND_VM_NEXT_OPCODE();
2787 : }
2788 :
2789 : static int ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2790 408 : {
2791 408 : zend_op *opline = EX(opline);
2792 :
2793 408 : array_init(&EX_T(opline->result.u.var).tmp_var);
2794 : if (IS_CONST == IS_UNUSED) {
2795 : ZEND_VM_NEXT_OPCODE();
2796 : #if 0 || IS_CONST != IS_UNUSED
2797 : } else {
2798 408 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
2799 : #endif
2800 : }
2801 : }
2802 :
2803 : static int ZEND_ADD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2804 0 : {
2805 0 : zend_op *opline = EX(opline);
2806 : zend_free_op free_op2;
2807 :
2808 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
2809 : &opline->op1.u.constant,
2810 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2811 :
2812 0 : zval_dtor(free_op2.var);
2813 0 : ZEND_VM_NEXT_OPCODE();
2814 : }
2815 :
2816 : static int ZEND_SUB_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2817 0 : {
2818 0 : zend_op *opline = EX(opline);
2819 : zend_free_op free_op2;
2820 :
2821 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
2822 : &opline->op1.u.constant,
2823 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2824 :
2825 0 : zval_dtor(free_op2.var);
2826 0 : ZEND_VM_NEXT_OPCODE();
2827 : }
2828 :
2829 : static int ZEND_MUL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2830 0 : {
2831 0 : zend_op *opline = EX(opline);
2832 : zend_free_op free_op2;
2833 :
2834 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
2835 : &opline->op1.u.constant,
2836 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2837 :
2838 0 : zval_dtor(free_op2.var);
2839 0 : ZEND_VM_NEXT_OPCODE();
2840 : }
2841 :
2842 : static int ZEND_DIV_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2843 0 : {
2844 0 : zend_op *opline = EX(opline);
2845 : zend_free_op free_op2;
2846 :
2847 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
2848 : &opline->op1.u.constant,
2849 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2850 :
2851 0 : zval_dtor(free_op2.var);
2852 0 : ZEND_VM_NEXT_OPCODE();
2853 : }
2854 :
2855 : static int ZEND_MOD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2856 0 : {
2857 0 : zend_op *opline = EX(opline);
2858 : zend_free_op free_op2;
2859 :
2860 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
2861 : &opline->op1.u.constant,
2862 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2863 :
2864 0 : zval_dtor(free_op2.var);
2865 0 : ZEND_VM_NEXT_OPCODE();
2866 : }
2867 :
2868 : static int ZEND_SL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2869 0 : {
2870 0 : zend_op *opline = EX(opline);
2871 : zend_free_op free_op2;
2872 :
2873 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
2874 : &opline->op1.u.constant,
2875 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2876 :
2877 0 : zval_dtor(free_op2.var);
2878 0 : ZEND_VM_NEXT_OPCODE();
2879 : }
2880 :
2881 : static int ZEND_SR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2882 0 : {
2883 0 : zend_op *opline = EX(opline);
2884 : zend_free_op free_op2;
2885 :
2886 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
2887 : &opline->op1.u.constant,
2888 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2889 :
2890 0 : zval_dtor(free_op2.var);
2891 0 : ZEND_VM_NEXT_OPCODE();
2892 : }
2893 :
2894 : static int ZEND_CONCAT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2895 108 : {
2896 108 : zend_op *opline = EX(opline);
2897 : zend_free_op free_op2;
2898 :
2899 108 : concat_function(&EX_T(opline->result.u.var).tmp_var,
2900 : &opline->op1.u.constant,
2901 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2902 :
2903 108 : zval_dtor(free_op2.var);
2904 108 : ZEND_VM_NEXT_OPCODE();
2905 : }
2906 :
2907 : static int ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2908 0 : {
2909 0 : zend_op *opline = EX(opline);
2910 : zend_free_op free_op2;
2911 :
2912 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
2913 : &opline->op1.u.constant,
2914 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2915 :
2916 0 : zval_dtor(free_op2.var);
2917 0 : ZEND_VM_NEXT_OPCODE();
2918 : }
2919 :
2920 : static int ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2921 0 : {
2922 0 : zend_op *opline = EX(opline);
2923 : zend_free_op free_op2;
2924 :
2925 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
2926 : &opline->op1.u.constant,
2927 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2928 :
2929 0 : zval_dtor(free_op2.var);
2930 0 : ZEND_VM_NEXT_OPCODE();
2931 : }
2932 :
2933 : static int ZEND_IS_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2934 0 : {
2935 0 : zend_op *opline = EX(opline);
2936 : zend_free_op free_op2;
2937 :
2938 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
2939 : &opline->op1.u.constant,
2940 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2941 :
2942 0 : zval_dtor(free_op2.var);
2943 0 : ZEND_VM_NEXT_OPCODE();
2944 : }
2945 :
2946 : static int ZEND_IS_NOT_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2947 0 : {
2948 0 : zend_op *opline = EX(opline);
2949 : zend_free_op free_op2;
2950 :
2951 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
2952 : &opline->op1.u.constant,
2953 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2954 :
2955 0 : zval_dtor(free_op2.var);
2956 0 : ZEND_VM_NEXT_OPCODE();
2957 : }
2958 :
2959 : static int ZEND_IS_SMALLER_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2960 15952 : {
2961 15952 : zend_op *opline = EX(opline);
2962 : zend_free_op free_op2;
2963 :
2964 15952 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
2965 : &opline->op1.u.constant,
2966 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2967 :
2968 15952 : zval_dtor(free_op2.var);
2969 15952 : ZEND_VM_NEXT_OPCODE();
2970 : }
2971 :
2972 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2973 0 : {
2974 0 : zend_op *opline = EX(opline);
2975 : zend_free_op free_op2;
2976 :
2977 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
2978 : &opline->op1.u.constant,
2979 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2980 :
2981 0 : zval_dtor(free_op2.var);
2982 0 : ZEND_VM_NEXT_OPCODE();
2983 : }
2984 :
2985 : static int ZEND_BW_OR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2986 0 : {
2987 0 : zend_op *opline = EX(opline);
2988 : zend_free_op free_op2;
2989 :
2990 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
2991 : &opline->op1.u.constant,
2992 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
2993 :
2994 0 : zval_dtor(free_op2.var);
2995 0 : ZEND_VM_NEXT_OPCODE();
2996 : }
2997 :
2998 : static int ZEND_BW_AND_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
2999 0 : {
3000 0 : zend_op *opline = EX(opline);
3001 : zend_free_op free_op2;
3002 :
3003 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
3004 : &opline->op1.u.constant,
3005 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3006 :
3007 0 : zval_dtor(free_op2.var);
3008 0 : ZEND_VM_NEXT_OPCODE();
3009 : }
3010 :
3011 : static int ZEND_BW_XOR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3012 0 : {
3013 0 : zend_op *opline = EX(opline);
3014 : zend_free_op free_op2;
3015 :
3016 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
3017 : &opline->op1.u.constant,
3018 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3019 :
3020 0 : zval_dtor(free_op2.var);
3021 0 : ZEND_VM_NEXT_OPCODE();
3022 : }
3023 :
3024 : static int ZEND_BOOL_XOR_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3025 0 : {
3026 0 : zend_op *opline = EX(opline);
3027 : zend_free_op free_op2;
3028 :
3029 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
3030 : &opline->op1.u.constant,
3031 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3032 :
3033 0 : zval_dtor(free_op2.var);
3034 0 : ZEND_VM_NEXT_OPCODE();
3035 : }
3036 :
3037 : static int ZEND_CASE_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3038 0 : {
3039 0 : zend_op *opline = EX(opline);
3040 0 : int switch_expr_is_overloaded=0;
3041 : zend_free_op free_op2;
3042 :
3043 : if (IS_CONST==IS_VAR) {
3044 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
3045 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
3046 : } else {
3047 : switch_expr_is_overloaded = 1;
3048 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
3049 : }
3050 : }
3051 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
3052 : &opline->op1.u.constant,
3053 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3054 :
3055 0 : zval_dtor(free_op2.var);
3056 0 : if (switch_expr_is_overloaded) {
3057 : /* We only free op1 if this is a string offset,
3058 : * Since if it is a TMP_VAR, it'll be reused by
3059 : * other CASE opcodes (whereas string offsets
3060 : * are allocated at each get_zval_ptr())
3061 : */
3062 :
3063 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
3064 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
3065 : }
3066 0 : ZEND_VM_NEXT_OPCODE();
3067 : }
3068 :
3069 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3070 12 : {
3071 12 : zend_op *opline = EX(opline);
3072 : zend_free_op free_op2;
3073 12 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
3074 : zval *expr_ptr;
3075 12 : zval *offset=_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
3076 :
3077 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
3078 : zval **expr_ptr_ptr = NULL;
3079 :
3080 : if (opline->extended_value) {
3081 : expr_ptr_ptr=NULL;
3082 : expr_ptr = *expr_ptr_ptr;
3083 : } else {
3084 : expr_ptr=&opline->op1.u.constant;
3085 : }
3086 : #else
3087 12 : expr_ptr=&opline->op1.u.constant;
3088 : #endif
3089 :
3090 : if (0) { /* temporary variable */
3091 : zval *new_expr;
3092 :
3093 : ALLOC_ZVAL(new_expr);
3094 : INIT_PZVAL_COPY(new_expr, expr_ptr);
3095 : expr_ptr = new_expr;
3096 : } else {
3097 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
3098 : if (opline->extended_value) {
3099 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
3100 : expr_ptr = *expr_ptr_ptr;
3101 : expr_ptr->refcount++;
3102 : } else
3103 : #endif
3104 12 : if (PZVAL_IS_REF(expr_ptr)) {
3105 : zval *new_expr;
3106 :
3107 12 : ALLOC_ZVAL(new_expr);
3108 12 : INIT_PZVAL_COPY(new_expr, expr_ptr);
3109 12 : expr_ptr = new_expr;
3110 12 : zendi_zval_copy_ctor(*expr_ptr);
3111 : } else {
3112 0 : expr_ptr->refcount++;
3113 : }
3114 : }
3115 12 : if (offset) {
3116 12 : switch (Z_TYPE_P(offset)) {
3117 : case IS_DOUBLE:
3118 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
3119 0 : break;
3120 : case IS_LONG:
3121 : case IS_BOOL:
3122 12 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
3123 12 : break;
3124 : case IS_STRING:
3125 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
3126 0 : break;
3127 : case IS_NULL:
3128 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
3129 0 : break;
3130 : default:
3131 0 : zend_error(E_WARNING, "Illegal offset type");
3132 0 : zval_ptr_dtor(&expr_ptr);
3133 : /* do nothing */
3134 : break;
3135 : }
3136 12 : zval_dtor(free_op2.var);
3137 : } else {
3138 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
3139 : }
3140 12 : if (opline->extended_value) {
3141 :
3142 : } else {
3143 :
3144 : }
3145 12 : ZEND_VM_NEXT_OPCODE();
3146 : }
3147 :
3148 : static int ZEND_INIT_ARRAY_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3149 1 : {
3150 1 : zend_op *opline = EX(opline);
3151 :
3152 1 : array_init(&EX_T(opline->result.u.var).tmp_var);
3153 : if (IS_CONST == IS_UNUSED) {
3154 : ZEND_VM_NEXT_OPCODE();
3155 : #if 0 || IS_CONST != IS_UNUSED
3156 : } else {
3157 1 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
3158 : #endif
3159 : }
3160 : }
3161 :
3162 : static int ZEND_ADD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3163 0 : {
3164 0 : zend_op *opline = EX(opline);
3165 : zend_free_op free_op2;
3166 :
3167 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
3168 : &opline->op1.u.constant,
3169 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3170 :
3171 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3172 0 : ZEND_VM_NEXT_OPCODE();
3173 : }
3174 :
3175 : static int ZEND_SUB_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3176 0 : {
3177 0 : zend_op *opline = EX(opline);
3178 : zend_free_op free_op2;
3179 :
3180 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
3181 : &opline->op1.u.constant,
3182 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3183 :
3184 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3185 0 : ZEND_VM_NEXT_OPCODE();
3186 : }
3187 :
3188 : static int ZEND_MUL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3189 5 : {
3190 5 : zend_op *opline = EX(opline);
3191 : zend_free_op free_op2;
3192 :
3193 5 : mul_function(&EX_T(opline->result.u.var).tmp_var,
3194 : &opline->op1.u.constant,
3195 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3196 :
3197 5 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3198 5 : ZEND_VM_NEXT_OPCODE();
3199 : }
3200 :
3201 : static int ZEND_DIV_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3202 0 : {
3203 0 : zend_op *opline = EX(opline);
3204 : zend_free_op free_op2;
3205 :
3206 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
3207 : &opline->op1.u.constant,
3208 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3209 :
3210 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3211 0 : ZEND_VM_NEXT_OPCODE();
3212 : }
3213 :
3214 : static int ZEND_MOD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3215 0 : {
3216 0 : zend_op *opline = EX(opline);
3217 : zend_free_op free_op2;
3218 :
3219 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
3220 : &opline->op1.u.constant,
3221 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3222 :
3223 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3224 0 : ZEND_VM_NEXT_OPCODE();
3225 : }
3226 :
3227 : static int ZEND_SL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3228 0 : {
3229 0 : zend_op *opline = EX(opline);
3230 : zend_free_op free_op2;
3231 :
3232 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
3233 : &opline->op1.u.constant,
3234 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3235 :
3236 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3237 0 : ZEND_VM_NEXT_OPCODE();
3238 : }
3239 :
3240 : static int ZEND_SR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3241 0 : {
3242 0 : zend_op *opline = EX(opline);
3243 : zend_free_op free_op2;
3244 :
3245 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
3246 : &opline->op1.u.constant,
3247 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3248 :
3249 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3250 0 : ZEND_VM_NEXT_OPCODE();
3251 : }
3252 :
3253 : static int ZEND_CONCAT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3254 4 : {
3255 4 : zend_op *opline = EX(opline);
3256 : zend_free_op free_op2;
3257 :
3258 4 : concat_function(&EX_T(opline->result.u.var).tmp_var,
3259 : &opline->op1.u.constant,
3260 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3261 :
3262 4 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3263 4 : ZEND_VM_NEXT_OPCODE();
3264 : }
3265 :
3266 : static int ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3267 0 : {
3268 0 : zend_op *opline = EX(opline);
3269 : zend_free_op free_op2;
3270 :
3271 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
3272 : &opline->op1.u.constant,
3273 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3274 :
3275 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3276 0 : ZEND_VM_NEXT_OPCODE();
3277 : }
3278 :
3279 : static int ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3280 0 : {
3281 0 : zend_op *opline = EX(opline);
3282 : zend_free_op free_op2;
3283 :
3284 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
3285 : &opline->op1.u.constant,
3286 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3287 :
3288 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3289 0 : ZEND_VM_NEXT_OPCODE();
3290 : }
3291 :
3292 : static int ZEND_IS_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3293 0 : {
3294 0 : zend_op *opline = EX(opline);
3295 : zend_free_op free_op2;
3296 :
3297 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
3298 : &opline->op1.u.constant,
3299 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3300 :
3301 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3302 0 : ZEND_VM_NEXT_OPCODE();
3303 : }
3304 :
3305 : static int ZEND_IS_NOT_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3306 0 : {
3307 0 : zend_op *opline = EX(opline);
3308 : zend_free_op free_op2;
3309 :
3310 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
3311 : &opline->op1.u.constant,
3312 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3313 :
3314 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3315 0 : ZEND_VM_NEXT_OPCODE();
3316 : }
3317 :
3318 : static int ZEND_IS_SMALLER_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3319 10916 : {
3320 10916 : zend_op *opline = EX(opline);
3321 : zend_free_op free_op2;
3322 :
3323 10916 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
3324 : &opline->op1.u.constant,
3325 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3326 :
3327 10916 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3328 10916 : ZEND_VM_NEXT_OPCODE();
3329 : }
3330 :
3331 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3332 0 : {
3333 0 : zend_op *opline = EX(opline);
3334 : zend_free_op free_op2;
3335 :
3336 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
3337 : &opline->op1.u.constant,
3338 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3339 :
3340 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3341 0 : ZEND_VM_NEXT_OPCODE();
3342 : }
3343 :
3344 : static int ZEND_BW_OR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3345 0 : {
3346 0 : zend_op *opline = EX(opline);
3347 : zend_free_op free_op2;
3348 :
3349 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
3350 : &opline->op1.u.constant,
3351 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3352 :
3353 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3354 0 : ZEND_VM_NEXT_OPCODE();
3355 : }
3356 :
3357 : static int ZEND_BW_AND_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3358 0 : {
3359 0 : zend_op *opline = EX(opline);
3360 : zend_free_op free_op2;
3361 :
3362 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
3363 : &opline->op1.u.constant,
3364 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3365 :
3366 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3367 0 : ZEND_VM_NEXT_OPCODE();
3368 : }
3369 :
3370 : static int ZEND_BW_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3371 0 : {
3372 0 : zend_op *opline = EX(opline);
3373 : zend_free_op free_op2;
3374 :
3375 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
3376 : &opline->op1.u.constant,
3377 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3378 :
3379 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3380 0 : ZEND_VM_NEXT_OPCODE();
3381 : }
3382 :
3383 : static int ZEND_BOOL_XOR_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3384 0 : {
3385 0 : zend_op *opline = EX(opline);
3386 : zend_free_op free_op2;
3387 :
3388 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
3389 : &opline->op1.u.constant,
3390 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3391 :
3392 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3393 0 : ZEND_VM_NEXT_OPCODE();
3394 : }
3395 :
3396 : static int ZEND_CASE_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3397 0 : {
3398 0 : zend_op *opline = EX(opline);
3399 0 : int switch_expr_is_overloaded=0;
3400 : zend_free_op free_op2;
3401 :
3402 : if (IS_CONST==IS_VAR) {
3403 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
3404 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
3405 : } else {
3406 : switch_expr_is_overloaded = 1;
3407 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
3408 : }
3409 : }
3410 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
3411 : &opline->op1.u.constant,
3412 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
3413 :
3414 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3415 0 : if (switch_expr_is_overloaded) {
3416 : /* We only free op1 if this is a string offset,
3417 : * Since if it is a TMP_VAR, it'll be reused by
3418 : * other CASE opcodes (whereas string offsets
3419 : * are allocated at each get_zval_ptr())
3420 : */
3421 :
3422 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
3423 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
3424 : }
3425 0 : ZEND_VM_NEXT_OPCODE();
3426 : }
3427 :
3428 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3429 0 : {
3430 0 : zend_op *opline = EX(opline);
3431 : zend_free_op free_op2;
3432 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
3433 : zval *expr_ptr;
3434 0 : zval *offset=_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
3435 :
3436 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
3437 : zval **expr_ptr_ptr = NULL;
3438 :
3439 : if (opline->extended_value) {
3440 : expr_ptr_ptr=NULL;
3441 : expr_ptr = *expr_ptr_ptr;
3442 : } else {
3443 : expr_ptr=&opline->op1.u.constant;
3444 : }
3445 : #else
3446 0 : expr_ptr=&opline->op1.u.constant;
3447 : #endif
3448 :
3449 : if (0) { /* temporary variable */
3450 : zval *new_expr;
3451 :
3452 : ALLOC_ZVAL(new_expr);
3453 : INIT_PZVAL_COPY(new_expr, expr_ptr);
3454 : expr_ptr = new_expr;
3455 : } else {
3456 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
3457 : if (opline->extended_value) {
3458 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
3459 : expr_ptr = *expr_ptr_ptr;
3460 : expr_ptr->refcount++;
3461 : } else
3462 : #endif
3463 0 : if (PZVAL_IS_REF(expr_ptr)) {
3464 : zval *new_expr;
3465 :
3466 0 : ALLOC_ZVAL(new_expr);
3467 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
3468 0 : expr_ptr = new_expr;
3469 0 : zendi_zval_copy_ctor(*expr_ptr);
3470 : } else {
3471 0 : expr_ptr->refcount++;
3472 : }
3473 : }
3474 0 : if (offset) {
3475 0 : switch (Z_TYPE_P(offset)) {
3476 : case IS_DOUBLE:
3477 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
3478 0 : break;
3479 : case IS_LONG:
3480 : case IS_BOOL:
3481 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
3482 0 : break;
3483 : case IS_STRING:
3484 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
3485 0 : break;
3486 : case IS_NULL:
3487 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
3488 0 : break;
3489 : default:
3490 0 : zend_error(E_WARNING, "Illegal offset type");
3491 0 : zval_ptr_dtor(&expr_ptr);
3492 : /* do nothing */
3493 : break;
3494 : }
3495 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
3496 : } else {
3497 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
3498 : }
3499 0 : if (opline->extended_value) {
3500 :
3501 : } else {
3502 :
3503 : }
3504 0 : ZEND_VM_NEXT_OPCODE();
3505 : }
3506 :
3507 : static int ZEND_INIT_ARRAY_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3508 0 : {
3509 0 : zend_op *opline = EX(opline);
3510 :
3511 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
3512 : if (IS_CONST == IS_UNUSED) {
3513 : ZEND_VM_NEXT_OPCODE();
3514 : #if 0 || IS_CONST != IS_UNUSED
3515 : } else {
3516 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
3517 : #endif
3518 : }
3519 : }
3520 :
3521 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3522 1486 : {
3523 1486 : zend_op *opline = EX(opline);
3524 :
3525 1486 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
3526 : zval *expr_ptr;
3527 1486 : zval *offset=NULL;
3528 :
3529 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
3530 : zval **expr_ptr_ptr = NULL;
3531 :
3532 : if (opline->extended_value) {
3533 : expr_ptr_ptr=NULL;
3534 : expr_ptr = *expr_ptr_ptr;
3535 : } else {
3536 : expr_ptr=&opline->op1.u.constant;
3537 : }
3538 : #else
3539 1486 : expr_ptr=&opline->op1.u.constant;
3540 : #endif
3541 :
3542 : if (0) { /* temporary variable */
3543 : zval *new_expr;
3544 :
3545 : ALLOC_ZVAL(new_expr);
3546 : INIT_PZVAL_COPY(new_expr, expr_ptr);
3547 : expr_ptr = new_expr;
3548 : } else {
3549 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
3550 : if (opline->extended_value) {
3551 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
3552 : expr_ptr = *expr_ptr_ptr;
3553 : expr_ptr->refcount++;
3554 : } else
3555 : #endif
3556 1486 : if (PZVAL_IS_REF(expr_ptr)) {
3557 : zval *new_expr;
3558 :
3559 1486 : ALLOC_ZVAL(new_expr);
3560 1486 : INIT_PZVAL_COPY(new_expr, expr_ptr);
3561 1486 : expr_ptr = new_expr;
3562 1486 : zendi_zval_copy_ctor(*expr_ptr);
3563 : } else {
3564 0 : expr_ptr->refcount++;
3565 : }
3566 : }
3567 1486 : if (offset) {
3568 0 : switch (Z_TYPE_P(offset)) {
3569 : case IS_DOUBLE:
3570 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
3571 0 : break;
3572 : case IS_LONG:
3573 : case IS_BOOL:
3574 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
3575 0 : break;
3576 : case IS_STRING:
3577 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
3578 0 : break;
3579 : case IS_NULL:
3580 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
3581 0 : break;
3582 : default:
3583 0 : zend_error(E_WARNING, "Illegal offset type");
3584 0 : zval_ptr_dtor(&expr_ptr);
3585 : /* do nothing */
3586 : break;
3587 : }
3588 :
3589 : } else {
3590 1486 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
3591 : }
3592 1486 : if (opline->extended_value) {
3593 :
3594 : } else {
3595 :
3596 : }
3597 1486 : ZEND_VM_NEXT_OPCODE();
3598 : }
3599 :
3600 : static int ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3601 711 : {
3602 711 : zend_op *opline = EX(opline);
3603 :
3604 711 : array_init(&EX_T(opline->result.u.var).tmp_var);
3605 : if (IS_CONST == IS_UNUSED) {
3606 : ZEND_VM_NEXT_OPCODE();
3607 : #if 0 || IS_CONST != IS_UNUSED
3608 : } else {
3609 711 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
3610 : #endif
3611 : }
3612 : }
3613 :
3614 : static int ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3615 0 : {
3616 0 : zend_op *opline = EX(opline);
3617 :
3618 :
3619 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
3620 : &opline->op1.u.constant,
3621 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3622 :
3623 :
3624 0 : ZEND_VM_NEXT_OPCODE();
3625 : }
3626 :
3627 : static int ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3628 0 : {
3629 0 : zend_op *opline = EX(opline);
3630 :
3631 :
3632 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
3633 : &opline->op1.u.constant,
3634 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3635 :
3636 :
3637 0 : ZEND_VM_NEXT_OPCODE();
3638 : }
3639 :
3640 : static int ZEND_MUL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3641 6 : {
3642 6 : zend_op *opline = EX(opline);
3643 :
3644 :
3645 6 : mul_function(&EX_T(opline->result.u.var).tmp_var,
3646 : &opline->op1.u.constant,
3647 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3648 :
3649 :
3650 6 : ZEND_VM_NEXT_OPCODE();
3651 : }
3652 :
3653 : static int ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3654 0 : {
3655 0 : zend_op *opline = EX(opline);
3656 :
3657 :
3658 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
3659 : &opline->op1.u.constant,
3660 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3661 :
3662 :
3663 0 : ZEND_VM_NEXT_OPCODE();
3664 : }
3665 :
3666 : static int ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3667 0 : {
3668 0 : zend_op *opline = EX(opline);
3669 :
3670 :
3671 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
3672 : &opline->op1.u.constant,
3673 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3674 :
3675 :
3676 0 : ZEND_VM_NEXT_OPCODE();
3677 : }
3678 :
3679 : static int ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3680 0 : {
3681 0 : zend_op *opline = EX(opline);
3682 :
3683 :
3684 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
3685 : &opline->op1.u.constant,
3686 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3687 :
3688 :
3689 0 : ZEND_VM_NEXT_OPCODE();
3690 : }
3691 :
3692 : static int ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3693 0 : {
3694 0 : zend_op *opline = EX(opline);
3695 :
3696 :
3697 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
3698 : &opline->op1.u.constant,
3699 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3700 :
3701 :
3702 0 : ZEND_VM_NEXT_OPCODE();
3703 : }
3704 :
3705 : static int ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3706 15044 : {
3707 15044 : zend_op *opline = EX(opline);
3708 :
3709 :
3710 15044 : concat_function(&EX_T(opline->result.u.var).tmp_var,
3711 : &opline->op1.u.constant,
3712 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3713 :
3714 :
3715 15044 : ZEND_VM_NEXT_OPCODE();
3716 : }
3717 :
3718 : static int ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3719 0 : {
3720 0 : zend_op *opline = EX(opline);
3721 :
3722 :
3723 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
3724 : &opline->op1.u.constant,
3725 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3726 :
3727 :
3728 0 : ZEND_VM_NEXT_OPCODE();
3729 : }
3730 :
3731 : static int ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3732 0 : {
3733 0 : zend_op *opline = EX(opline);
3734 :
3735 :
3736 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
3737 : &opline->op1.u.constant,
3738 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3739 :
3740 :
3741 0 : ZEND_VM_NEXT_OPCODE();
3742 : }
3743 :
3744 : static int ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3745 0 : {
3746 0 : zend_op *opline = EX(opline);
3747 :
3748 :
3749 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
3750 : &opline->op1.u.constant,
3751 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3752 :
3753 :
3754 0 : ZEND_VM_NEXT_OPCODE();
3755 : }
3756 :
3757 : static int ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3758 0 : {
3759 0 : zend_op *opline = EX(opline);
3760 :
3761 :
3762 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
3763 : &opline->op1.u.constant,
3764 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3765 :
3766 :
3767 0 : ZEND_VM_NEXT_OPCODE();
3768 : }
3769 :
3770 : static int ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3771 4652 : {
3772 4652 : zend_op *opline = EX(opline);
3773 :
3774 :
3775 4652 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
3776 : &opline->op1.u.constant,
3777 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3778 :
3779 :
3780 4652 : ZEND_VM_NEXT_OPCODE();
3781 : }
3782 :
3783 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3784 0 : {
3785 0 : zend_op *opline = EX(opline);
3786 :
3787 :
3788 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
3789 : &opline->op1.u.constant,
3790 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3791 :
3792 :
3793 0 : ZEND_VM_NEXT_OPCODE();
3794 : }
3795 :
3796 : static int ZEND_BW_OR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3797 0 : {
3798 0 : zend_op *opline = EX(opline);
3799 :
3800 :
3801 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
3802 : &opline->op1.u.constant,
3803 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3804 :
3805 :
3806 0 : ZEND_VM_NEXT_OPCODE();
3807 : }
3808 :
3809 : static int ZEND_BW_AND_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3810 0 : {
3811 0 : zend_op *opline = EX(opline);
3812 :
3813 :
3814 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
3815 : &opline->op1.u.constant,
3816 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3817 :
3818 :
3819 0 : ZEND_VM_NEXT_OPCODE();
3820 : }
3821 :
3822 : static int ZEND_BW_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3823 0 : {
3824 0 : zend_op *opline = EX(opline);
3825 :
3826 :
3827 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
3828 : &opline->op1.u.constant,
3829 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3830 :
3831 :
3832 0 : ZEND_VM_NEXT_OPCODE();
3833 : }
3834 :
3835 : static int ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3836 0 : {
3837 0 : zend_op *opline = EX(opline);
3838 :
3839 :
3840 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
3841 : &opline->op1.u.constant,
3842 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3843 :
3844 :
3845 0 : ZEND_VM_NEXT_OPCODE();
3846 : }
3847 :
3848 : static int ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3849 0 : {
3850 0 : zend_op *opline = EX(opline);
3851 0 : int switch_expr_is_overloaded=0;
3852 :
3853 :
3854 : if (IS_CONST==IS_VAR) {
3855 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
3856 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
3857 : } else {
3858 : switch_expr_is_overloaded = 1;
3859 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
3860 : }
3861 : }
3862 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
3863 : &opline->op1.u.constant,
3864 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
3865 :
3866 0 : if (switch_expr_is_overloaded) {
3867 : /* We only free op1 if this is a string offset,
3868 : * Since if it is a TMP_VAR, it'll be reused by
3869 : * other CASE opcodes (whereas string offsets
3870 : * are allocated at each get_zval_ptr())
3871 : */
3872 :
3873 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
3874 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
3875 : }
3876 0 : ZEND_VM_NEXT_OPCODE();
3877 : }
3878 :
3879 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3880 0 : {
3881 0 : zend_op *opline = EX(opline);
3882 :
3883 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
3884 : zval *expr_ptr;
3885 0 : zval *offset=_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
3886 :
3887 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
3888 : zval **expr_ptr_ptr = NULL;
3889 :
3890 : if (opline->extended_value) {
3891 : expr_ptr_ptr=NULL;
3892 : expr_ptr = *expr_ptr_ptr;
3893 : } else {
3894 : expr_ptr=&opline->op1.u.constant;
3895 : }
3896 : #else
3897 0 : expr_ptr=&opline->op1.u.constant;
3898 : #endif
3899 :
3900 : if (0) { /* temporary variable */
3901 : zval *new_expr;
3902 :
3903 : ALLOC_ZVAL(new_expr);
3904 : INIT_PZVAL_COPY(new_expr, expr_ptr);
3905 : expr_ptr = new_expr;
3906 : } else {
3907 : #if 0 || IS_CONST == IS_VAR || IS_CONST == IS_CV
3908 : if (opline->extended_value) {
3909 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
3910 : expr_ptr = *expr_ptr_ptr;
3911 : expr_ptr->refcount++;
3912 : } else
3913 : #endif
3914 0 : if (PZVAL_IS_REF(expr_ptr)) {
3915 : zval *new_expr;
3916 :
3917 0 : ALLOC_ZVAL(new_expr);
3918 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
3919 0 : expr_ptr = new_expr;
3920 0 : zendi_zval_copy_ctor(*expr_ptr);
3921 : } else {
3922 0 : expr_ptr->refcount++;
3923 : }
3924 : }
3925 0 : if (offset) {
3926 0 : switch (Z_TYPE_P(offset)) {
3927 : case IS_DOUBLE:
3928 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
3929 0 : break;
3930 : case IS_LONG:
3931 : case IS_BOOL:
3932 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
3933 0 : break;
3934 : case IS_STRING:
3935 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
3936 0 : break;
3937 : case IS_NULL:
3938 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
3939 0 : break;
3940 : default:
3941 0 : zend_error(E_WARNING, "Illegal offset type");
3942 0 : zval_ptr_dtor(&expr_ptr);
3943 : /* do nothing */
3944 : break;
3945 : }
3946 :
3947 : } else {
3948 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
3949 : }
3950 0 : if (opline->extended_value) {
3951 :
3952 : } else {
3953 :
3954 : }
3955 0 : ZEND_VM_NEXT_OPCODE();
3956 : }
3957 :
3958 : static int ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3959 0 : {
3960 0 : zend_op *opline = EX(opline);
3961 :
3962 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
3963 : if (IS_CONST == IS_UNUSED) {
3964 : ZEND_VM_NEXT_OPCODE();
3965 : #if 0 || IS_CONST != IS_UNUSED
3966 : } else {
3967 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
3968 : #endif
3969 : }
3970 : }
3971 :
3972 : static int ZEND_BW_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3973 0 : {
3974 0 : zend_op *opline = EX(opline);
3975 : zend_free_op free_op1;
3976 :
3977 0 : bitwise_not_function(&EX_T(opline->result.u.var).tmp_var,
3978 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC) TSRMLS_CC);
3979 0 : zval_dtor(free_op1.var);
3980 0 : ZEND_VM_NEXT_OPCODE();
3981 : }
3982 :
3983 : static int ZEND_BOOL_NOT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3984 804 : {
3985 804 : zend_op *opline = EX(opline);
3986 : zend_free_op free_op1;
3987 :
3988 804 : boolean_not_function(&EX_T(opline->result.u.var).tmp_var,
3989 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC) TSRMLS_CC);
3990 804 : zval_dtor(free_op1.var);
3991 804 : ZEND_VM_NEXT_OPCODE();
3992 : }
3993 :
3994 : static int ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
3995 222 : {
3996 222 : zend_op *opline = EX(opline);
3997 : zend_free_op free_op1;
3998 : zval z_copy;
3999 222 : zval *z = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4000 :
4001 222 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL &&
4002 : zend_std_cast_object_tostring(z, &z_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
4003 0 : zend_print_variable(&z_copy);
4004 0 : zval_dtor(&z_copy);
4005 : } else {
4006 222 : zend_print_variable(z);
4007 : }
4008 :
4009 222 : zval_dtor(free_op1.var);
4010 222 : ZEND_VM_NEXT_OPCODE();
4011 : }
4012 :
4013 : static int ZEND_PRINT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4014 0 : {
4015 0 : zend_op *opline = EX(opline);
4016 :
4017 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1;
4018 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG;
4019 :
4020 0 : return ZEND_ECHO_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
4021 : }
4022 :
4023 : static int zend_fetch_var_address_helper_SPEC_TMP(int type, ZEND_OPCODE_HANDLER_ARGS)
4024 0 : {
4025 0 : zend_op *opline = EX(opline);
4026 : zend_free_op free_op1;
4027 0 : zval *varname = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4028 : zval **retval;
4029 : zval tmp_varname;
4030 : HashTable *target_symbol_table;
4031 :
4032 0 : if (Z_TYPE_P(varname) != IS_STRING) {
4033 0 : tmp_varname = *varname;
4034 0 : zval_copy_ctor(&tmp_varname);
4035 0 : convert_to_string(&tmp_varname);
4036 0 : varname = &tmp_varname;
4037 : }
4038 :
4039 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
4040 0 : retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
4041 : } else {
4042 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
4043 : /*
4044 : if (!target_symbol_table) {
4045 : ZEND_VM_NEXT_OPCODE();
4046 : }
4047 : */
4048 0 : if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &retval) == FAILURE) {
4049 0 : switch (type) {
4050 : case BP_VAR_R:
4051 : case BP_VAR_UNSET:
4052 0 : zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
4053 : /* break missing intentionally */
4054 : case BP_VAR_IS:
4055 0 : retval = &EG(uninitialized_zval_ptr);
4056 0 : break;
4057 : case BP_VAR_RW:
4058 0 : zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
4059 : /* break missing intentionally */
4060 : case BP_VAR_W: {
4061 0 : zval *new_zval = &EG(uninitialized_zval);
4062 :
4063 0 : new_zval->refcount++;
4064 0 : zend_hash_update(target_symbol_table, varname->value.str.val, varname->value.str.len+1, &new_zval, sizeof(zval *), (void **) &retval);
4065 : }
4066 : break;
4067 : EMPTY_SWITCH_DEFAULT_CASE()
4068 : }
4069 : }
4070 0 : switch (opline->op2.u.EA.type) {
4071 : case ZEND_FETCH_GLOBAL:
4072 : if (IS_TMP_VAR != IS_TMP_VAR) {
4073 : zval_dtor(free_op1.var);
4074 : }
4075 0 : break;
4076 : case ZEND_FETCH_LOCAL:
4077 0 : zval_dtor(free_op1.var);
4078 0 : break;
4079 : case ZEND_FETCH_STATIC:
4080 0 : zval_update_constant(retval, (void*) 1 TSRMLS_CC);
4081 : break;
4082 : case ZEND_FETCH_GLOBAL_LOCK:
4083 : if (IS_TMP_VAR == IS_VAR && !free_op1.var) {
4084 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
4085 : }
4086 : break;
4087 : }
4088 : }
4089 :
4090 :
4091 0 : if (varname == &tmp_varname) {
4092 0 : zval_dtor(varname);
4093 : }
4094 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
4095 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
4096 0 : PZVAL_LOCK(*retval);
4097 0 : switch (type) {
4098 : case BP_VAR_R:
4099 : case BP_VAR_IS:
4100 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
4101 0 : break;
4102 : case BP_VAR_UNSET: {
4103 : zend_free_op free_res;
4104 :
4105 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
4106 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
4107 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
4108 : }
4109 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
4110 0 : FREE_OP_VAR_PTR(free_res);
4111 : break;
4112 : }
4113 : }
4114 : }
4115 0 : ZEND_VM_NEXT_OPCODE();
4116 : }
4117 :
4118 : static int ZEND_FETCH_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4119 0 : {
4120 0 : return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
4121 : }
4122 :
4123 : static int ZEND_FETCH_W_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4124 0 : {
4125 0 : return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
4126 : }
4127 :
4128 : static int ZEND_FETCH_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4129 0 : {
4130 0 : return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
4131 : }
4132 :
4133 : static int ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4134 0 : {
4135 0 : return zend_fetch_var_address_helper_SPEC_TMP(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
4136 : }
4137 :
4138 : static int ZEND_FETCH_UNSET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4139 0 : {
4140 0 : return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
4141 : }
4142 :
4143 : static int ZEND_FETCH_IS_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4144 0 : {
4145 0 : return zend_fetch_var_address_helper_SPEC_TMP(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
4146 : }
4147 :
4148 : static int ZEND_JMPZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4149 75125 : {
4150 75125 : zend_op *opline = EX(opline);
4151 : zend_free_op free_op1;
4152 75125 : int ret = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
4153 :
4154 75125 : zval_dtor(free_op1.var);
4155 75125 : if (!ret) {
4156 : #if DEBUG_ZEND>=2
4157 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
4158 : #endif
4159 50896 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
4160 : }
4161 :
4162 24229 : ZEND_VM_NEXT_OPCODE();
4163 : }
4164 :
4165 : static int ZEND_JMPNZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4166 0 : {
4167 0 : zend_op *opline = EX(opline);
4168 : zend_free_op free_op1;
4169 0 : int ret = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
4170 :
4171 0 : zval_dtor(free_op1.var);
4172 0 : if (ret) {
4173 : #if DEBUG_ZEND>=2
4174 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
4175 : #endif
4176 0 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
4177 : }
4178 :
4179 0 : ZEND_VM_NEXT_OPCODE();
4180 : }
4181 :
4182 : static int ZEND_JMPZNZ_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4183 21569 : {
4184 21569 : zend_op *opline = EX(opline);
4185 : zend_free_op free_op1;
4186 21569 : int retval = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
4187 :
4188 21569 : zval_dtor(free_op1.var);
4189 21569 : if (retval) {
4190 : #if DEBUG_ZEND>=2
4191 : printf("Conditional jmp on true to %d\n", opline->extended_value);
4192 : #endif
4193 15788 : ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]);
4194 : } else {
4195 : #if DEBUG_ZEND>=2
4196 : printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num);
4197 : #endif
4198 5781 : ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
4199 : }
4200 : }
4201 :
4202 : static int ZEND_JMPZ_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4203 47302 : {
4204 47302 : zend_op *opline = EX(opline);
4205 : zend_free_op free_op1;
4206 47302 : int retval = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
4207 :
4208 47302 : zval_dtor(free_op1.var);
4209 47302 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval;
4210 47302 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
4211 47302 : if (!retval) {
4212 : #if DEBUG_ZEND>=2
4213 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
4214 : #endif
4215 1027 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
4216 : }
4217 46275 : ZEND_VM_NEXT_OPCODE();
4218 : }
4219 :
4220 : static int ZEND_JMPNZ_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4221 982 : {
4222 982 : zend_op *opline = EX(opline);
4223 : zend_free_op free_op1;
4224 982 : int retval = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
4225 :
4226 982 : zval_dtor(free_op1.var);
4227 982 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval;
4228 982 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
4229 982 : if (retval) {
4230 : #if DEBUG_ZEND>=2
4231 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
4232 : #endif
4233 304 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
4234 : }
4235 678 : ZEND_VM_NEXT_OPCODE();
4236 : }
4237 :
4238 : static int ZEND_FREE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4239 28261 : {
4240 28261 : zendi_zval_dtor(EX_T(EX(opline)->op1.u.var).tmp_var);
4241 28261 : ZEND_VM_NEXT_OPCODE();
4242 : }
4243 :
4244 : static int ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4245 4 : {
4246 4 : zend_op *opline = EX(opline);
4247 : zval *retval_ptr;
4248 : zval **retval_ptr_ptr;
4249 : zend_free_op free_op1;
4250 :
4251 4 : if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) {
4252 :
4253 : if (IS_TMP_VAR == IS_CONST || IS_TMP_VAR == IS_TMP_VAR) {
4254 : /* Not supposed to happen, but we'll allow it */
4255 0 : zend_error(E_NOTICE, "Only variable references should be returned by reference");
4256 0 : goto return_by_value;
4257 : }
4258 :
4259 : retval_ptr_ptr = NULL;
4260 :
4261 : if (!retval_ptr_ptr) {
4262 : zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
4263 : }
4264 :
4265 : if (IS_TMP_VAR == IS_VAR && !(*retval_ptr_ptr)->is_ref) {
4266 : if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
4267 : EX_T(opline->op1.u.var).var.fcall_returned_reference) {
4268 : } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) {
4269 : if (IS_TMP_VAR == IS_VAR && !1) {
4270 : PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
4271 : }
4272 : zend_error(E_NOTICE, "Only variable references should be returned by reference");
4273 : goto return_by_value;
4274 : }
4275 : }
4276 :
4277 : SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
4278 : (*retval_ptr_ptr)->refcount++;
4279 :
4280 : (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr);
4281 : } else {
4282 4 : return_by_value:
4283 :
4284 4 : retval_ptr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4285 :
4286 4 : if (EG(ze1_compatibility_mode) && Z_TYPE_P(retval_ptr) == IS_OBJECT) {
4287 : zval *ret;
4288 : char *class_name;
4289 : zend_uint class_name_len;
4290 : int dup;
4291 :
4292 0 : ALLOC_ZVAL(ret);
4293 0 : INIT_PZVAL_COPY(ret, retval_ptr);
4294 0 : dup = zend_get_object_classname(retval_ptr, &class_name, &class_name_len TSRMLS_CC);
4295 0 : if (Z_OBJ_HT_P(retval_ptr)->clone_obj == NULL) {
4296 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", class_name);
4297 : }
4298 0 : zend_error(E_STRICT, "Implicit cloning object of class '%s' because of 'zend.ze1_compatibility_mode'", class_name);
4299 0 : ret->value.obj = Z_OBJ_HT_P(retval_ptr)->clone_obj(retval_ptr TSRMLS_CC);
4300 0 : *EG(return_value_ptr_ptr) = ret;
4301 0 : if (!dup) {
4302 0 : efree(class_name);
4303 : }
4304 : } else if (!1) { /* Not a temp var */
4305 : if (EG(active_op_array)->return_reference == ZEND_RETURN_REF ||
4306 : (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) {
4307 : zval *ret;
4308 :
4309 : ALLOC_ZVAL(ret);
4310 : INIT_PZVAL_COPY(ret, retval_ptr);
4311 : zval_copy_ctor(ret);
4312 : *EG(return_value_ptr_ptr) = ret;
4313 : } else {
4314 : *EG(return_value_ptr_ptr) = retval_ptr;
4315 : retval_ptr->refcount++;
4316 : }
4317 : } else {
4318 : zval *ret;
4319 :
4320 4 : ALLOC_ZVAL(ret);
4321 4 : INIT_PZVAL_COPY(ret, retval_ptr);
4322 4 : *EG(return_value_ptr_ptr) = ret;
4323 : }
4324 : }
4325 :
4326 4 : ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
4327 : }
4328 :
4329 : static int ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4330 0 : {
4331 0 : zend_op *opline = EX(opline);
4332 : zval *value;
4333 : zval *exception;
4334 : zend_free_op free_op1;
4335 :
4336 0 : value = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4337 :
4338 0 : if (Z_TYPE_P(value) != IS_OBJECT) {
4339 0 : zend_error_noreturn(E_ERROR, "Can only throw objects");
4340 : }
4341 : /* Not sure if a complete copy is what we want here */
4342 0 : ALLOC_ZVAL(exception);
4343 0 : INIT_PZVAL_COPY(exception, value);
4344 : if (!1) {
4345 : zval_copy_ctor(exception);
4346 : }
4347 :
4348 0 : zend_throw_exception_object(exception TSRMLS_CC);
4349 :
4350 0 : ZEND_VM_NEXT_OPCODE();
4351 : }
4352 :
4353 : static int ZEND_SEND_VAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4354 22880 : {
4355 22880 : zend_op *opline = EX(opline);
4356 22880 : if (opline->extended_value==ZEND_DO_FCALL_BY_NAME
4357 : && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
4358 0 : zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num);
4359 : }
4360 : {
4361 : zval *valptr;
4362 : zval *value;
4363 : zend_free_op free_op1;
4364 :
4365 22880 : value = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4366 :
4367 22880 : ALLOC_ZVAL(valptr);
4368 22880 : INIT_PZVAL_COPY(valptr, value);
4369 : if (!1) {
4370 : zval_copy_ctor(valptr);
4371 : }
4372 22880 : zend_ptr_stack_push(&EG(argument_stack), valptr);
4373 :
4374 : }
4375 22880 : ZEND_VM_NEXT_OPCODE();
4376 : }
4377 :
4378 : static int ZEND_BOOL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4379 32614 : {
4380 32614 : zend_op *opline = EX(opline);
4381 : zend_free_op free_op1;
4382 :
4383 : /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
4384 32614 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
4385 32614 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
4386 32614 : zval_dtor(free_op1.var);
4387 :
4388 32614 : ZEND_VM_NEXT_OPCODE();
4389 : }
4390 :
4391 : static int ZEND_SWITCH_FREE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4392 0 : {
4393 0 : zend_switch_free(EX(opline), EX(Ts) TSRMLS_CC);
4394 0 : ZEND_VM_NEXT_OPCODE();
4395 : }
4396 :
4397 : static int ZEND_CLONE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4398 0 : {
4399 0 : zend_op *opline = EX(opline);
4400 : zend_free_op free_op1;
4401 0 : zval *obj = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4402 : zend_class_entry *ce;
4403 : zend_function *clone;
4404 : zend_object_clone_obj_t clone_call;
4405 :
4406 0 : if (!obj || Z_TYPE_P(obj) != IS_OBJECT) {
4407 0 : zend_error(E_WARNING, "__clone method called on non-object");
4408 0 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
4409 0 : EX_T(opline->result.u.var).var.ptr->refcount++;
4410 :
4411 0 : ZEND_VM_NEXT_OPCODE();
4412 : }
4413 :
4414 0 : ce = Z_OBJCE_P(obj);
4415 0 : clone = ce ? ce->clone : NULL;
4416 0 : clone_call = Z_OBJ_HT_P(obj)->clone_obj;
4417 0 : if (!clone_call) {
4418 0 : if (ce) {
4419 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
4420 : } else {
4421 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
4422 : }
4423 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
4424 : EX_T(opline->result.u.var).var.ptr->refcount++;
4425 : }
4426 :
4427 0 : if (ce && clone) {
4428 0 : if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
4429 : /* Ensure that if we're calling a private function, we're allowed to do so.
4430 : */
4431 0 : if (ce != EG(scope)) {
4432 0 : zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
4433 : }
4434 0 : } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
4435 : /* Ensure that if we're calling a protected function, we're allowed to do so.
4436 : */
4437 0 : if (!zend_check_protected(clone->common.scope, EG(scope))) {
4438 0 : zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
4439 : }
4440 : }
4441 : }
4442 :
4443 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
4444 0 : if (!EG(exception)) {
4445 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
4446 0 : Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC);
4447 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT;
4448 0 : EX_T(opline->result.u.var).var.ptr->refcount=1;
4449 0 : EX_T(opline->result.u.var).var.ptr->is_ref=1;
4450 0 : if (!RETURN_VALUE_USED(opline) || EG(exception)) {
4451 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
4452 : }
4453 : }
4454 :
4455 0 : ZEND_VM_NEXT_OPCODE();
4456 : }
4457 :
4458 : static int ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4459 56 : {
4460 56 : zend_op *opline = EX(opline);
4461 : zend_free_op free_op1;
4462 56 : zval *expr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4463 56 : zval *result = &EX_T(opline->result.u.var).tmp_var;
4464 :
4465 56 : *result = *expr;
4466 : if (!1) {
4467 : zendi_zval_copy_ctor(*result);
4468 : }
4469 56 : switch (opline->extended_value) {
4470 : case IS_NULL:
4471 0 : convert_to_null(result);
4472 0 : break;
4473 : case IS_BOOL:
4474 0 : convert_to_boolean(result);
4475 0 : break;
4476 : case IS_LONG:
4477 0 : convert_to_long(result);
4478 0 : break;
4479 : case IS_DOUBLE:
4480 54 : convert_to_double(result);
4481 54 : break;
4482 : case IS_STRING: {
4483 : zval var_copy;
4484 : int use_copy;
4485 :
4486 0 : zend_make_printable_zval(result, &var_copy, &use_copy);
4487 0 : if (use_copy) {
4488 0 : zval_dtor(result);
4489 0 : *result = var_copy;
4490 : }
4491 0 : break;
4492 : }
4493 : case IS_ARRAY:
4494 0 : convert_to_array(result);
4495 0 : break;
4496 : case IS_OBJECT:
4497 2 : convert_to_object(result);
4498 : break;
4499 : }
4500 :
4501 56 : ZEND_VM_NEXT_OPCODE();
4502 : }
4503 :
4504 : static int ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4505 0 : {
4506 0 : zend_op *opline = EX(opline);
4507 0 : zend_op_array *new_op_array=NULL;
4508 0 : zval **original_return_value = EG(return_value_ptr_ptr);
4509 : int return_value_used;
4510 : zend_free_op free_op1;
4511 0 : zval *inc_filename = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4512 : zval tmp_inc_filename;
4513 0 : zend_bool failure_retval=0;
4514 :
4515 0 : if (inc_filename->type!=IS_STRING) {
4516 0 : tmp_inc_filename = *inc_filename;
4517 0 : zval_copy_ctor(&tmp_inc_filename);
4518 0 : convert_to_string(&tmp_inc_filename);
4519 0 : inc_filename = &tmp_inc_filename;
4520 : }
4521 :
4522 0 : return_value_used = RETURN_VALUE_USED(opline);
4523 :
4524 0 : switch (Z_LVAL(opline->op2.u.constant)) {
4525 : case ZEND_INCLUDE_ONCE:
4526 : case ZEND_REQUIRE_ONCE: {
4527 : zend_file_handle file_handle;
4528 : char cwd[MAXPATHLEN];
4529 : cwd_state state;
4530 :
4531 0 : if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
4532 0 : cwd[0] = '\0';
4533 0 : } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
4534 0 : cwd[0] = '\0';
4535 : }
4536 :
4537 0 : state.cwd_length = strlen(cwd);
4538 0 : state.cwd = zend_strndup(cwd, state.cwd_length);
4539 :
4540 0 : failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
4541 : zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1));
4542 :
4543 0 : free(state.cwd);
4544 :
4545 0 : if (failure_retval) {
4546 : /* do nothing */
4547 0 : } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
4548 :
4549 0 : if (!file_handle.opened_path) {
4550 0 : file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
4551 : }
4552 :
4553 0 : if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
4554 0 : new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
4555 0 : zend_destroy_file_handle(&file_handle TSRMLS_CC);
4556 : } else {
4557 0 : zend_file_handle_dtor(&file_handle);
4558 0 : failure_retval=1;
4559 : }
4560 : } else {
4561 0 : if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
4562 0 : zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
4563 : } else {
4564 0 : zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
4565 : }
4566 : }
4567 : }
4568 0 : break;
4569 : case ZEND_INCLUDE:
4570 : case ZEND_REQUIRE:
4571 0 : new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
4572 0 : break;
4573 : case ZEND_EVAL: {
4574 0 : char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
4575 :
4576 0 : new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
4577 0 : efree(eval_desc);
4578 : }
4579 : break;
4580 : EMPTY_SWITCH_DEFAULT_CASE()
4581 : }
4582 0 : if (inc_filename==&tmp_inc_filename) {
4583 0 : zval_dtor(&tmp_inc_filename);
4584 : }
4585 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
4586 0 : if (new_op_array) {
4587 : zval *saved_object;
4588 : zend_function *saved_function;
4589 :
4590 0 : EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr;
4591 0 : EG(active_op_array) = new_op_array;
4592 0 : EX_T(opline->result.u.var).var.ptr = NULL;
4593 :
4594 0 : saved_object = EX(object);
4595 0 : saved_function = EX(function_state).function;
4596 :
4597 0 : EX(function_state).function = (zend_function *) new_op_array;
4598 0 : EX(object) = NULL;
4599 :
4600 0 : zend_execute(new_op_array TSRMLS_CC);
4601 :
4602 0 : EX(function_state).function = saved_function;
4603 0 : EX(object) = saved_object;
4604 :
4605 0 : if (!return_value_used) {
4606 0 : if (EX_T(opline->result.u.var).var.ptr) {
4607 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
4608 : }
4609 : } else { /* return value is used */
4610 0 : if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */
4611 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
4612 0 : INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
4613 0 : Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1;
4614 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL;
4615 : }
4616 : }
4617 :
4618 0 : EG(opline_ptr) = &EX(opline);
4619 0 : EG(active_op_array) = EX(op_array);
4620 0 : EG(function_state_ptr) = &EX(function_state);
4621 0 : destroy_op_array(new_op_array TSRMLS_CC);
4622 0 : efree(new_op_array);
4623 0 : if (EG(exception)) {
4624 0 : zend_throw_exception_internal(NULL TSRMLS_CC);
4625 : }
4626 : } else {
4627 0 : if (return_value_used) {
4628 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
4629 0 : INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr);
4630 0 : Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval;
4631 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL;
4632 : }
4633 : }
4634 0 : zval_dtor(free_op1.var);
4635 0 : EG(return_value_ptr_ptr) = original_return_value;
4636 0 : ZEND_VM_NEXT_OPCODE();
4637 : }
4638 :
4639 : static int ZEND_UNSET_VAR_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4640 0 : {
4641 0 : zend_op *opline = EX(opline);
4642 : zval tmp, *varname;
4643 : HashTable *target_symbol_table;
4644 : zend_free_op free_op1;
4645 :
4646 0 : varname = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4647 :
4648 0 : if (Z_TYPE_P(varname) != IS_STRING) {
4649 0 : tmp = *varname;
4650 0 : zval_copy_ctor(&tmp);
4651 0 : convert_to_string(&tmp);
4652 0 : varname = &tmp;
4653 : } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
4654 : varname->refcount++;
4655 : }
4656 :
4657 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
4658 0 : zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname) TSRMLS_CC);
4659 : } else {
4660 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC);
4661 0 : if (zend_hash_del(target_symbol_table, varname->value.str.val, varname->value.str.len+1) == SUCCESS) {
4662 0 : zend_execute_data *ex = execute_data;
4663 0 : ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
4664 :
4665 : do {
4666 : int i;
4667 :
4668 0 : if (ex->op_array) {
4669 0 : for (i = 0; i < ex->op_array->last_var; i++) {
4670 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
4671 : ex->op_array->vars[i].name_len == varname->value.str.len &&
4672 : !memcmp(ex->op_array->vars[i].name, varname->value.str.val, varname->value.str.len)) {
4673 0 : ex->CVs[i] = NULL;
4674 0 : break;
4675 : }
4676 : }
4677 : }
4678 0 : ex = ex->prev_execute_data;
4679 0 : } while (ex && ex->symbol_table == target_symbol_table);
4680 : }
4681 : }
4682 :
4683 0 : if (varname == &tmp) {
4684 0 : zval_dtor(&tmp);
4685 : } else if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
4686 : zval_ptr_dtor(&varname);
4687 : }
4688 0 : zval_dtor(free_op1.var);
4689 0 : ZEND_VM_NEXT_OPCODE();
4690 : }
4691 :
4692 : static int ZEND_FE_RESET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4693 3 : {
4694 3 : zend_op *opline = EX(opline);
4695 : zend_free_op free_op1;
4696 : zval *array_ptr, **array_ptr_ptr;
4697 : HashTable *fe_ht;
4698 3 : zend_object_iterator *iter = NULL;
4699 3 : zend_class_entry *ce = NULL;
4700 3 : zend_bool is_empty = 0;
4701 :
4702 3 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
4703 0 : array_ptr_ptr = NULL;
4704 0 : if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) {
4705 0 : ALLOC_INIT_ZVAL(array_ptr);
4706 0 : } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
4707 0 : if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) {
4708 0 : zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class");
4709 0 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
4710 : }
4711 :
4712 0 : ce = Z_OBJCE_PP(array_ptr_ptr);
4713 0 : if (!ce || ce->get_iterator == NULL) {
4714 0 : SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
4715 0 : (*array_ptr_ptr)->refcount++;
4716 : }
4717 0 : array_ptr = *array_ptr_ptr;
4718 : } else {
4719 0 : if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) {
4720 0 : SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
4721 0 : if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
4722 0 : (*array_ptr_ptr)->is_ref = 1;
4723 : }
4724 : }
4725 0 : array_ptr = *array_ptr_ptr;
4726 0 : array_ptr->refcount++;
4727 : }
4728 : } else {
4729 3 : array_ptr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4730 : if (1) { /* IS_TMP_VAR */
4731 : zval *tmp;
4732 :
4733 3 : ALLOC_ZVAL(tmp);
4734 3 : INIT_PZVAL_COPY(tmp, array_ptr);
4735 3 : array_ptr = tmp;
4736 : } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
4737 : ce = Z_OBJCE_P(array_ptr);
4738 : if (!ce || !ce->get_iterator) {
4739 : array_ptr->refcount++;
4740 : }
4741 : } else {
4742 : if (IS_TMP_VAR == IS_VAR &&
4743 : free_op1.var == NULL &&
4744 : !array_ptr->is_ref &&
4745 : array_ptr->refcount > 1) {
4746 : /* non-separated return value from function */
4747 : zval *tmp;
4748 :
4749 : ALLOC_ZVAL(tmp);
4750 : INIT_PZVAL_COPY(tmp, array_ptr);
4751 : zval_copy_ctor(tmp);
4752 : array_ptr = tmp;
4753 : } else {
4754 : array_ptr->refcount++;
4755 : }
4756 : }
4757 : }
4758 :
4759 : if (IS_TMP_VAR != IS_TMP_VAR && ce && ce->get_iterator) {
4760 : iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
4761 :
4762 : if (iter && !EG(exception)) {
4763 : array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
4764 : } else {
4765 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
4766 :
4767 : } else {
4768 :
4769 : }
4770 : if (!EG(exception)) {
4771 : zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
4772 : }
4773 : zend_throw_exception_internal(NULL TSRMLS_CC);
4774 : ZEND_VM_NEXT_OPCODE();
4775 : }
4776 : }
4777 :
4778 3 : PZVAL_LOCK(array_ptr);
4779 3 : EX_T(opline->result.u.var).var.ptr = array_ptr;
4780 3 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
4781 :
4782 3 : if (iter) {
4783 0 : iter->index = 0;
4784 0 : if (iter->funcs->rewind) {
4785 0 : iter->funcs->rewind(iter TSRMLS_CC);
4786 0 : if (EG(exception)) {
4787 0 : array_ptr->refcount--;
4788 0 : zval_ptr_dtor(&array_ptr);
4789 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
4790 :
4791 : } else {
4792 :
4793 : }
4794 0 : ZEND_VM_NEXT_OPCODE();
4795 : }
4796 : }
4797 0 : is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS;
4798 0 : if (EG(exception)) {
4799 0 : array_ptr->refcount--;
4800 0 : zval_ptr_dtor(&array_ptr);
4801 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
4802 :
4803 : } else {
4804 :
4805 : }
4806 0 : ZEND_VM_NEXT_OPCODE();
4807 : }
4808 0 : iter->index = -1; /* will be set to 0 before using next handler */
4809 3 : } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
4810 3 : zend_hash_internal_pointer_reset(fe_ht);
4811 3 : if (ce) {
4812 0 : zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC);
4813 0 : while (zend_hash_has_more_elements(fe_ht) == SUCCESS) {
4814 : char *str_key;
4815 : uint str_key_len;
4816 : ulong int_key;
4817 : zend_uchar key_type;
4818 :
4819 0 : key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
4820 0 : if (key_type != HASH_KEY_NON_EXISTANT &&
4821 : (key_type == HASH_KEY_IS_LONG ||
4822 : zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) {
4823 : break;
4824 : }
4825 0 : zend_hash_move_forward(fe_ht);
4826 : }
4827 : }
4828 3 : is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
4829 3 : zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos);
4830 : } else {
4831 0 : zend_error(E_WARNING, "Invalid argument supplied for foreach()");
4832 0 : is_empty = 1;
4833 : }
4834 :
4835 3 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
4836 :
4837 : } else {
4838 :
4839 : }
4840 3 : if (is_empty) {
4841 2 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
4842 : } else {
4843 1 : ZEND_VM_NEXT_OPCODE();
4844 : }
4845 : }
4846 :
4847 : static int ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4848 0 : {
4849 0 : zend_op *opline = EX(opline);
4850 : zend_free_op free_op1;
4851 0 : zval tmp, *varname = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4852 : zval **value;
4853 0 : zend_bool isset = 1;
4854 : HashTable *target_symbol_table;
4855 :
4856 0 : if (Z_TYPE_P(varname) != IS_STRING) {
4857 0 : tmp = *varname;
4858 0 : zval_copy_ctor(&tmp);
4859 0 : convert_to_string(&tmp);
4860 0 : varname = &tmp;
4861 : }
4862 :
4863 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
4864 0 : value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1 TSRMLS_CC);
4865 0 : if (!value) {
4866 0 : isset = 0;
4867 : }
4868 : } else {
4869 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC);
4870 0 : if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
4871 0 : isset = 0;
4872 : }
4873 : }
4874 :
4875 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
4876 :
4877 0 : switch (opline->extended_value) {
4878 : case ZEND_ISSET:
4879 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
4880 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
4881 : } else {
4882 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset;
4883 : }
4884 0 : break;
4885 : case ZEND_ISEMPTY:
4886 0 : if (!isset || !i_zend_is_true(*value)) {
4887 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1;
4888 : } else {
4889 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
4890 : }
4891 : break;
4892 : }
4893 :
4894 0 : if (varname == &tmp) {
4895 0 : zval_dtor(&tmp);
4896 : }
4897 0 : zval_dtor(free_op1.var);
4898 :
4899 0 : ZEND_VM_NEXT_OPCODE();
4900 : }
4901 :
4902 : static int ZEND_EXIT_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4903 0 : {
4904 : #if 0 || (IS_TMP_VAR != IS_UNUSED)
4905 0 : zend_op *opline = EX(opline);
4906 : if (IS_TMP_VAR != IS_UNUSED) {
4907 : zend_free_op free_op1;
4908 0 : zval *ptr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4909 :
4910 0 : if (Z_TYPE_P(ptr) == IS_LONG) {
4911 0 : EG(exit_status) = Z_LVAL_P(ptr);
4912 : } else {
4913 0 : zend_print_variable(ptr);
4914 : }
4915 0 : zval_dtor(free_op1.var);
4916 : }
4917 : #endif
4918 0 : zend_bailout();
4919 0 : ZEND_VM_NEXT_OPCODE();
4920 : }
4921 :
4922 : static int ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4923 4660 : {
4924 4660 : zend_op *opline = EX(opline);
4925 : zval restored_error_reporting;
4926 :
4927 4660 : if (!EG(error_reporting) && Z_LVAL(EX_T(opline->op1.u.var).tmp_var) != 0) {
4928 4660 : Z_TYPE(restored_error_reporting) = IS_LONG;
4929 4660 : Z_LVAL(restored_error_reporting) = Z_LVAL(EX_T(opline->op1.u.var).tmp_var);
4930 4660 : convert_to_string(&restored_error_reporting);
4931 4660 : zend_alter_ini_entry("error_reporting", sizeof("error_reporting"), Z_STRVAL(restored_error_reporting), Z_STRLEN(restored_error_reporting), ZEND_INI_USER, ZEND_INI_STAGE_RUNTIME);
4932 4660 : zendi_zval_dtor(restored_error_reporting);
4933 : }
4934 4660 : if (EX(old_error_reporting) == &EX_T(opline->op1.u.var).tmp_var) {
4935 4660 : EX(old_error_reporting) = NULL;
4936 : }
4937 4660 : ZEND_VM_NEXT_OPCODE();
4938 : }
4939 :
4940 : static int ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4941 49 : {
4942 49 : zend_op *opline = EX(opline);
4943 : zend_free_op free_op1;
4944 49 : zval *value = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4945 :
4946 49 : EX_T(opline->result.u.var).tmp_var = *value;
4947 : if (!1) {
4948 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
4949 : }
4950 :
4951 49 : ZEND_VM_NEXT_OPCODE();
4952 : }
4953 :
4954 : static int ZEND_INSTANCEOF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4955 0 : {
4956 0 : zend_op *opline = EX(opline);
4957 : zend_free_op free_op1;
4958 0 : zval *expr = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
4959 : zend_bool result;
4960 :
4961 0 : if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
4962 0 : result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.u.var).class_entry TSRMLS_CC);
4963 : } else {
4964 0 : result = 0;
4965 : }
4966 0 : ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var, result);
4967 0 : zval_dtor(free_op1.var);
4968 0 : ZEND_VM_NEXT_OPCODE();
4969 : }
4970 :
4971 : static int ZEND_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4972 35 : {
4973 35 : zend_op *opline = EX(opline);
4974 : zend_free_op free_op1;
4975 :
4976 35 : add_function(&EX_T(opline->result.u.var).tmp_var,
4977 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
4978 : &opline->op2.u.constant TSRMLS_CC);
4979 35 : zval_dtor(free_op1.var);
4980 :
4981 35 : ZEND_VM_NEXT_OPCODE();
4982 : }
4983 :
4984 : static int ZEND_SUB_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4985 0 : {
4986 0 : zend_op *opline = EX(opline);
4987 : zend_free_op free_op1;
4988 :
4989 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
4990 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
4991 : &opline->op2.u.constant TSRMLS_CC);
4992 0 : zval_dtor(free_op1.var);
4993 :
4994 0 : ZEND_VM_NEXT_OPCODE();
4995 : }
4996 :
4997 : static int ZEND_MUL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
4998 0 : {
4999 0 : zend_op *opline = EX(opline);
5000 : zend_free_op free_op1;
5001 :
5002 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
5003 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5004 : &opline->op2.u.constant TSRMLS_CC);
5005 0 : zval_dtor(free_op1.var);
5006 :
5007 0 : ZEND_VM_NEXT_OPCODE();
5008 : }
5009 :
5010 : static int ZEND_DIV_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5011 0 : {
5012 0 : zend_op *opline = EX(opline);
5013 : zend_free_op free_op1;
5014 :
5015 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
5016 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5017 : &opline->op2.u.constant TSRMLS_CC);
5018 0 : zval_dtor(free_op1.var);
5019 :
5020 0 : ZEND_VM_NEXT_OPCODE();
5021 : }
5022 :
5023 : static int ZEND_MOD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5024 0 : {
5025 0 : zend_op *opline = EX(opline);
5026 : zend_free_op free_op1;
5027 :
5028 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
5029 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5030 : &opline->op2.u.constant TSRMLS_CC);
5031 0 : zval_dtor(free_op1.var);
5032 :
5033 0 : ZEND_VM_NEXT_OPCODE();
5034 : }
5035 :
5036 : static int ZEND_SL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5037 0 : {
5038 0 : zend_op *opline = EX(opline);
5039 : zend_free_op free_op1;
5040 :
5041 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
5042 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5043 : &opline->op2.u.constant TSRMLS_CC);
5044 0 : zval_dtor(free_op1.var);
5045 :
5046 0 : ZEND_VM_NEXT_OPCODE();
5047 : }
5048 :
5049 : static int ZEND_SR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5050 0 : {
5051 0 : zend_op *opline = EX(opline);
5052 : zend_free_op free_op1;
5053 :
5054 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
5055 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5056 : &opline->op2.u.constant TSRMLS_CC);
5057 0 : zval_dtor(free_op1.var);
5058 :
5059 0 : ZEND_VM_NEXT_OPCODE();
5060 : }
5061 :
5062 : static int ZEND_CONCAT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5063 16317 : {
5064 16317 : zend_op *opline = EX(opline);
5065 : zend_free_op free_op1;
5066 :
5067 16317 : concat_function(&EX_T(opline->result.u.var).tmp_var,
5068 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5069 : &opline->op2.u.constant TSRMLS_CC);
5070 16317 : zval_dtor(free_op1.var);
5071 :
5072 16317 : ZEND_VM_NEXT_OPCODE();
5073 : }
5074 :
5075 : static int ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5076 0 : {
5077 0 : zend_op *opline = EX(opline);
5078 : zend_free_op free_op1;
5079 :
5080 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
5081 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5082 : &opline->op2.u.constant TSRMLS_CC);
5083 0 : zval_dtor(free_op1.var);
5084 :
5085 0 : ZEND_VM_NEXT_OPCODE();
5086 : }
5087 :
5088 : static int ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5089 0 : {
5090 0 : zend_op *opline = EX(opline);
5091 : zend_free_op free_op1;
5092 :
5093 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
5094 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5095 : &opline->op2.u.constant TSRMLS_CC);
5096 0 : zval_dtor(free_op1.var);
5097 :
5098 0 : ZEND_VM_NEXT_OPCODE();
5099 : }
5100 :
5101 : static int ZEND_IS_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5102 0 : {
5103 0 : zend_op *opline = EX(opline);
5104 : zend_free_op free_op1;
5105 :
5106 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
5107 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5108 : &opline->op2.u.constant TSRMLS_CC);
5109 0 : zval_dtor(free_op1.var);
5110 :
5111 0 : ZEND_VM_NEXT_OPCODE();
5112 : }
5113 :
5114 : static int ZEND_IS_NOT_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5115 220 : {
5116 220 : zend_op *opline = EX(opline);
5117 : zend_free_op free_op1;
5118 :
5119 220 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
5120 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5121 : &opline->op2.u.constant TSRMLS_CC);
5122 220 : zval_dtor(free_op1.var);
5123 :
5124 220 : ZEND_VM_NEXT_OPCODE();
5125 : }
5126 :
5127 : static int ZEND_IS_SMALLER_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5128 0 : {
5129 0 : zend_op *opline = EX(opline);
5130 : zend_free_op free_op1;
5131 :
5132 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
5133 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5134 : &opline->op2.u.constant TSRMLS_CC);
5135 0 : zval_dtor(free_op1.var);
5136 :
5137 0 : ZEND_VM_NEXT_OPCODE();
5138 : }
5139 :
5140 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5141 0 : {
5142 0 : zend_op *opline = EX(opline);
5143 : zend_free_op free_op1;
5144 :
5145 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
5146 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5147 : &opline->op2.u.constant TSRMLS_CC);
5148 0 : zval_dtor(free_op1.var);
5149 :
5150 0 : ZEND_VM_NEXT_OPCODE();
5151 : }
5152 :
5153 : static int ZEND_BW_OR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5154 0 : {
5155 0 : zend_op *opline = EX(opline);
5156 : zend_free_op free_op1;
5157 :
5158 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
5159 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5160 : &opline->op2.u.constant TSRMLS_CC);
5161 0 : zval_dtor(free_op1.var);
5162 :
5163 0 : ZEND_VM_NEXT_OPCODE();
5164 : }
5165 :
5166 : static int ZEND_BW_AND_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5167 0 : {
5168 0 : zend_op *opline = EX(opline);
5169 : zend_free_op free_op1;
5170 :
5171 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
5172 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5173 : &opline->op2.u.constant TSRMLS_CC);
5174 0 : zval_dtor(free_op1.var);
5175 :
5176 0 : ZEND_VM_NEXT_OPCODE();
5177 : }
5178 :
5179 : static int ZEND_BW_XOR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5180 0 : {
5181 0 : zend_op *opline = EX(opline);
5182 : zend_free_op free_op1;
5183 :
5184 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
5185 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5186 : &opline->op2.u.constant TSRMLS_CC);
5187 0 : zval_dtor(free_op1.var);
5188 :
5189 0 : ZEND_VM_NEXT_OPCODE();
5190 : }
5191 :
5192 : static int ZEND_BOOL_XOR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5193 0 : {
5194 0 : zend_op *opline = EX(opline);
5195 : zend_free_op free_op1;
5196 :
5197 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
5198 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5199 : &opline->op2.u.constant TSRMLS_CC);
5200 0 : zval_dtor(free_op1.var);
5201 :
5202 0 : ZEND_VM_NEXT_OPCODE();
5203 : }
5204 :
5205 : static int ZEND_FETCH_DIM_TMP_VAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5206 0 : {
5207 0 : zend_op *opline = EX(opline);
5208 : zend_free_op free_op1;
5209 0 : zval *container = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
5210 :
5211 0 : if (Z_TYPE_P(container) != IS_ARRAY) {
5212 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
5213 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
5214 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
5215 : }
5216 : } else {
5217 :
5218 0 : zval *dim = &opline->op2.u.constant;
5219 :
5220 0 : EX_T(opline->result.u.var).var.ptr_ptr = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, BP_VAR_R TSRMLS_CC);
5221 0 : SELECTIVE_PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &opline->result);
5222 :
5223 : }
5224 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
5225 0 : ZEND_VM_NEXT_OPCODE();
5226 : }
5227 :
5228 : static int ZEND_ADD_CHAR_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5229 5394 : {
5230 5394 : zend_op *opline = EX(opline);
5231 : zend_free_op free_op1;
5232 :
5233 5394 : add_char_to_string(&EX_T(opline->result.u.var).tmp_var,
5234 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5235 : &opline->op2.u.constant);
5236 : /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
5237 5394 : ZEND_VM_NEXT_OPCODE();
5238 : }
5239 :
5240 : static int ZEND_ADD_STRING_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5241 15953 : {
5242 15953 : zend_op *opline = EX(opline);
5243 : zend_free_op free_op1;
5244 :
5245 15953 : add_string_to_string(&EX_T(opline->result.u.var).tmp_var,
5246 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5247 : &opline->op2.u.constant);
5248 : /* FREE_OP is missing intentionally here - we're always working on the same temporary variable */
5249 15953 : ZEND_VM_NEXT_OPCODE();
5250 : }
5251 :
5252 : static int ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5253 0 : {
5254 0 : zend_op *opline = EX(opline);
5255 : zval *function_name;
5256 : char *function_name_strval;
5257 : int function_name_strlen;
5258 : zend_free_op free_op1;
5259 :
5260 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
5261 :
5262 0 : function_name = &opline->op2.u.constant;
5263 :
5264 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
5265 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
5266 : }
5267 :
5268 0 : function_name_strval = Z_STRVAL_P(function_name);
5269 0 : function_name_strlen = Z_STRLEN_P(function_name);
5270 :
5271 0 : EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
5272 :
5273 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
5274 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
5275 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
5276 : }
5277 :
5278 : /* First, locate the function. */
5279 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
5280 0 : if (!EX(fbc)) {
5281 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
5282 : }
5283 : } else {
5284 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
5285 : }
5286 :
5287 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
5288 0 : EX(object) = NULL;
5289 : } else {
5290 0 : if (!PZVAL_IS_REF(EX(object))) {
5291 0 : EX(object)->refcount++; /* For $this pointer */
5292 : } else {
5293 : zval *this_ptr;
5294 0 : ALLOC_ZVAL(this_ptr);
5295 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
5296 0 : zval_copy_ctor(this_ptr);
5297 0 : EX(object) = this_ptr;
5298 : }
5299 : }
5300 :
5301 :
5302 0 : ZEND_VM_NEXT_OPCODE();
5303 : }
5304 :
5305 : static int ZEND_CASE_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5306 0 : {
5307 0 : zend_op *opline = EX(opline);
5308 0 : int switch_expr_is_overloaded=0;
5309 : zend_free_op free_op1;
5310 :
5311 : if (IS_TMP_VAR==IS_VAR) {
5312 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
5313 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
5314 : } else {
5315 : switch_expr_is_overloaded = 1;
5316 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
5317 : }
5318 : }
5319 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
5320 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5321 : &opline->op2.u.constant TSRMLS_CC);
5322 :
5323 0 : if (switch_expr_is_overloaded) {
5324 : /* We only free op1 if this is a string offset,
5325 : * Since if it is a TMP_VAR, it'll be reused by
5326 : * other CASE opcodes (whereas string offsets
5327 : * are allocated at each get_zval_ptr())
5328 : */
5329 0 : zval_dtor(free_op1.var);
5330 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
5331 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
5332 : }
5333 0 : ZEND_VM_NEXT_OPCODE();
5334 : }
5335 :
5336 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5337 863 : {
5338 863 : zend_op *opline = EX(opline);
5339 : zend_free_op free_op1;
5340 863 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
5341 : zval *expr_ptr;
5342 863 : zval *offset=&opline->op2.u.constant;
5343 :
5344 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
5345 : zval **expr_ptr_ptr = NULL;
5346 :
5347 : if (opline->extended_value) {
5348 : expr_ptr_ptr=NULL;
5349 : expr_ptr = *expr_ptr_ptr;
5350 : } else {
5351 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
5352 : }
5353 : #else
5354 863 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
5355 : #endif
5356 :
5357 : if (1) { /* temporary variable */
5358 : zval *new_expr;
5359 :
5360 863 : ALLOC_ZVAL(new_expr);
5361 863 : INIT_PZVAL_COPY(new_expr, expr_ptr);
5362 863 : expr_ptr = new_expr;
5363 : } else {
5364 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
5365 : if (opline->extended_value) {
5366 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
5367 : expr_ptr = *expr_ptr_ptr;
5368 : expr_ptr->refcount++;
5369 : } else
5370 : #endif
5371 : if (PZVAL_IS_REF(expr_ptr)) {
5372 : zval *new_expr;
5373 :
5374 : ALLOC_ZVAL(new_expr);
5375 : INIT_PZVAL_COPY(new_expr, expr_ptr);
5376 : expr_ptr = new_expr;
5377 : zendi_zval_copy_ctor(*expr_ptr);
5378 : } else {
5379 : expr_ptr->refcount++;
5380 : }
5381 : }
5382 863 : if (offset) {
5383 863 : switch (Z_TYPE_P(offset)) {
5384 : case IS_DOUBLE:
5385 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
5386 0 : break;
5387 : case IS_LONG:
5388 : case IS_BOOL:
5389 648 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
5390 648 : break;
5391 : case IS_STRING:
5392 215 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
5393 215 : break;
5394 : case IS_NULL:
5395 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
5396 0 : break;
5397 : default:
5398 0 : zend_error(E_WARNING, "Illegal offset type");
5399 0 : zval_ptr_dtor(&expr_ptr);
5400 : /* do nothing */
5401 : break;
5402 : }
5403 :
5404 : } else {
5405 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
5406 : }
5407 863 : if (opline->extended_value) {
5408 :
5409 : } else {
5410 :
5411 : }
5412 863 : ZEND_VM_NEXT_OPCODE();
5413 : }
5414 :
5415 : static int ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5416 219 : {
5417 219 : zend_op *opline = EX(opline);
5418 :
5419 219 : array_init(&EX_T(opline->result.u.var).tmp_var);
5420 : if (IS_TMP_VAR == IS_UNUSED) {
5421 : ZEND_VM_NEXT_OPCODE();
5422 : #if 0 || IS_TMP_VAR != IS_UNUSED
5423 : } else {
5424 219 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
5425 : #endif
5426 : }
5427 : }
5428 :
5429 : static int ZEND_ADD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5430 0 : {
5431 0 : zend_op *opline = EX(opline);
5432 : zend_free_op free_op1, free_op2;
5433 :
5434 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
5435 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5436 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5437 0 : zval_dtor(free_op1.var);
5438 0 : zval_dtor(free_op2.var);
5439 0 : ZEND_VM_NEXT_OPCODE();
5440 : }
5441 :
5442 : static int ZEND_SUB_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5443 0 : {
5444 0 : zend_op *opline = EX(opline);
5445 : zend_free_op free_op1, free_op2;
5446 :
5447 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
5448 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5449 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5450 0 : zval_dtor(free_op1.var);
5451 0 : zval_dtor(free_op2.var);
5452 0 : ZEND_VM_NEXT_OPCODE();
5453 : }
5454 :
5455 : static int ZEND_MUL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5456 0 : {
5457 0 : zend_op *opline = EX(opline);
5458 : zend_free_op free_op1, free_op2;
5459 :
5460 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
5461 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5462 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5463 0 : zval_dtor(free_op1.var);
5464 0 : zval_dtor(free_op2.var);
5465 0 : ZEND_VM_NEXT_OPCODE();
5466 : }
5467 :
5468 : static int ZEND_DIV_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5469 0 : {
5470 0 : zend_op *opline = EX(opline);
5471 : zend_free_op free_op1, free_op2;
5472 :
5473 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
5474 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5475 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5476 0 : zval_dtor(free_op1.var);
5477 0 : zval_dtor(free_op2.var);
5478 0 : ZEND_VM_NEXT_OPCODE();
5479 : }
5480 :
5481 : static int ZEND_MOD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5482 0 : {
5483 0 : zend_op *opline = EX(opline);
5484 : zend_free_op free_op1, free_op2;
5485 :
5486 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
5487 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5488 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5489 0 : zval_dtor(free_op1.var);
5490 0 : zval_dtor(free_op2.var);
5491 0 : ZEND_VM_NEXT_OPCODE();
5492 : }
5493 :
5494 : static int ZEND_SL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5495 0 : {
5496 0 : zend_op *opline = EX(opline);
5497 : zend_free_op free_op1, free_op2;
5498 :
5499 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
5500 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5501 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5502 0 : zval_dtor(free_op1.var);
5503 0 : zval_dtor(free_op2.var);
5504 0 : ZEND_VM_NEXT_OPCODE();
5505 : }
5506 :
5507 : static int ZEND_SR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5508 0 : {
5509 0 : zend_op *opline = EX(opline);
5510 : zend_free_op free_op1, free_op2;
5511 :
5512 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
5513 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5514 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5515 0 : zval_dtor(free_op1.var);
5516 0 : zval_dtor(free_op2.var);
5517 0 : ZEND_VM_NEXT_OPCODE();
5518 : }
5519 :
5520 : static int ZEND_CONCAT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5521 6 : {
5522 6 : zend_op *opline = EX(opline);
5523 : zend_free_op free_op1, free_op2;
5524 :
5525 6 : concat_function(&EX_T(opline->result.u.var).tmp_var,
5526 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5527 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5528 6 : zval_dtor(free_op1.var);
5529 6 : zval_dtor(free_op2.var);
5530 6 : ZEND_VM_NEXT_OPCODE();
5531 : }
5532 :
5533 : static int ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5534 0 : {
5535 0 : zend_op *opline = EX(opline);
5536 : zend_free_op free_op1, free_op2;
5537 :
5538 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
5539 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5540 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5541 0 : zval_dtor(free_op1.var);
5542 0 : zval_dtor(free_op2.var);
5543 0 : ZEND_VM_NEXT_OPCODE();
5544 : }
5545 :
5546 : static int ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5547 0 : {
5548 0 : zend_op *opline = EX(opline);
5549 : zend_free_op free_op1, free_op2;
5550 :
5551 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
5552 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5553 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5554 0 : zval_dtor(free_op1.var);
5555 0 : zval_dtor(free_op2.var);
5556 0 : ZEND_VM_NEXT_OPCODE();
5557 : }
5558 :
5559 : static int ZEND_IS_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5560 0 : {
5561 0 : zend_op *opline = EX(opline);
5562 : zend_free_op free_op1, free_op2;
5563 :
5564 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
5565 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5566 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5567 0 : zval_dtor(free_op1.var);
5568 0 : zval_dtor(free_op2.var);
5569 0 : ZEND_VM_NEXT_OPCODE();
5570 : }
5571 :
5572 : static int ZEND_IS_NOT_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5573 0 : {
5574 0 : zend_op *opline = EX(opline);
5575 : zend_free_op free_op1, free_op2;
5576 :
5577 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
5578 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5579 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5580 0 : zval_dtor(free_op1.var);
5581 0 : zval_dtor(free_op2.var);
5582 0 : ZEND_VM_NEXT_OPCODE();
5583 : }
5584 :
5585 : static int ZEND_IS_SMALLER_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5586 0 : {
5587 0 : zend_op *opline = EX(opline);
5588 : zend_free_op free_op1, free_op2;
5589 :
5590 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
5591 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5592 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5593 0 : zval_dtor(free_op1.var);
5594 0 : zval_dtor(free_op2.var);
5595 0 : ZEND_VM_NEXT_OPCODE();
5596 : }
5597 :
5598 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5599 0 : {
5600 0 : zend_op *opline = EX(opline);
5601 : zend_free_op free_op1, free_op2;
5602 :
5603 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
5604 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5605 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5606 0 : zval_dtor(free_op1.var);
5607 0 : zval_dtor(free_op2.var);
5608 0 : ZEND_VM_NEXT_OPCODE();
5609 : }
5610 :
5611 : static int ZEND_BW_OR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5612 7 : {
5613 7 : zend_op *opline = EX(opline);
5614 : zend_free_op free_op1, free_op2;
5615 :
5616 7 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
5617 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5618 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5619 7 : zval_dtor(free_op1.var);
5620 7 : zval_dtor(free_op2.var);
5621 7 : ZEND_VM_NEXT_OPCODE();
5622 : }
5623 :
5624 : static int ZEND_BW_AND_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5625 0 : {
5626 0 : zend_op *opline = EX(opline);
5627 : zend_free_op free_op1, free_op2;
5628 :
5629 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
5630 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5631 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5632 0 : zval_dtor(free_op1.var);
5633 0 : zval_dtor(free_op2.var);
5634 0 : ZEND_VM_NEXT_OPCODE();
5635 : }
5636 :
5637 : static int ZEND_BW_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5638 0 : {
5639 0 : zend_op *opline = EX(opline);
5640 : zend_free_op free_op1, free_op2;
5641 :
5642 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
5643 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5644 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5645 0 : zval_dtor(free_op1.var);
5646 0 : zval_dtor(free_op2.var);
5647 0 : ZEND_VM_NEXT_OPCODE();
5648 : }
5649 :
5650 : static int ZEND_BOOL_XOR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5651 0 : {
5652 0 : zend_op *opline = EX(opline);
5653 : zend_free_op free_op1, free_op2;
5654 :
5655 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
5656 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5657 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5658 0 : zval_dtor(free_op1.var);
5659 0 : zval_dtor(free_op2.var);
5660 0 : ZEND_VM_NEXT_OPCODE();
5661 : }
5662 :
5663 : static int ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5664 0 : {
5665 0 : zend_op *opline = EX(opline);
5666 : zend_free_op free_op1, free_op2;
5667 0 : zval *var = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
5668 : zval var_copy;
5669 : int use_copy;
5670 :
5671 0 : zend_make_printable_zval(var, &var_copy, &use_copy);
5672 0 : if (use_copy) {
5673 0 : var = &var_copy;
5674 : }
5675 0 : add_string_to_string( &EX_T(opline->result.u.var).tmp_var,
5676 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5677 : var);
5678 0 : if (use_copy) {
5679 0 : zval_dtor(var);
5680 : }
5681 : /* original comment, possibly problematic:
5682 : * FREE_OP is missing intentionally here - we're always working on the same temporary variable
5683 : * (Zeev): I don't think it's problematic, we only use variables
5684 : * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
5685 : * string offsets or overloaded objects
5686 : */
5687 0 : zval_dtor(free_op2.var);
5688 :
5689 0 : ZEND_VM_NEXT_OPCODE();
5690 : }
5691 :
5692 : static int ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5693 0 : {
5694 0 : zend_op *opline = EX(opline);
5695 : zval *function_name;
5696 : char *function_name_strval;
5697 : int function_name_strlen;
5698 : zend_free_op free_op1, free_op2;
5699 :
5700 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
5701 :
5702 0 : function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
5703 :
5704 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
5705 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
5706 : }
5707 :
5708 0 : function_name_strval = Z_STRVAL_P(function_name);
5709 0 : function_name_strlen = Z_STRLEN_P(function_name);
5710 :
5711 0 : EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
5712 :
5713 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
5714 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
5715 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
5716 : }
5717 :
5718 : /* First, locate the function. */
5719 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
5720 0 : if (!EX(fbc)) {
5721 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
5722 : }
5723 : } else {
5724 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
5725 : }
5726 :
5727 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
5728 0 : EX(object) = NULL;
5729 : } else {
5730 0 : if (!PZVAL_IS_REF(EX(object))) {
5731 0 : EX(object)->refcount++; /* For $this pointer */
5732 : } else {
5733 : zval *this_ptr;
5734 0 : ALLOC_ZVAL(this_ptr);
5735 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
5736 0 : zval_copy_ctor(this_ptr);
5737 0 : EX(object) = this_ptr;
5738 : }
5739 : }
5740 :
5741 0 : zval_dtor(free_op2.var);
5742 :
5743 0 : ZEND_VM_NEXT_OPCODE();
5744 : }
5745 :
5746 : static int ZEND_CASE_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5747 0 : {
5748 0 : zend_op *opline = EX(opline);
5749 0 : int switch_expr_is_overloaded=0;
5750 : zend_free_op free_op1, free_op2;
5751 :
5752 : if (IS_TMP_VAR==IS_VAR) {
5753 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
5754 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
5755 : } else {
5756 : switch_expr_is_overloaded = 1;
5757 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
5758 : }
5759 : }
5760 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
5761 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5762 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5763 :
5764 0 : zval_dtor(free_op2.var);
5765 0 : if (switch_expr_is_overloaded) {
5766 : /* We only free op1 if this is a string offset,
5767 : * Since if it is a TMP_VAR, it'll be reused by
5768 : * other CASE opcodes (whereas string offsets
5769 : * are allocated at each get_zval_ptr())
5770 : */
5771 0 : zval_dtor(free_op1.var);
5772 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
5773 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
5774 : }
5775 0 : ZEND_VM_NEXT_OPCODE();
5776 : }
5777 :
5778 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5779 0 : {
5780 0 : zend_op *opline = EX(opline);
5781 : zend_free_op free_op1, free_op2;
5782 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
5783 : zval *expr_ptr;
5784 0 : zval *offset=_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
5785 :
5786 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
5787 : zval **expr_ptr_ptr = NULL;
5788 :
5789 : if (opline->extended_value) {
5790 : expr_ptr_ptr=NULL;
5791 : expr_ptr = *expr_ptr_ptr;
5792 : } else {
5793 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
5794 : }
5795 : #else
5796 0 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
5797 : #endif
5798 :
5799 : if (1) { /* temporary variable */
5800 : zval *new_expr;
5801 :
5802 0 : ALLOC_ZVAL(new_expr);
5803 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
5804 0 : expr_ptr = new_expr;
5805 : } else {
5806 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
5807 : if (opline->extended_value) {
5808 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
5809 : expr_ptr = *expr_ptr_ptr;
5810 : expr_ptr->refcount++;
5811 : } else
5812 : #endif
5813 : if (PZVAL_IS_REF(expr_ptr)) {
5814 : zval *new_expr;
5815 :
5816 : ALLOC_ZVAL(new_expr);
5817 : INIT_PZVAL_COPY(new_expr, expr_ptr);
5818 : expr_ptr = new_expr;
5819 : zendi_zval_copy_ctor(*expr_ptr);
5820 : } else {
5821 : expr_ptr->refcount++;
5822 : }
5823 : }
5824 0 : if (offset) {
5825 0 : switch (Z_TYPE_P(offset)) {
5826 : case IS_DOUBLE:
5827 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
5828 0 : break;
5829 : case IS_LONG:
5830 : case IS_BOOL:
5831 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
5832 0 : break;
5833 : case IS_STRING:
5834 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
5835 0 : break;
5836 : case IS_NULL:
5837 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
5838 0 : break;
5839 : default:
5840 0 : zend_error(E_WARNING, "Illegal offset type");
5841 0 : zval_ptr_dtor(&expr_ptr);
5842 : /* do nothing */
5843 : break;
5844 : }
5845 0 : zval_dtor(free_op2.var);
5846 : } else {
5847 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
5848 : }
5849 0 : if (opline->extended_value) {
5850 :
5851 : } else {
5852 :
5853 : }
5854 0 : ZEND_VM_NEXT_OPCODE();
5855 : }
5856 :
5857 : static int ZEND_INIT_ARRAY_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5858 0 : {
5859 0 : zend_op *opline = EX(opline);
5860 :
5861 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
5862 : if (IS_TMP_VAR == IS_UNUSED) {
5863 : ZEND_VM_NEXT_OPCODE();
5864 : #if 0 || IS_TMP_VAR != IS_UNUSED
5865 : } else {
5866 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
5867 : #endif
5868 : }
5869 : }
5870 :
5871 : static int ZEND_ADD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5872 110 : {
5873 110 : zend_op *opline = EX(opline);
5874 : zend_free_op free_op1, free_op2;
5875 :
5876 110 : add_function(&EX_T(opline->result.u.var).tmp_var,
5877 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5878 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5879 110 : zval_dtor(free_op1.var);
5880 110 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5881 110 : ZEND_VM_NEXT_OPCODE();
5882 : }
5883 :
5884 : static int ZEND_SUB_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5885 1 : {
5886 1 : zend_op *opline = EX(opline);
5887 : zend_free_op free_op1, free_op2;
5888 :
5889 1 : sub_function(&EX_T(opline->result.u.var).tmp_var,
5890 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5891 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5892 1 : zval_dtor(free_op1.var);
5893 1 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5894 1 : ZEND_VM_NEXT_OPCODE();
5895 : }
5896 :
5897 : static int ZEND_MUL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5898 0 : {
5899 0 : zend_op *opline = EX(opline);
5900 : zend_free_op free_op1, free_op2;
5901 :
5902 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
5903 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5904 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5905 0 : zval_dtor(free_op1.var);
5906 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5907 0 : ZEND_VM_NEXT_OPCODE();
5908 : }
5909 :
5910 : static int ZEND_DIV_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5911 0 : {
5912 0 : zend_op *opline = EX(opline);
5913 : zend_free_op free_op1, free_op2;
5914 :
5915 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
5916 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5917 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5918 0 : zval_dtor(free_op1.var);
5919 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5920 0 : ZEND_VM_NEXT_OPCODE();
5921 : }
5922 :
5923 : static int ZEND_MOD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5924 0 : {
5925 0 : zend_op *opline = EX(opline);
5926 : zend_free_op free_op1, free_op2;
5927 :
5928 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
5929 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5930 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5931 0 : zval_dtor(free_op1.var);
5932 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5933 0 : ZEND_VM_NEXT_OPCODE();
5934 : }
5935 :
5936 : static int ZEND_SL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5937 0 : {
5938 0 : zend_op *opline = EX(opline);
5939 : zend_free_op free_op1, free_op2;
5940 :
5941 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
5942 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5943 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5944 0 : zval_dtor(free_op1.var);
5945 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5946 0 : ZEND_VM_NEXT_OPCODE();
5947 : }
5948 :
5949 : static int ZEND_SR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5950 0 : {
5951 0 : zend_op *opline = EX(opline);
5952 : zend_free_op free_op1, free_op2;
5953 :
5954 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
5955 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5956 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5957 0 : zval_dtor(free_op1.var);
5958 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5959 0 : ZEND_VM_NEXT_OPCODE();
5960 : }
5961 :
5962 : static int ZEND_CONCAT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5963 170 : {
5964 170 : zend_op *opline = EX(opline);
5965 : zend_free_op free_op1, free_op2;
5966 :
5967 170 : concat_function(&EX_T(opline->result.u.var).tmp_var,
5968 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5969 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5970 170 : zval_dtor(free_op1.var);
5971 170 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5972 170 : ZEND_VM_NEXT_OPCODE();
5973 : }
5974 :
5975 : static int ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5976 0 : {
5977 0 : zend_op *opline = EX(opline);
5978 : zend_free_op free_op1, free_op2;
5979 :
5980 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
5981 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5982 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5983 0 : zval_dtor(free_op1.var);
5984 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5985 0 : ZEND_VM_NEXT_OPCODE();
5986 : }
5987 :
5988 : static int ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
5989 0 : {
5990 0 : zend_op *opline = EX(opline);
5991 : zend_free_op free_op1, free_op2;
5992 :
5993 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
5994 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
5995 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
5996 0 : zval_dtor(free_op1.var);
5997 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
5998 0 : ZEND_VM_NEXT_OPCODE();
5999 : }
6000 :
6001 : static int ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6002 3 : {
6003 3 : zend_op *opline = EX(opline);
6004 : zend_free_op free_op1, free_op2;
6005 :
6006 3 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
6007 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6008 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6009 3 : zval_dtor(free_op1.var);
6010 3 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6011 3 : ZEND_VM_NEXT_OPCODE();
6012 : }
6013 :
6014 : static int ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6015 0 : {
6016 0 : zend_op *opline = EX(opline);
6017 : zend_free_op free_op1, free_op2;
6018 :
6019 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
6020 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6021 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6022 0 : zval_dtor(free_op1.var);
6023 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6024 0 : ZEND_VM_NEXT_OPCODE();
6025 : }
6026 :
6027 : static int ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6028 1 : {
6029 1 : zend_op *opline = EX(opline);
6030 : zend_free_op free_op1, free_op2;
6031 :
6032 1 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
6033 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6034 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6035 1 : zval_dtor(free_op1.var);
6036 1 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6037 1 : ZEND_VM_NEXT_OPCODE();
6038 : }
6039 :
6040 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6041 0 : {
6042 0 : zend_op *opline = EX(opline);
6043 : zend_free_op free_op1, free_op2;
6044 :
6045 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
6046 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6047 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6048 0 : zval_dtor(free_op1.var);
6049 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6050 0 : ZEND_VM_NEXT_OPCODE();
6051 : }
6052 :
6053 : static int ZEND_BW_OR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6054 0 : {
6055 0 : zend_op *opline = EX(opline);
6056 : zend_free_op free_op1, free_op2;
6057 :
6058 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
6059 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6060 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6061 0 : zval_dtor(free_op1.var);
6062 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6063 0 : ZEND_VM_NEXT_OPCODE();
6064 : }
6065 :
6066 : static int ZEND_BW_AND_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6067 0 : {
6068 0 : zend_op *opline = EX(opline);
6069 : zend_free_op free_op1, free_op2;
6070 :
6071 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
6072 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6073 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6074 0 : zval_dtor(free_op1.var);
6075 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6076 0 : ZEND_VM_NEXT_OPCODE();
6077 : }
6078 :
6079 : static int ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6080 0 : {
6081 0 : zend_op *opline = EX(opline);
6082 : zend_free_op free_op1, free_op2;
6083 :
6084 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
6085 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6086 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6087 0 : zval_dtor(free_op1.var);
6088 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6089 0 : ZEND_VM_NEXT_OPCODE();
6090 : }
6091 :
6092 : static int ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6093 0 : {
6094 0 : zend_op *opline = EX(opline);
6095 : zend_free_op free_op1, free_op2;
6096 :
6097 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
6098 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6099 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6100 0 : zval_dtor(free_op1.var);
6101 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6102 0 : ZEND_VM_NEXT_OPCODE();
6103 : }
6104 :
6105 : static int ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6106 1 : {
6107 1 : zend_op *opline = EX(opline);
6108 : zend_free_op free_op1, free_op2;
6109 1 : zval *var = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
6110 : zval var_copy;
6111 : int use_copy;
6112 :
6113 1 : zend_make_printable_zval(var, &var_copy, &use_copy);
6114 1 : if (use_copy) {
6115 0 : var = &var_copy;
6116 : }
6117 1 : add_string_to_string( &EX_T(opline->result.u.var).tmp_var,
6118 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6119 : var);
6120 1 : if (use_copy) {
6121 0 : zval_dtor(var);
6122 : }
6123 : /* original comment, possibly problematic:
6124 : * FREE_OP is missing intentionally here - we're always working on the same temporary variable
6125 : * (Zeev): I don't think it's problematic, we only use variables
6126 : * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
6127 : * string offsets or overloaded objects
6128 : */
6129 1 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6130 :
6131 1 : ZEND_VM_NEXT_OPCODE();
6132 : }
6133 :
6134 : static int ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6135 0 : {
6136 0 : zend_op *opline = EX(opline);
6137 : zval *function_name;
6138 : char *function_name_strval;
6139 : int function_name_strlen;
6140 : zend_free_op free_op1, free_op2;
6141 :
6142 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
6143 :
6144 0 : function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
6145 :
6146 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
6147 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
6148 : }
6149 :
6150 0 : function_name_strval = Z_STRVAL_P(function_name);
6151 0 : function_name_strlen = Z_STRLEN_P(function_name);
6152 :
6153 0 : EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6154 :
6155 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
6156 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
6157 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
6158 : }
6159 :
6160 : /* First, locate the function. */
6161 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
6162 0 : if (!EX(fbc)) {
6163 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
6164 : }
6165 : } else {
6166 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
6167 : }
6168 :
6169 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
6170 0 : EX(object) = NULL;
6171 : } else {
6172 0 : if (!PZVAL_IS_REF(EX(object))) {
6173 0 : EX(object)->refcount++; /* For $this pointer */
6174 : } else {
6175 : zval *this_ptr;
6176 0 : ALLOC_ZVAL(this_ptr);
6177 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
6178 0 : zval_copy_ctor(this_ptr);
6179 0 : EX(object) = this_ptr;
6180 : }
6181 : }
6182 :
6183 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6184 :
6185 0 : ZEND_VM_NEXT_OPCODE();
6186 : }
6187 :
6188 : static int ZEND_CASE_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6189 0 : {
6190 0 : zend_op *opline = EX(opline);
6191 0 : int switch_expr_is_overloaded=0;
6192 : zend_free_op free_op1, free_op2;
6193 :
6194 : if (IS_TMP_VAR==IS_VAR) {
6195 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
6196 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
6197 : } else {
6198 : switch_expr_is_overloaded = 1;
6199 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
6200 : }
6201 : }
6202 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
6203 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6204 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
6205 :
6206 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6207 0 : if (switch_expr_is_overloaded) {
6208 : /* We only free op1 if this is a string offset,
6209 : * Since if it is a TMP_VAR, it'll be reused by
6210 : * other CASE opcodes (whereas string offsets
6211 : * are allocated at each get_zval_ptr())
6212 : */
6213 0 : zval_dtor(free_op1.var);
6214 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
6215 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
6216 : }
6217 0 : ZEND_VM_NEXT_OPCODE();
6218 : }
6219 :
6220 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6221 0 : {
6222 0 : zend_op *opline = EX(opline);
6223 : zend_free_op free_op1, free_op2;
6224 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
6225 : zval *expr_ptr;
6226 0 : zval *offset=_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
6227 :
6228 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
6229 : zval **expr_ptr_ptr = NULL;
6230 :
6231 : if (opline->extended_value) {
6232 : expr_ptr_ptr=NULL;
6233 : expr_ptr = *expr_ptr_ptr;
6234 : } else {
6235 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6236 : }
6237 : #else
6238 0 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6239 : #endif
6240 :
6241 : if (1) { /* temporary variable */
6242 : zval *new_expr;
6243 :
6244 0 : ALLOC_ZVAL(new_expr);
6245 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
6246 0 : expr_ptr = new_expr;
6247 : } else {
6248 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
6249 : if (opline->extended_value) {
6250 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
6251 : expr_ptr = *expr_ptr_ptr;
6252 : expr_ptr->refcount++;
6253 : } else
6254 : #endif
6255 : if (PZVAL_IS_REF(expr_ptr)) {
6256 : zval *new_expr;
6257 :
6258 : ALLOC_ZVAL(new_expr);
6259 : INIT_PZVAL_COPY(new_expr, expr_ptr);
6260 : expr_ptr = new_expr;
6261 : zendi_zval_copy_ctor(*expr_ptr);
6262 : } else {
6263 : expr_ptr->refcount++;
6264 : }
6265 : }
6266 0 : if (offset) {
6267 0 : switch (Z_TYPE_P(offset)) {
6268 : case IS_DOUBLE:
6269 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
6270 0 : break;
6271 : case IS_LONG:
6272 : case IS_BOOL:
6273 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
6274 0 : break;
6275 : case IS_STRING:
6276 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
6277 0 : break;
6278 : case IS_NULL:
6279 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
6280 0 : break;
6281 : default:
6282 0 : zend_error(E_WARNING, "Illegal offset type");
6283 0 : zval_ptr_dtor(&expr_ptr);
6284 : /* do nothing */
6285 : break;
6286 : }
6287 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
6288 : } else {
6289 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
6290 : }
6291 0 : if (opline->extended_value) {
6292 :
6293 : } else {
6294 :
6295 : }
6296 0 : ZEND_VM_NEXT_OPCODE();
6297 : }
6298 :
6299 : static int ZEND_INIT_ARRAY_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6300 0 : {
6301 0 : zend_op *opline = EX(opline);
6302 :
6303 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
6304 : if (IS_TMP_VAR == IS_UNUSED) {
6305 : ZEND_VM_NEXT_OPCODE();
6306 : #if 0 || IS_TMP_VAR != IS_UNUSED
6307 : } else {
6308 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
6309 : #endif
6310 : }
6311 : }
6312 :
6313 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6314 6 : {
6315 6 : zend_op *opline = EX(opline);
6316 : zend_free_op free_op1;
6317 6 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
6318 : zval *expr_ptr;
6319 6 : zval *offset=NULL;
6320 :
6321 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
6322 : zval **expr_ptr_ptr = NULL;
6323 :
6324 : if (opline->extended_value) {
6325 : expr_ptr_ptr=NULL;
6326 : expr_ptr = *expr_ptr_ptr;
6327 : } else {
6328 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6329 : }
6330 : #else
6331 6 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6332 : #endif
6333 :
6334 : if (1) { /* temporary variable */
6335 : zval *new_expr;
6336 :
6337 6 : ALLOC_ZVAL(new_expr);
6338 6 : INIT_PZVAL_COPY(new_expr, expr_ptr);
6339 6 : expr_ptr = new_expr;
6340 : } else {
6341 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
6342 : if (opline->extended_value) {
6343 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
6344 : expr_ptr = *expr_ptr_ptr;
6345 : expr_ptr->refcount++;
6346 : } else
6347 : #endif
6348 : if (PZVAL_IS_REF(expr_ptr)) {
6349 : zval *new_expr;
6350 :
6351 : ALLOC_ZVAL(new_expr);
6352 : INIT_PZVAL_COPY(new_expr, expr_ptr);
6353 : expr_ptr = new_expr;
6354 : zendi_zval_copy_ctor(*expr_ptr);
6355 : } else {
6356 : expr_ptr->refcount++;
6357 : }
6358 : }
6359 6 : if (offset) {
6360 0 : switch (Z_TYPE_P(offset)) {
6361 : case IS_DOUBLE:
6362 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
6363 0 : break;
6364 : case IS_LONG:
6365 : case IS_BOOL:
6366 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
6367 0 : break;
6368 : case IS_STRING:
6369 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
6370 0 : break;
6371 : case IS_NULL:
6372 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
6373 0 : break;
6374 : default:
6375 0 : zend_error(E_WARNING, "Illegal offset type");
6376 0 : zval_ptr_dtor(&expr_ptr);
6377 : /* do nothing */
6378 : break;
6379 : }
6380 :
6381 : } else {
6382 6 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
6383 : }
6384 6 : if (opline->extended_value) {
6385 :
6386 : } else {
6387 :
6388 : }
6389 6 : ZEND_VM_NEXT_OPCODE();
6390 : }
6391 :
6392 : static int ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6393 4 : {
6394 4 : zend_op *opline = EX(opline);
6395 :
6396 4 : array_init(&EX_T(opline->result.u.var).tmp_var);
6397 : if (IS_TMP_VAR == IS_UNUSED) {
6398 : ZEND_VM_NEXT_OPCODE();
6399 : #if 0 || IS_TMP_VAR != IS_UNUSED
6400 : } else {
6401 4 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
6402 : #endif
6403 : }
6404 : }
6405 :
6406 : static int ZEND_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6407 0 : {
6408 0 : zend_op *opline = EX(opline);
6409 : zend_free_op free_op1;
6410 :
6411 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
6412 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6413 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6414 0 : zval_dtor(free_op1.var);
6415 :
6416 0 : ZEND_VM_NEXT_OPCODE();
6417 : }
6418 :
6419 : static int ZEND_SUB_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6420 0 : {
6421 0 : zend_op *opline = EX(opline);
6422 : zend_free_op free_op1;
6423 :
6424 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
6425 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6426 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6427 0 : zval_dtor(free_op1.var);
6428 :
6429 0 : ZEND_VM_NEXT_OPCODE();
6430 : }
6431 :
6432 : static int ZEND_MUL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6433 0 : {
6434 0 : zend_op *opline = EX(opline);
6435 : zend_free_op free_op1;
6436 :
6437 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
6438 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6439 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6440 0 : zval_dtor(free_op1.var);
6441 :
6442 0 : ZEND_VM_NEXT_OPCODE();
6443 : }
6444 :
6445 : static int ZEND_DIV_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6446 10 : {
6447 10 : zend_op *opline = EX(opline);
6448 : zend_free_op free_op1;
6449 :
6450 10 : div_function(&EX_T(opline->result.u.var).tmp_var,
6451 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6452 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6453 10 : zval_dtor(free_op1.var);
6454 :
6455 10 : ZEND_VM_NEXT_OPCODE();
6456 : }
6457 :
6458 : static int ZEND_MOD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6459 0 : {
6460 0 : zend_op *opline = EX(opline);
6461 : zend_free_op free_op1;
6462 :
6463 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
6464 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6465 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6466 0 : zval_dtor(free_op1.var);
6467 :
6468 0 : ZEND_VM_NEXT_OPCODE();
6469 : }
6470 :
6471 : static int ZEND_SL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6472 0 : {
6473 0 : zend_op *opline = EX(opline);
6474 : zend_free_op free_op1;
6475 :
6476 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
6477 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6478 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6479 0 : zval_dtor(free_op1.var);
6480 :
6481 0 : ZEND_VM_NEXT_OPCODE();
6482 : }
6483 :
6484 : static int ZEND_SR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6485 0 : {
6486 0 : zend_op *opline = EX(opline);
6487 : zend_free_op free_op1;
6488 :
6489 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
6490 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6491 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6492 0 : zval_dtor(free_op1.var);
6493 :
6494 0 : ZEND_VM_NEXT_OPCODE();
6495 : }
6496 :
6497 : static int ZEND_CONCAT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6498 1203 : {
6499 1203 : zend_op *opline = EX(opline);
6500 : zend_free_op free_op1;
6501 :
6502 1203 : concat_function(&EX_T(opline->result.u.var).tmp_var,
6503 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6504 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6505 1203 : zval_dtor(free_op1.var);
6506 :
6507 1203 : ZEND_VM_NEXT_OPCODE();
6508 : }
6509 :
6510 : static int ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6511 0 : {
6512 0 : zend_op *opline = EX(opline);
6513 : zend_free_op free_op1;
6514 :
6515 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
6516 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6517 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6518 0 : zval_dtor(free_op1.var);
6519 :
6520 0 : ZEND_VM_NEXT_OPCODE();
6521 : }
6522 :
6523 : static int ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6524 0 : {
6525 0 : zend_op *opline = EX(opline);
6526 : zend_free_op free_op1;
6527 :
6528 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
6529 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6530 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6531 0 : zval_dtor(free_op1.var);
6532 :
6533 0 : ZEND_VM_NEXT_OPCODE();
6534 : }
6535 :
6536 : static int ZEND_IS_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6537 0 : {
6538 0 : zend_op *opline = EX(opline);
6539 : zend_free_op free_op1;
6540 :
6541 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
6542 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6543 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6544 0 : zval_dtor(free_op1.var);
6545 :
6546 0 : ZEND_VM_NEXT_OPCODE();
6547 : }
6548 :
6549 : static int ZEND_IS_NOT_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6550 0 : {
6551 0 : zend_op *opline = EX(opline);
6552 : zend_free_op free_op1;
6553 :
6554 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
6555 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6556 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6557 0 : zval_dtor(free_op1.var);
6558 :
6559 0 : ZEND_VM_NEXT_OPCODE();
6560 : }
6561 :
6562 : static int ZEND_IS_SMALLER_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6563 0 : {
6564 0 : zend_op *opline = EX(opline);
6565 : zend_free_op free_op1;
6566 :
6567 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
6568 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6569 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6570 0 : zval_dtor(free_op1.var);
6571 :
6572 0 : ZEND_VM_NEXT_OPCODE();
6573 : }
6574 :
6575 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6576 0 : {
6577 0 : zend_op *opline = EX(opline);
6578 : zend_free_op free_op1;
6579 :
6580 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
6581 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6582 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6583 0 : zval_dtor(free_op1.var);
6584 :
6585 0 : ZEND_VM_NEXT_OPCODE();
6586 : }
6587 :
6588 : static int ZEND_BW_OR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6589 0 : {
6590 0 : zend_op *opline = EX(opline);
6591 : zend_free_op free_op1;
6592 :
6593 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
6594 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6595 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6596 0 : zval_dtor(free_op1.var);
6597 :
6598 0 : ZEND_VM_NEXT_OPCODE();
6599 : }
6600 :
6601 : static int ZEND_BW_AND_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6602 0 : {
6603 0 : zend_op *opline = EX(opline);
6604 : zend_free_op free_op1;
6605 :
6606 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
6607 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6608 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6609 0 : zval_dtor(free_op1.var);
6610 :
6611 0 : ZEND_VM_NEXT_OPCODE();
6612 : }
6613 :
6614 : static int ZEND_BW_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6615 0 : {
6616 0 : zend_op *opline = EX(opline);
6617 : zend_free_op free_op1;
6618 :
6619 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
6620 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6621 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6622 0 : zval_dtor(free_op1.var);
6623 :
6624 0 : ZEND_VM_NEXT_OPCODE();
6625 : }
6626 :
6627 : static int ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6628 0 : {
6629 0 : zend_op *opline = EX(opline);
6630 : zend_free_op free_op1;
6631 :
6632 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
6633 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6634 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6635 0 : zval_dtor(free_op1.var);
6636 :
6637 0 : ZEND_VM_NEXT_OPCODE();
6638 : }
6639 :
6640 : static int ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6641 9647 : {
6642 9647 : zend_op *opline = EX(opline);
6643 : zend_free_op free_op1;
6644 9647 : zval *var = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
6645 : zval var_copy;
6646 : int use_copy;
6647 :
6648 9647 : zend_make_printable_zval(var, &var_copy, &use_copy);
6649 9647 : if (use_copy) {
6650 239 : var = &var_copy;
6651 : }
6652 9647 : add_string_to_string( &EX_T(opline->result.u.var).tmp_var,
6653 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6654 : var);
6655 9647 : if (use_copy) {
6656 239 : zval_dtor(var);
6657 : }
6658 : /* original comment, possibly problematic:
6659 : * FREE_OP is missing intentionally here - we're always working on the same temporary variable
6660 : * (Zeev): I don't think it's problematic, we only use variables
6661 : * which aren't affected by FREE_OP(Ts, )'s anyway, unless they're
6662 : * string offsets or overloaded objects
6663 : */
6664 :
6665 9647 : ZEND_VM_NEXT_OPCODE();
6666 : }
6667 :
6668 : static int ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6669 0 : {
6670 0 : zend_op *opline = EX(opline);
6671 : zval *function_name;
6672 : char *function_name_strval;
6673 : int function_name_strlen;
6674 : zend_free_op free_op1;
6675 :
6676 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
6677 :
6678 0 : function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
6679 :
6680 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
6681 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
6682 : }
6683 :
6684 0 : function_name_strval = Z_STRVAL_P(function_name);
6685 0 : function_name_strlen = Z_STRLEN_P(function_name);
6686 :
6687 0 : EX(object) = _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6688 :
6689 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
6690 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
6691 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
6692 : }
6693 :
6694 : /* First, locate the function. */
6695 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
6696 0 : if (!EX(fbc)) {
6697 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
6698 : }
6699 : } else {
6700 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
6701 : }
6702 :
6703 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
6704 0 : EX(object) = NULL;
6705 : } else {
6706 0 : if (!PZVAL_IS_REF(EX(object))) {
6707 0 : EX(object)->refcount++; /* For $this pointer */
6708 : } else {
6709 : zval *this_ptr;
6710 0 : ALLOC_ZVAL(this_ptr);
6711 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
6712 0 : zval_copy_ctor(this_ptr);
6713 0 : EX(object) = this_ptr;
6714 : }
6715 : }
6716 :
6717 :
6718 0 : ZEND_VM_NEXT_OPCODE();
6719 : }
6720 :
6721 : static int ZEND_CASE_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6722 0 : {
6723 0 : zend_op *opline = EX(opline);
6724 0 : int switch_expr_is_overloaded=0;
6725 : zend_free_op free_op1;
6726 :
6727 : if (IS_TMP_VAR==IS_VAR) {
6728 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
6729 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
6730 : } else {
6731 : switch_expr_is_overloaded = 1;
6732 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
6733 : }
6734 : }
6735 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
6736 : _get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
6737 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
6738 :
6739 0 : if (switch_expr_is_overloaded) {
6740 : /* We only free op1 if this is a string offset,
6741 : * Since if it is a TMP_VAR, it'll be reused by
6742 : * other CASE opcodes (whereas string offsets
6743 : * are allocated at each get_zval_ptr())
6744 : */
6745 0 : zval_dtor(free_op1.var);
6746 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
6747 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
6748 : }
6749 0 : ZEND_VM_NEXT_OPCODE();
6750 : }
6751 :
6752 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6753 0 : {
6754 0 : zend_op *opline = EX(opline);
6755 : zend_free_op free_op1;
6756 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
6757 : zval *expr_ptr;
6758 0 : zval *offset=_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
6759 :
6760 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
6761 : zval **expr_ptr_ptr = NULL;
6762 :
6763 : if (opline->extended_value) {
6764 : expr_ptr_ptr=NULL;
6765 : expr_ptr = *expr_ptr_ptr;
6766 : } else {
6767 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6768 : }
6769 : #else
6770 0 : expr_ptr=_get_zval_ptr_tmp(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6771 : #endif
6772 :
6773 : if (1) { /* temporary variable */
6774 : zval *new_expr;
6775 :
6776 0 : ALLOC_ZVAL(new_expr);
6777 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
6778 0 : expr_ptr = new_expr;
6779 : } else {
6780 : #if 0 || IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV
6781 : if (opline->extended_value) {
6782 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
6783 : expr_ptr = *expr_ptr_ptr;
6784 : expr_ptr->refcount++;
6785 : } else
6786 : #endif
6787 : if (PZVAL_IS_REF(expr_ptr)) {
6788 : zval *new_expr;
6789 :
6790 : ALLOC_ZVAL(new_expr);
6791 : INIT_PZVAL_COPY(new_expr, expr_ptr);
6792 : expr_ptr = new_expr;
6793 : zendi_zval_copy_ctor(*expr_ptr);
6794 : } else {
6795 : expr_ptr->refcount++;
6796 : }
6797 : }
6798 0 : if (offset) {
6799 0 : switch (Z_TYPE_P(offset)) {
6800 : case IS_DOUBLE:
6801 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
6802 0 : break;
6803 : case IS_LONG:
6804 : case IS_BOOL:
6805 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
6806 0 : break;
6807 : case IS_STRING:
6808 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
6809 0 : break;
6810 : case IS_NULL:
6811 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
6812 0 : break;
6813 : default:
6814 0 : zend_error(E_WARNING, "Illegal offset type");
6815 0 : zval_ptr_dtor(&expr_ptr);
6816 : /* do nothing */
6817 : break;
6818 : }
6819 :
6820 : } else {
6821 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
6822 : }
6823 0 : if (opline->extended_value) {
6824 :
6825 : } else {
6826 :
6827 : }
6828 0 : ZEND_VM_NEXT_OPCODE();
6829 : }
6830 :
6831 : static int ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6832 0 : {
6833 0 : zend_op *opline = EX(opline);
6834 :
6835 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
6836 : if (IS_TMP_VAR == IS_UNUSED) {
6837 : ZEND_VM_NEXT_OPCODE();
6838 : #if 0 || IS_TMP_VAR != IS_UNUSED
6839 : } else {
6840 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
6841 : #endif
6842 : }
6843 : }
6844 :
6845 : static int ZEND_BW_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6846 0 : {
6847 0 : zend_op *opline = EX(opline);
6848 : zend_free_op free_op1;
6849 :
6850 0 : bitwise_not_function(&EX_T(opline->result.u.var).tmp_var,
6851 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC) TSRMLS_CC);
6852 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
6853 0 : ZEND_VM_NEXT_OPCODE();
6854 : }
6855 :
6856 : static int ZEND_BOOL_NOT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6857 5879 : {
6858 5879 : zend_op *opline = EX(opline);
6859 : zend_free_op free_op1;
6860 :
6861 5879 : boolean_not_function(&EX_T(opline->result.u.var).tmp_var,
6862 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC) TSRMLS_CC);
6863 5879 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
6864 5879 : ZEND_VM_NEXT_OPCODE();
6865 : }
6866 :
6867 : static int ZEND_PRE_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6868 0 : {
6869 0 : zend_op *opline = EX(opline);
6870 : zend_free_op free_op1;
6871 0 : zval **var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6872 :
6873 0 : if (!var_ptr) {
6874 0 : zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
6875 : }
6876 0 : if (*var_ptr == EG(error_zval_ptr)) {
6877 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
6878 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
6879 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
6880 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
6881 : }
6882 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
6883 0 : ZEND_VM_NEXT_OPCODE();
6884 : }
6885 :
6886 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
6887 :
6888 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
6889 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
6890 : /* proxy object */
6891 0 : zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
6892 0 : val->refcount++;
6893 0 : increment_function(val);
6894 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
6895 0 : zval_ptr_dtor(&val);
6896 : } else {
6897 0 : increment_function(*var_ptr);
6898 : }
6899 :
6900 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
6901 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
6902 0 : PZVAL_LOCK(*var_ptr);
6903 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
6904 : }
6905 :
6906 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
6907 0 : ZEND_VM_NEXT_OPCODE();
6908 : }
6909 :
6910 : static int ZEND_PRE_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6911 0 : {
6912 0 : zend_op *opline = EX(opline);
6913 : zend_free_op free_op1;
6914 0 : zval **var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6915 :
6916 0 : if (!var_ptr) {
6917 0 : zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
6918 : }
6919 0 : if (*var_ptr == EG(error_zval_ptr)) {
6920 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
6921 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
6922 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
6923 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
6924 : }
6925 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
6926 0 : ZEND_VM_NEXT_OPCODE();
6927 : }
6928 :
6929 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
6930 :
6931 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
6932 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
6933 : /* proxy object */
6934 0 : zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
6935 0 : val->refcount++;
6936 0 : decrement_function(val);
6937 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
6938 0 : zval_ptr_dtor(&val);
6939 : } else {
6940 0 : decrement_function(*var_ptr);
6941 : }
6942 :
6943 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
6944 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
6945 0 : PZVAL_LOCK(*var_ptr);
6946 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
6947 : }
6948 :
6949 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
6950 0 : ZEND_VM_NEXT_OPCODE();
6951 : }
6952 :
6953 : static int ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6954 110 : {
6955 110 : zend_op *opline = EX(opline);
6956 : zend_free_op free_op1;
6957 110 : zval **var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6958 :
6959 110 : if (!var_ptr) {
6960 0 : zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
6961 : }
6962 110 : if (*var_ptr == EG(error_zval_ptr)) {
6963 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
6964 0 : EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr);
6965 : }
6966 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
6967 0 : ZEND_VM_NEXT_OPCODE();
6968 : }
6969 :
6970 110 : EX_T(opline->result.u.var).tmp_var = **var_ptr;
6971 110 : zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var);
6972 :
6973 110 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
6974 :
6975 110 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
6976 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
6977 : /* proxy object */
6978 0 : zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
6979 0 : val->refcount++;
6980 0 : increment_function(val);
6981 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
6982 0 : zval_ptr_dtor(&val);
6983 : } else {
6984 110 : increment_function(*var_ptr);
6985 : }
6986 :
6987 110 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
6988 110 : ZEND_VM_NEXT_OPCODE();
6989 : }
6990 :
6991 : static int ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
6992 0 : {
6993 0 : zend_op *opline = EX(opline);
6994 : zend_free_op free_op1;
6995 0 : zval **var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
6996 :
6997 0 : if (!var_ptr) {
6998 0 : zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
6999 : }
7000 0 : if (*var_ptr == EG(error_zval_ptr)) {
7001 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
7002 0 : EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr);
7003 : }
7004 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7005 0 : ZEND_VM_NEXT_OPCODE();
7006 : }
7007 :
7008 0 : EX_T(opline->result.u.var).tmp_var = **var_ptr;
7009 0 : zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var);
7010 :
7011 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
7012 :
7013 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
7014 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
7015 : /* proxy object */
7016 0 : zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
7017 0 : val->refcount++;
7018 0 : decrement_function(val);
7019 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
7020 0 : zval_ptr_dtor(&val);
7021 : } else {
7022 0 : decrement_function(*var_ptr);
7023 : }
7024 :
7025 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7026 0 : ZEND_VM_NEXT_OPCODE();
7027 : }
7028 :
7029 : static int ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7030 76 : {
7031 76 : zend_op *opline = EX(opline);
7032 : zend_free_op free_op1;
7033 : zval z_copy;
7034 76 : zval *z = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7035 :
7036 76 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL &&
7037 : zend_std_cast_object_tostring(z, &z_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
7038 0 : zend_print_variable(&z_copy);
7039 0 : zval_dtor(&z_copy);
7040 : } else {
7041 76 : zend_print_variable(z);
7042 : }
7043 :
7044 76 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7045 76 : ZEND_VM_NEXT_OPCODE();
7046 : }
7047 :
7048 : static int ZEND_PRINT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7049 0 : {
7050 0 : zend_op *opline = EX(opline);
7051 :
7052 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1;
7053 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG;
7054 :
7055 0 : return ZEND_ECHO_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7056 : }
7057 :
7058 : static int zend_fetch_var_address_helper_SPEC_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
7059 0 : {
7060 0 : zend_op *opline = EX(opline);
7061 : zend_free_op free_op1;
7062 0 : zval *varname = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7063 : zval **retval;
7064 : zval tmp_varname;
7065 : HashTable *target_symbol_table;
7066 :
7067 0 : if (Z_TYPE_P(varname) != IS_STRING) {
7068 0 : tmp_varname = *varname;
7069 0 : zval_copy_ctor(&tmp_varname);
7070 0 : convert_to_string(&tmp_varname);
7071 0 : varname = &tmp_varname;
7072 : }
7073 :
7074 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
7075 0 : retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
7076 : } else {
7077 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
7078 : /*
7079 : if (!target_symbol_table) {
7080 : ZEND_VM_NEXT_OPCODE();
7081 : }
7082 : */
7083 0 : if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &retval) == FAILURE) {
7084 0 : switch (type) {
7085 : case BP_VAR_R:
7086 : case BP_VAR_UNSET:
7087 0 : zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
7088 : /* break missing intentionally */
7089 : case BP_VAR_IS:
7090 0 : retval = &EG(uninitialized_zval_ptr);
7091 0 : break;
7092 : case BP_VAR_RW:
7093 0 : zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
7094 : /* break missing intentionally */
7095 : case BP_VAR_W: {
7096 0 : zval *new_zval = &EG(uninitialized_zval);
7097 :
7098 0 : new_zval->refcount++;
7099 0 : zend_hash_update(target_symbol_table, varname->value.str.val, varname->value.str.len+1, &new_zval, sizeof(zval *), (void **) &retval);
7100 : }
7101 : break;
7102 : EMPTY_SWITCH_DEFAULT_CASE()
7103 : }
7104 : }
7105 0 : switch (opline->op2.u.EA.type) {
7106 : case ZEND_FETCH_GLOBAL:
7107 : if (IS_VAR != IS_TMP_VAR) {
7108 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7109 : }
7110 0 : break;
7111 : case ZEND_FETCH_LOCAL:
7112 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7113 0 : break;
7114 : case ZEND_FETCH_STATIC:
7115 0 : zval_update_constant(retval, (void*) 1 TSRMLS_CC);
7116 0 : break;
7117 : case ZEND_FETCH_GLOBAL_LOCK:
7118 0 : if (IS_VAR == IS_VAR && !free_op1.var) {
7119 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
7120 : }
7121 : break;
7122 : }
7123 : }
7124 :
7125 :
7126 0 : if (varname == &tmp_varname) {
7127 0 : zval_dtor(varname);
7128 : }
7129 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
7130 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
7131 0 : PZVAL_LOCK(*retval);
7132 0 : switch (type) {
7133 : case BP_VAR_R:
7134 : case BP_VAR_IS:
7135 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
7136 0 : break;
7137 : case BP_VAR_UNSET: {
7138 : zend_free_op free_res;
7139 :
7140 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
7141 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
7142 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
7143 : }
7144 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
7145 0 : FREE_OP_VAR_PTR(free_res);
7146 : break;
7147 : }
7148 : }
7149 : }
7150 0 : ZEND_VM_NEXT_OPCODE();
7151 : }
7152 :
7153 : static int ZEND_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7154 0 : {
7155 0 : return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7156 : }
7157 :
7158 : static int ZEND_FETCH_W_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7159 0 : {
7160 0 : return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7161 : }
7162 :
7163 : static int ZEND_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7164 0 : {
7165 0 : return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7166 : }
7167 :
7168 : static int ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7169 0 : {
7170 0 : return zend_fetch_var_address_helper_SPEC_VAR(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7171 : }
7172 :
7173 : static int ZEND_FETCH_UNSET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7174 0 : {
7175 0 : return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7176 : }
7177 :
7178 : static int ZEND_FETCH_IS_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7179 0 : {
7180 0 : return zend_fetch_var_address_helper_SPEC_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7181 : }
7182 :
7183 : static int ZEND_JMPZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7184 10857 : {
7185 10857 : zend_op *opline = EX(opline);
7186 : zend_free_op free_op1;
7187 10857 : int ret = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
7188 :
7189 10857 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7190 10857 : if (!ret) {
7191 : #if DEBUG_ZEND>=2
7192 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
7193 : #endif
7194 9383 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
7195 : }
7196 :
7197 1474 : ZEND_VM_NEXT_OPCODE();
7198 : }
7199 :
7200 : static int ZEND_JMPNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7201 2 : {
7202 2 : zend_op *opline = EX(opline);
7203 : zend_free_op free_op1;
7204 2 : int ret = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
7205 :
7206 2 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7207 2 : if (ret) {
7208 : #if DEBUG_ZEND>=2
7209 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
7210 : #endif
7211 2 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
7212 : }
7213 :
7214 0 : ZEND_VM_NEXT_OPCODE();
7215 : }
7216 :
7217 : static int ZEND_JMPZNZ_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7218 0 : {
7219 0 : zend_op *opline = EX(opline);
7220 : zend_free_op free_op1;
7221 0 : int retval = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
7222 :
7223 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7224 0 : if (retval) {
7225 : #if DEBUG_ZEND>=2
7226 : printf("Conditional jmp on true to %d\n", opline->extended_value);
7227 : #endif
7228 0 : ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]);
7229 : } else {
7230 : #if DEBUG_ZEND>=2
7231 : printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num);
7232 : #endif
7233 0 : ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
7234 : }
7235 : }
7236 :
7237 : static int ZEND_JMPZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7238 1045 : {
7239 1045 : zend_op *opline = EX(opline);
7240 : zend_free_op free_op1;
7241 1045 : int retval = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
7242 :
7243 1045 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7244 1045 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval;
7245 1045 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
7246 1045 : if (!retval) {
7247 : #if DEBUG_ZEND>=2
7248 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
7249 : #endif
7250 780 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
7251 : }
7252 265 : ZEND_VM_NEXT_OPCODE();
7253 : }
7254 :
7255 : static int ZEND_JMPNZ_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7256 342 : {
7257 342 : zend_op *opline = EX(opline);
7258 : zend_free_op free_op1;
7259 342 : int retval = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
7260 :
7261 342 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7262 342 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval;
7263 342 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
7264 342 : if (retval) {
7265 : #if DEBUG_ZEND>=2
7266 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
7267 : #endif
7268 126 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
7269 : }
7270 216 : ZEND_VM_NEXT_OPCODE();
7271 : }
7272 :
7273 : static int ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7274 15806 : {
7275 15806 : zend_op *opline = EX(opline);
7276 : zval *retval_ptr;
7277 : zval **retval_ptr_ptr;
7278 : zend_free_op free_op1;
7279 :
7280 15806 : if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) {
7281 :
7282 : if (IS_VAR == IS_CONST || IS_VAR == IS_TMP_VAR) {
7283 : /* Not supposed to happen, but we'll allow it */
7284 : zend_error(E_NOTICE, "Only variable references should be returned by reference");
7285 : goto return_by_value;
7286 : }
7287 :
7288 0 : retval_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7289 :
7290 0 : if (!retval_ptr_ptr) {
7291 0 : zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
7292 : }
7293 :
7294 0 : if (IS_VAR == IS_VAR && !(*retval_ptr_ptr)->is_ref) {
7295 0 : if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
7296 : EX_T(opline->op1.u.var).var.fcall_returned_reference) {
7297 0 : } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) {
7298 0 : if (IS_VAR == IS_VAR && !(free_op1.var != NULL)) {
7299 0 : PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
7300 : }
7301 0 : zend_error(E_NOTICE, "Only variable references should be returned by reference");
7302 0 : goto return_by_value;
7303 : }
7304 : }
7305 :
7306 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
7307 0 : (*retval_ptr_ptr)->refcount++;
7308 :
7309 0 : (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr);
7310 : } else {
7311 15806 : return_by_value:
7312 :
7313 15806 : retval_ptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7314 :
7315 15806 : if (EG(ze1_compatibility_mode) && Z_TYPE_P(retval_ptr) == IS_OBJECT) {
7316 : zval *ret;
7317 : char *class_name;
7318 : zend_uint class_name_len;
7319 : int dup;
7320 :
7321 0 : ALLOC_ZVAL(ret);
7322 0 : INIT_PZVAL_COPY(ret, retval_ptr);
7323 0 : dup = zend_get_object_classname(retval_ptr, &class_name, &class_name_len TSRMLS_CC);
7324 0 : if (Z_OBJ_HT_P(retval_ptr)->clone_obj == NULL) {
7325 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", class_name);
7326 : }
7327 0 : zend_error(E_STRICT, "Implicit cloning object of class '%s' because of 'zend.ze1_compatibility_mode'", class_name);
7328 0 : ret->value.obj = Z_OBJ_HT_P(retval_ptr)->clone_obj(retval_ptr TSRMLS_CC);
7329 0 : *EG(return_value_ptr_ptr) = ret;
7330 0 : if (!dup) {
7331 0 : efree(class_name);
7332 : }
7333 : } else if (!0) { /* Not a temp var */
7334 15806 : if (EG(active_op_array)->return_reference == ZEND_RETURN_REF ||
7335 : (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) {
7336 : zval *ret;
7337 :
7338 0 : ALLOC_ZVAL(ret);
7339 0 : INIT_PZVAL_COPY(ret, retval_ptr);
7340 0 : zval_copy_ctor(ret);
7341 0 : *EG(return_value_ptr_ptr) = ret;
7342 : } else {
7343 15806 : *EG(return_value_ptr_ptr) = retval_ptr;
7344 15806 : retval_ptr->refcount++;
7345 : }
7346 : } else {
7347 : zval *ret;
7348 :
7349 : ALLOC_ZVAL(ret);
7350 : INIT_PZVAL_COPY(ret, retval_ptr);
7351 : *EG(return_value_ptr_ptr) = ret;
7352 : }
7353 : }
7354 15806 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7355 15806 : ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
7356 : }
7357 :
7358 : static int ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7359 12 : {
7360 12 : zend_op *opline = EX(opline);
7361 : zval *value;
7362 : zval *exception;
7363 : zend_free_op free_op1;
7364 :
7365 12 : value = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7366 :
7367 12 : if (Z_TYPE_P(value) != IS_OBJECT) {
7368 0 : zend_error_noreturn(E_ERROR, "Can only throw objects");
7369 : }
7370 : /* Not sure if a complete copy is what we want here */
7371 12 : ALLOC_ZVAL(exception);
7372 12 : INIT_PZVAL_COPY(exception, value);
7373 : if (!0) {
7374 12 : zval_copy_ctor(exception);
7375 : }
7376 :
7377 12 : zend_throw_exception_object(exception TSRMLS_CC);
7378 12 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7379 12 : ZEND_VM_NEXT_OPCODE();
7380 : }
7381 :
7382 : static int ZEND_SEND_VAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7383 0 : {
7384 0 : zend_op *opline = EX(opline);
7385 0 : if (opline->extended_value==ZEND_DO_FCALL_BY_NAME
7386 : && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
7387 0 : zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num);
7388 : }
7389 : {
7390 : zval *valptr;
7391 : zval *value;
7392 : zend_free_op free_op1;
7393 :
7394 0 : value = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7395 :
7396 0 : ALLOC_ZVAL(valptr);
7397 0 : INIT_PZVAL_COPY(valptr, value);
7398 : if (!0) {
7399 0 : zval_copy_ctor(valptr);
7400 : }
7401 0 : zend_ptr_stack_push(&EG(argument_stack), valptr);
7402 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7403 : }
7404 0 : ZEND_VM_NEXT_OPCODE();
7405 : }
7406 :
7407 : static int zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS)
7408 48827 : {
7409 48827 : zend_op *opline = EX(opline);
7410 : zval *varptr;
7411 : zend_free_op free_op1;
7412 48827 : varptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7413 :
7414 48827 : if (varptr == &EG(uninitialized_zval)) {
7415 766 : ALLOC_ZVAL(varptr);
7416 766 : INIT_ZVAL(*varptr);
7417 766 : varptr->refcount = 0;
7418 48061 : } else if (PZVAL_IS_REF(varptr)) {
7419 2 : zval *original_var = varptr;
7420 :
7421 2 : ALLOC_ZVAL(varptr);
7422 2 : *varptr = *original_var;
7423 2 : varptr->is_ref = 0;
7424 2 : varptr->refcount = 0;
7425 2 : zval_copy_ctor(varptr);
7426 : }
7427 48827 : varptr->refcount++;
7428 48827 : zend_ptr_stack_push(&EG(argument_stack), varptr);
7429 48827 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);}; /* for string offsets */
7430 :
7431 48827 : ZEND_VM_NEXT_OPCODE();
7432 : }
7433 :
7434 : static int ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7435 8573 : {
7436 8573 : zend_op *opline = EX(opline);
7437 : zend_free_op free_op1;
7438 : zval *varptr;
7439 :
7440 8573 : if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
7441 8270 : if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF)) {
7442 8270 : return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7443 : }
7444 303 : } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
7445 303 : return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7446 : }
7447 :
7448 0 : if (IS_VAR == IS_VAR &&
7449 : (opline->extended_value & ZEND_ARG_SEND_FUNCTION) &&
7450 : EX_T(opline->op1.u.var).var.fcall_returned_reference &&
7451 : EX_T(opline->op1.u.var).var.ptr) {
7452 0 : varptr = EX_T(opline->op1.u.var).var.ptr;
7453 0 : PZVAL_UNLOCK_EX(varptr, &free_op1, 0);
7454 : } else {
7455 0 : varptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7456 : }
7457 0 : if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
7458 : EX_T(opline->op1.u.var).var.fcall_returned_reference) &&
7459 : varptr != &EG(uninitialized_zval) &&
7460 : (PZVAL_IS_REF(varptr) ||
7461 : (varptr->refcount == 1 && (IS_VAR == IS_CV || free_op1.var)))) {
7462 0 : varptr->is_ref = 1;
7463 0 : varptr->refcount++;
7464 0 : zend_ptr_stack_push(&EG(argument_stack), varptr);
7465 : } else {
7466 : zval *valptr;
7467 :
7468 0 : zend_error(E_STRICT, "Only variables should be passed by reference");
7469 0 : ALLOC_ZVAL(valptr);
7470 0 : INIT_PZVAL_COPY(valptr, varptr);
7471 : if (!0) {
7472 0 : zval_copy_ctor(valptr);
7473 : }
7474 0 : zend_ptr_stack_push(&EG(argument_stack), valptr);
7475 : }
7476 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7477 0 : ZEND_VM_NEXT_OPCODE();
7478 : }
7479 :
7480 : static int ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7481 1851 : {
7482 1851 : zend_op *opline = EX(opline);
7483 : zend_free_op free_op1;
7484 : zval **varptr_ptr;
7485 : zval *varptr;
7486 1851 : varptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7487 :
7488 1851 : if (!varptr_ptr) {
7489 0 : zend_error_noreturn(E_ERROR, "Only variables can be passed by reference");
7490 : }
7491 :
7492 1851 : SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr);
7493 1851 : varptr = *varptr_ptr;
7494 1851 : varptr->refcount++;
7495 1851 : zend_ptr_stack_push(&EG(argument_stack), varptr);
7496 :
7497 1851 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7498 1851 : ZEND_VM_NEXT_OPCODE();
7499 : }
7500 :
7501 : static int ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7502 40254 : {
7503 40254 : zend_op *opline = EX(opline);
7504 :
7505 40254 : if ((opline->extended_value == ZEND_DO_FCALL_BY_NAME)
7506 : && ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
7507 0 : return ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7508 : }
7509 40254 : return zend_send_by_var_helper_SPEC_VAR(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
7510 : }
7511 :
7512 : static int ZEND_BOOL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7513 16528 : {
7514 16528 : zend_op *opline = EX(opline);
7515 : zend_free_op free_op1;
7516 :
7517 : /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
7518 16528 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC));
7519 16528 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
7520 16528 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7521 :
7522 16528 : ZEND_VM_NEXT_OPCODE();
7523 : }
7524 :
7525 : static int ZEND_SWITCH_FREE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7526 530 : {
7527 530 : zend_switch_free(EX(opline), EX(Ts) TSRMLS_CC);
7528 530 : ZEND_VM_NEXT_OPCODE();
7529 : }
7530 :
7531 : static int ZEND_CLONE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7532 0 : {
7533 0 : zend_op *opline = EX(opline);
7534 : zend_free_op free_op1;
7535 0 : zval *obj = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7536 : zend_class_entry *ce;
7537 : zend_function *clone;
7538 : zend_object_clone_obj_t clone_call;
7539 :
7540 0 : if (!obj || Z_TYPE_P(obj) != IS_OBJECT) {
7541 0 : zend_error(E_WARNING, "__clone method called on non-object");
7542 0 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
7543 0 : EX_T(opline->result.u.var).var.ptr->refcount++;
7544 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7545 0 : ZEND_VM_NEXT_OPCODE();
7546 : }
7547 :
7548 0 : ce = Z_OBJCE_P(obj);
7549 0 : clone = ce ? ce->clone : NULL;
7550 0 : clone_call = Z_OBJ_HT_P(obj)->clone_obj;
7551 0 : if (!clone_call) {
7552 0 : if (ce) {
7553 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
7554 : } else {
7555 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
7556 : }
7557 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
7558 : EX_T(opline->result.u.var).var.ptr->refcount++;
7559 : }
7560 :
7561 0 : if (ce && clone) {
7562 0 : if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
7563 : /* Ensure that if we're calling a private function, we're allowed to do so.
7564 : */
7565 0 : if (ce != EG(scope)) {
7566 0 : zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
7567 : }
7568 0 : } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
7569 : /* Ensure that if we're calling a protected function, we're allowed to do so.
7570 : */
7571 0 : if (!zend_check_protected(clone->common.scope, EG(scope))) {
7572 0 : zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
7573 : }
7574 : }
7575 : }
7576 :
7577 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
7578 0 : if (!EG(exception)) {
7579 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
7580 0 : Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC);
7581 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT;
7582 0 : EX_T(opline->result.u.var).var.ptr->refcount=1;
7583 0 : EX_T(opline->result.u.var).var.ptr->is_ref=1;
7584 0 : if (!RETURN_VALUE_USED(opline) || EG(exception)) {
7585 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
7586 : }
7587 : }
7588 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7589 0 : ZEND_VM_NEXT_OPCODE();
7590 : }
7591 :
7592 : static int ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7593 0 : {
7594 0 : zend_op *opline = EX(opline);
7595 : zend_free_op free_op1;
7596 0 : zval *expr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7597 0 : zval *result = &EX_T(opline->result.u.var).tmp_var;
7598 :
7599 0 : *result = *expr;
7600 : if (!0) {
7601 0 : zendi_zval_copy_ctor(*result);
7602 : }
7603 0 : switch (opline->extended_value) {
7604 : case IS_NULL:
7605 0 : convert_to_null(result);
7606 0 : break;
7607 : case IS_BOOL:
7608 0 : convert_to_boolean(result);
7609 0 : break;
7610 : case IS_LONG:
7611 0 : convert_to_long(result);
7612 0 : break;
7613 : case IS_DOUBLE:
7614 0 : convert_to_double(result);
7615 0 : break;
7616 : case IS_STRING: {
7617 : zval var_copy;
7618 : int use_copy;
7619 :
7620 0 : zend_make_printable_zval(result, &var_copy, &use_copy);
7621 0 : if (use_copy) {
7622 0 : zval_dtor(result);
7623 0 : *result = var_copy;
7624 : }
7625 0 : break;
7626 : }
7627 : case IS_ARRAY:
7628 0 : convert_to_array(result);
7629 0 : break;
7630 : case IS_OBJECT:
7631 0 : convert_to_object(result);
7632 : break;
7633 : }
7634 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7635 0 : ZEND_VM_NEXT_OPCODE();
7636 : }
7637 :
7638 : static int ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7639 0 : {
7640 0 : zend_op *opline = EX(opline);
7641 0 : zend_op_array *new_op_array=NULL;
7642 0 : zval **original_return_value = EG(return_value_ptr_ptr);
7643 : int return_value_used;
7644 : zend_free_op free_op1;
7645 0 : zval *inc_filename = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7646 : zval tmp_inc_filename;
7647 0 : zend_bool failure_retval=0;
7648 :
7649 0 : if (inc_filename->type!=IS_STRING) {
7650 0 : tmp_inc_filename = *inc_filename;
7651 0 : zval_copy_ctor(&tmp_inc_filename);
7652 0 : convert_to_string(&tmp_inc_filename);
7653 0 : inc_filename = &tmp_inc_filename;
7654 : }
7655 :
7656 0 : return_value_used = RETURN_VALUE_USED(opline);
7657 :
7658 0 : switch (Z_LVAL(opline->op2.u.constant)) {
7659 : case ZEND_INCLUDE_ONCE:
7660 : case ZEND_REQUIRE_ONCE: {
7661 : zend_file_handle file_handle;
7662 : char cwd[MAXPATHLEN];
7663 : cwd_state state;
7664 :
7665 0 : if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
7666 0 : cwd[0] = '\0';
7667 0 : } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
7668 0 : cwd[0] = '\0';
7669 : }
7670 :
7671 0 : state.cwd_length = strlen(cwd);
7672 0 : state.cwd = zend_strndup(cwd, state.cwd_length);
7673 :
7674 0 : failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
7675 : zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1));
7676 :
7677 0 : free(state.cwd);
7678 :
7679 0 : if (failure_retval) {
7680 : /* do nothing */
7681 0 : } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
7682 :
7683 0 : if (!file_handle.opened_path) {
7684 0 : file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
7685 : }
7686 :
7687 0 : if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
7688 0 : new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
7689 0 : zend_destroy_file_handle(&file_handle TSRMLS_CC);
7690 : } else {
7691 0 : zend_file_handle_dtor(&file_handle);
7692 0 : failure_retval=1;
7693 : }
7694 : } else {
7695 0 : if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
7696 0 : zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
7697 : } else {
7698 0 : zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
7699 : }
7700 : }
7701 : }
7702 0 : break;
7703 : case ZEND_INCLUDE:
7704 : case ZEND_REQUIRE:
7705 0 : new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
7706 0 : break;
7707 : case ZEND_EVAL: {
7708 0 : char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
7709 :
7710 0 : new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
7711 0 : efree(eval_desc);
7712 : }
7713 : break;
7714 : EMPTY_SWITCH_DEFAULT_CASE()
7715 : }
7716 0 : if (inc_filename==&tmp_inc_filename) {
7717 0 : zval_dtor(&tmp_inc_filename);
7718 : }
7719 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
7720 0 : if (new_op_array) {
7721 : zval *saved_object;
7722 : zend_function *saved_function;
7723 :
7724 0 : EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr;
7725 0 : EG(active_op_array) = new_op_array;
7726 0 : EX_T(opline->result.u.var).var.ptr = NULL;
7727 :
7728 0 : saved_object = EX(object);
7729 0 : saved_function = EX(function_state).function;
7730 :
7731 0 : EX(function_state).function = (zend_function *) new_op_array;
7732 0 : EX(object) = NULL;
7733 :
7734 0 : zend_execute(new_op_array TSRMLS_CC);
7735 :
7736 0 : EX(function_state).function = saved_function;
7737 0 : EX(object) = saved_object;
7738 :
7739 0 : if (!return_value_used) {
7740 0 : if (EX_T(opline->result.u.var).var.ptr) {
7741 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
7742 : }
7743 : } else { /* return value is used */
7744 0 : if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */
7745 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
7746 0 : INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
7747 0 : Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1;
7748 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL;
7749 : }
7750 : }
7751 :
7752 0 : EG(opline_ptr) = &EX(opline);
7753 0 : EG(active_op_array) = EX(op_array);
7754 0 : EG(function_state_ptr) = &EX(function_state);
7755 0 : destroy_op_array(new_op_array TSRMLS_CC);
7756 0 : efree(new_op_array);
7757 0 : if (EG(exception)) {
7758 0 : zend_throw_exception_internal(NULL TSRMLS_CC);
7759 : }
7760 : } else {
7761 0 : if (return_value_used) {
7762 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
7763 0 : INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr);
7764 0 : Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval;
7765 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL;
7766 : }
7767 : }
7768 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7769 0 : EG(return_value_ptr_ptr) = original_return_value;
7770 0 : ZEND_VM_NEXT_OPCODE();
7771 : }
7772 :
7773 : static int ZEND_UNSET_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7774 0 : {
7775 0 : zend_op *opline = EX(opline);
7776 : zval tmp, *varname;
7777 : HashTable *target_symbol_table;
7778 : zend_free_op free_op1;
7779 :
7780 0 : varname = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7781 :
7782 0 : if (Z_TYPE_P(varname) != IS_STRING) {
7783 0 : tmp = *varname;
7784 0 : zval_copy_ctor(&tmp);
7785 0 : convert_to_string(&tmp);
7786 0 : varname = &tmp;
7787 : } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
7788 0 : varname->refcount++;
7789 : }
7790 :
7791 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
7792 0 : zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname) TSRMLS_CC);
7793 : } else {
7794 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC);
7795 0 : if (zend_hash_del(target_symbol_table, varname->value.str.val, varname->value.str.len+1) == SUCCESS) {
7796 0 : zend_execute_data *ex = execute_data;
7797 0 : ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
7798 :
7799 : do {
7800 : int i;
7801 :
7802 0 : if (ex->op_array) {
7803 0 : for (i = 0; i < ex->op_array->last_var; i++) {
7804 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
7805 : ex->op_array->vars[i].name_len == varname->value.str.len &&
7806 : !memcmp(ex->op_array->vars[i].name, varname->value.str.val, varname->value.str.len)) {
7807 0 : ex->CVs[i] = NULL;
7808 0 : break;
7809 : }
7810 : }
7811 : }
7812 0 : ex = ex->prev_execute_data;
7813 0 : } while (ex && ex->symbol_table == target_symbol_table);
7814 : }
7815 : }
7816 :
7817 0 : if (varname == &tmp) {
7818 0 : zval_dtor(&tmp);
7819 : } else if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
7820 0 : zval_ptr_dtor(&varname);
7821 : }
7822 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7823 0 : ZEND_VM_NEXT_OPCODE();
7824 : }
7825 :
7826 : static int ZEND_FE_RESET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7827 289 : {
7828 289 : zend_op *opline = EX(opline);
7829 : zend_free_op free_op1;
7830 : zval *array_ptr, **array_ptr_ptr;
7831 : HashTable *fe_ht;
7832 289 : zend_object_iterator *iter = NULL;
7833 289 : zend_class_entry *ce = NULL;
7834 289 : zend_bool is_empty = 0;
7835 :
7836 289 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
7837 0 : array_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7838 0 : if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) {
7839 0 : ALLOC_INIT_ZVAL(array_ptr);
7840 0 : } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
7841 0 : if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) {
7842 0 : zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class");
7843 0 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
7844 : }
7845 :
7846 0 : ce = Z_OBJCE_PP(array_ptr_ptr);
7847 0 : if (!ce || ce->get_iterator == NULL) {
7848 0 : SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
7849 0 : (*array_ptr_ptr)->refcount++;
7850 : }
7851 0 : array_ptr = *array_ptr_ptr;
7852 : } else {
7853 0 : if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) {
7854 0 : SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
7855 0 : if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
7856 0 : (*array_ptr_ptr)->is_ref = 1;
7857 : }
7858 : }
7859 0 : array_ptr = *array_ptr_ptr;
7860 0 : array_ptr->refcount++;
7861 : }
7862 : } else {
7863 289 : array_ptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7864 : if (0) { /* IS_TMP_VAR */
7865 : zval *tmp;
7866 :
7867 : ALLOC_ZVAL(tmp);
7868 : INIT_PZVAL_COPY(tmp, array_ptr);
7869 : array_ptr = tmp;
7870 289 : } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
7871 1 : ce = Z_OBJCE_P(array_ptr);
7872 1 : if (!ce || !ce->get_iterator) {
7873 1 : array_ptr->refcount++;
7874 : }
7875 : } else {
7876 288 : if (IS_VAR == IS_VAR &&
7877 : free_op1.var == NULL &&
7878 : !array_ptr->is_ref &&
7879 : array_ptr->refcount > 1) {
7880 : /* non-separated return value from function */
7881 : zval *tmp;
7882 :
7883 0 : ALLOC_ZVAL(tmp);
7884 0 : INIT_PZVAL_COPY(tmp, array_ptr);
7885 0 : zval_copy_ctor(tmp);
7886 0 : array_ptr = tmp;
7887 : } else {
7888 288 : array_ptr->refcount++;
7889 : }
7890 : }
7891 : }
7892 :
7893 289 : if (IS_VAR != IS_TMP_VAR && ce && ce->get_iterator) {
7894 0 : iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
7895 :
7896 0 : if (iter && !EG(exception)) {
7897 0 : array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
7898 : } else {
7899 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
7900 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7901 : } else {
7902 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7903 : }
7904 0 : if (!EG(exception)) {
7905 0 : zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
7906 : }
7907 0 : zend_throw_exception_internal(NULL TSRMLS_CC);
7908 0 : ZEND_VM_NEXT_OPCODE();
7909 : }
7910 : }
7911 :
7912 289 : PZVAL_LOCK(array_ptr);
7913 289 : EX_T(opline->result.u.var).var.ptr = array_ptr;
7914 289 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
7915 :
7916 289 : if (iter) {
7917 0 : iter->index = 0;
7918 0 : if (iter->funcs->rewind) {
7919 0 : iter->funcs->rewind(iter TSRMLS_CC);
7920 0 : if (EG(exception)) {
7921 0 : array_ptr->refcount--;
7922 0 : zval_ptr_dtor(&array_ptr);
7923 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
7924 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7925 : } else {
7926 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7927 : }
7928 0 : ZEND_VM_NEXT_OPCODE();
7929 : }
7930 : }
7931 0 : is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS;
7932 0 : if (EG(exception)) {
7933 0 : array_ptr->refcount--;
7934 0 : zval_ptr_dtor(&array_ptr);
7935 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
7936 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7937 : } else {
7938 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7939 : }
7940 0 : ZEND_VM_NEXT_OPCODE();
7941 : }
7942 0 : iter->index = -1; /* will be set to 0 before using next handler */
7943 289 : } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
7944 289 : zend_hash_internal_pointer_reset(fe_ht);
7945 289 : if (ce) {
7946 1 : zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC);
7947 2 : while (zend_hash_has_more_elements(fe_ht) == SUCCESS) {
7948 : char *str_key;
7949 : uint str_key_len;
7950 : ulong int_key;
7951 : zend_uchar key_type;
7952 :
7953 1 : key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
7954 1 : if (key_type != HASH_KEY_NON_EXISTANT &&
7955 : (key_type == HASH_KEY_IS_LONG ||
7956 : zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) {
7957 : break;
7958 : }
7959 0 : zend_hash_move_forward(fe_ht);
7960 : }
7961 : }
7962 289 : is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
7963 289 : zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos);
7964 : } else {
7965 0 : zend_error(E_WARNING, "Invalid argument supplied for foreach()");
7966 0 : is_empty = 1;
7967 : }
7968 :
7969 289 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
7970 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7971 : } else {
7972 289 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
7973 : }
7974 289 : if (is_empty) {
7975 222 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
7976 : } else {
7977 67 : ZEND_VM_NEXT_OPCODE();
7978 : }
7979 : }
7980 :
7981 : static int ZEND_FE_FETCH_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
7982 5340 : {
7983 5340 : zend_op *opline = EX(opline);
7984 : zend_free_op free_op1;
7985 5340 : zval *array = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
7986 : zval **value;
7987 : char *str_key;
7988 : uint str_key_len;
7989 : ulong int_key;
7990 : HashTable *fe_ht;
7991 5340 : zend_object_iterator *iter = NULL;
7992 5340 : int key_type = 0;
7993 5340 : zend_bool use_key = (zend_bool)(opline->extended_value & ZEND_FE_FETCH_WITH_KEY);
7994 :
7995 5340 : PZVAL_LOCK(array);
7996 :
7997 5340 : switch (zend_iterator_unwrap(array, &iter TSRMLS_CC)) {
7998 : default:
7999 : case ZEND_ITER_INVALID:
8000 0 : zend_error(E_WARNING, "Invalid argument supplied for foreach()");
8001 0 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
8002 :
8003 : case ZEND_ITER_PLAIN_OBJECT: {
8004 : char *class_name, *prop_name;
8005 4 : zend_object *zobj = zend_objects_get_address(array TSRMLS_CC);
8006 :
8007 4 : fe_ht = HASH_OF(array);
8008 4 : zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos);
8009 : do {
8010 4 : if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) {
8011 : /* reached end of iteration */
8012 1 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
8013 : }
8014 3 : key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
8015 :
8016 3 : zend_hash_move_forward(fe_ht);
8017 : } while (key_type == HASH_KEY_NON_EXISTANT ||
8018 : (key_type != HASH_KEY_IS_LONG &&
8019 3 : zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) != SUCCESS));
8020 3 : zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos);
8021 3 : if (use_key && key_type != HASH_KEY_IS_LONG) {
8022 3 : zend_unmangle_property_name(str_key, str_key_len-1, &class_name, &prop_name);
8023 3 : str_key_len = strlen(prop_name);
8024 3 : str_key = estrndup(prop_name, str_key_len);
8025 3 : str_key_len++;
8026 : }
8027 3 : break;
8028 : }
8029 :
8030 : case ZEND_ITER_PLAIN_ARRAY:
8031 5314 : fe_ht = HASH_OF(array);
8032 5314 : zend_hash_set_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos);
8033 5314 : if (zend_hash_get_current_data(fe_ht, (void **) &value)==FAILURE) {
8034 : /* reached end of iteration */
8035 300 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
8036 : }
8037 5014 : if (use_key) {
8038 2228 : key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 1, NULL);
8039 : }
8040 5014 : zend_hash_move_forward(fe_ht);
8041 5014 : zend_hash_get_pointer(fe_ht, &EX_T(opline->op1.u.var).fe.fe_pos);
8042 5014 : break;
8043 :
8044 : case ZEND_ITER_OBJECT:
8045 : /* !iter happens from exception */
8046 22 : if (iter && ++iter->index > 0) {
8047 : /* This could cause an endless loop if index becomes zero again.
8048 : * In case that ever happens we need an additional flag. */
8049 18 : iter->funcs->move_forward(iter TSRMLS_CC);
8050 18 : if (EG(exception)) {
8051 0 : array->refcount--;
8052 0 : zval_ptr_dtor(&array);
8053 0 : ZEND_VM_NEXT_OPCODE();
8054 : }
8055 : }
8056 : /* If index is zero we come from FE_RESET and checked valid() already. */
8057 22 : if (!iter || (iter->index > 0 && iter->funcs->valid(iter TSRMLS_CC) == FAILURE)) {
8058 : /* reached end of iteration */
8059 4 : if (EG(exception)) {
8060 0 : array->refcount--;
8061 0 : zval_ptr_dtor(&array);
8062 0 : ZEND_VM_NEXT_OPCODE();
8063 : }
8064 4 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
8065 : }
8066 18 : iter->funcs->get_current_data(iter, &value TSRMLS_CC);
8067 18 : if (EG(exception)) {
8068 0 : array->refcount--;
8069 0 : zval_ptr_dtor(&array);
8070 0 : ZEND_VM_NEXT_OPCODE();
8071 : }
8072 18 : if (!value) {
8073 : /* failure in get_current_data */
8074 0 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
8075 : }
8076 18 : if (use_key) {
8077 0 : if (iter->funcs->get_current_key) {
8078 0 : key_type = iter->funcs->get_current_key(iter, &str_key, &str_key_len, &int_key TSRMLS_CC);
8079 0 : if (EG(exception)) {
8080 0 : array->refcount--;
8081 0 : zval_ptr_dtor(&array);
8082 0 : ZEND_VM_NEXT_OPCODE();
8083 : }
8084 : } else {
8085 0 : key_type = HASH_KEY_IS_LONG;
8086 0 : int_key = iter->index;
8087 : }
8088 : }
8089 : break;
8090 : }
8091 :
8092 5035 : if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
8093 0 : SEPARATE_ZVAL_IF_NOT_REF(value);
8094 0 : (*value)->is_ref = 1;
8095 0 : EX_T(opline->result.u.var).var.ptr_ptr = value;
8096 0 : (*value)->refcount++;
8097 : } else {
8098 5035 : EX_T(opline->result.u.var).var.ptr_ptr = value;
8099 5035 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
8100 5035 : AI_USE_PTR(EX_T(opline->result.u.var).var);
8101 : }
8102 :
8103 5035 : if (use_key) {
8104 2231 : zend_op *op_data = opline+1;
8105 2231 : zval *key = &EX_T(op_data->result.u.var).tmp_var;
8106 :
8107 2231 : switch (key_type) {
8108 : case HASH_KEY_IS_STRING:
8109 2219 : Z_STRVAL_P(key) = str_key;
8110 2219 : Z_STRLEN_P(key) = str_key_len-1;
8111 2219 : Z_TYPE_P(key) = IS_STRING;
8112 2219 : break;
8113 : case HASH_KEY_IS_LONG:
8114 12 : Z_LVAL_P(key) = int_key;
8115 12 : Z_TYPE_P(key) = IS_LONG;
8116 12 : break;
8117 : default:
8118 : case HASH_KEY_NON_EXISTANT:
8119 0 : ZVAL_NULL(key);
8120 : break;
8121 : }
8122 : }
8123 :
8124 5035 : ZEND_VM_INC_OPCODE();
8125 5035 : ZEND_VM_NEXT_OPCODE();
8126 : }
8127 :
8128 : static int ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8129 0 : {
8130 0 : zend_op *opline = EX(opline);
8131 : zend_free_op free_op1;
8132 0 : zval tmp, *varname = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8133 : zval **value;
8134 0 : zend_bool isset = 1;
8135 : HashTable *target_symbol_table;
8136 :
8137 0 : if (Z_TYPE_P(varname) != IS_STRING) {
8138 0 : tmp = *varname;
8139 0 : zval_copy_ctor(&tmp);
8140 0 : convert_to_string(&tmp);
8141 0 : varname = &tmp;
8142 : }
8143 :
8144 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
8145 0 : value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1 TSRMLS_CC);
8146 0 : if (!value) {
8147 0 : isset = 0;
8148 : }
8149 : } else {
8150 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC);
8151 0 : if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
8152 0 : isset = 0;
8153 : }
8154 : }
8155 :
8156 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
8157 :
8158 0 : switch (opline->extended_value) {
8159 : case ZEND_ISSET:
8160 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
8161 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
8162 : } else {
8163 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset;
8164 : }
8165 0 : break;
8166 : case ZEND_ISEMPTY:
8167 0 : if (!isset || !i_zend_is_true(*value)) {
8168 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1;
8169 : } else {
8170 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
8171 : }
8172 : break;
8173 : }
8174 :
8175 0 : if (varname == &tmp) {
8176 0 : zval_dtor(&tmp);
8177 : }
8178 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8179 :
8180 0 : ZEND_VM_NEXT_OPCODE();
8181 : }
8182 :
8183 : static int ZEND_EXIT_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8184 0 : {
8185 : #if 0 || (IS_VAR != IS_UNUSED)
8186 0 : zend_op *opline = EX(opline);
8187 : if (IS_VAR != IS_UNUSED) {
8188 : zend_free_op free_op1;
8189 0 : zval *ptr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8190 :
8191 0 : if (Z_TYPE_P(ptr) == IS_LONG) {
8192 0 : EG(exit_status) = Z_LVAL_P(ptr);
8193 : } else {
8194 0 : zend_print_variable(ptr);
8195 : }
8196 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8197 : }
8198 : #endif
8199 0 : zend_bailout();
8200 0 : ZEND_VM_NEXT_OPCODE();
8201 : }
8202 :
8203 : static int ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8204 109 : {
8205 109 : zend_op *opline = EX(opline);
8206 : zend_free_op free_op1;
8207 109 : zval *value = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8208 :
8209 109 : EX_T(opline->result.u.var).tmp_var = *value;
8210 : if (!0) {
8211 109 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
8212 : }
8213 109 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8214 109 : ZEND_VM_NEXT_OPCODE();
8215 : }
8216 :
8217 : static int ZEND_INSTANCEOF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8218 0 : {
8219 0 : zend_op *opline = EX(opline);
8220 : zend_free_op free_op1;
8221 0 : zval *expr = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8222 : zend_bool result;
8223 :
8224 0 : if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
8225 0 : result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.u.var).class_entry TSRMLS_CC);
8226 : } else {
8227 0 : result = 0;
8228 : }
8229 0 : ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var, result);
8230 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8231 0 : ZEND_VM_NEXT_OPCODE();
8232 : }
8233 :
8234 : static int ZEND_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8235 0 : {
8236 0 : zend_op *opline = EX(opline);
8237 : zend_free_op free_op1;
8238 :
8239 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
8240 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8241 : &opline->op2.u.constant TSRMLS_CC);
8242 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8243 :
8244 0 : ZEND_VM_NEXT_OPCODE();
8245 : }
8246 :
8247 : static int ZEND_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8248 0 : {
8249 0 : zend_op *opline = EX(opline);
8250 : zend_free_op free_op1;
8251 :
8252 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
8253 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8254 : &opline->op2.u.constant TSRMLS_CC);
8255 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8256 :
8257 0 : ZEND_VM_NEXT_OPCODE();
8258 : }
8259 :
8260 : static int ZEND_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8261 0 : {
8262 0 : zend_op *opline = EX(opline);
8263 : zend_free_op free_op1;
8264 :
8265 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
8266 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8267 : &opline->op2.u.constant TSRMLS_CC);
8268 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8269 :
8270 0 : ZEND_VM_NEXT_OPCODE();
8271 : }
8272 :
8273 : static int ZEND_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8274 0 : {
8275 0 : zend_op *opline = EX(opline);
8276 : zend_free_op free_op1;
8277 :
8278 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
8279 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8280 : &opline->op2.u.constant TSRMLS_CC);
8281 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8282 :
8283 0 : ZEND_VM_NEXT_OPCODE();
8284 : }
8285 :
8286 : static int ZEND_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8287 0 : {
8288 0 : zend_op *opline = EX(opline);
8289 : zend_free_op free_op1;
8290 :
8291 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
8292 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8293 : &opline->op2.u.constant TSRMLS_CC);
8294 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8295 :
8296 0 : ZEND_VM_NEXT_OPCODE();
8297 : }
8298 :
8299 : static int ZEND_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8300 0 : {
8301 0 : zend_op *opline = EX(opline);
8302 : zend_free_op free_op1;
8303 :
8304 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
8305 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8306 : &opline->op2.u.constant TSRMLS_CC);
8307 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8308 :
8309 0 : ZEND_VM_NEXT_OPCODE();
8310 : }
8311 :
8312 : static int ZEND_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8313 0 : {
8314 0 : zend_op *opline = EX(opline);
8315 : zend_free_op free_op1;
8316 :
8317 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
8318 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8319 : &opline->op2.u.constant TSRMLS_CC);
8320 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8321 :
8322 0 : ZEND_VM_NEXT_OPCODE();
8323 : }
8324 :
8325 : static int ZEND_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8326 164 : {
8327 164 : zend_op *opline = EX(opline);
8328 : zend_free_op free_op1;
8329 :
8330 164 : concat_function(&EX_T(opline->result.u.var).tmp_var,
8331 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8332 : &opline->op2.u.constant TSRMLS_CC);
8333 164 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8334 :
8335 164 : ZEND_VM_NEXT_OPCODE();
8336 : }
8337 :
8338 : static int ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8339 1750 : {
8340 1750 : zend_op *opline = EX(opline);
8341 : zend_free_op free_op1;
8342 :
8343 1750 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
8344 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8345 : &opline->op2.u.constant TSRMLS_CC);
8346 1750 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8347 :
8348 1750 : ZEND_VM_NEXT_OPCODE();
8349 : }
8350 :
8351 : static int ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8352 3057 : {
8353 3057 : zend_op *opline = EX(opline);
8354 : zend_free_op free_op1;
8355 :
8356 3057 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
8357 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8358 : &opline->op2.u.constant TSRMLS_CC);
8359 3057 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8360 :
8361 3057 : ZEND_VM_NEXT_OPCODE();
8362 : }
8363 :
8364 : static int ZEND_IS_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8365 3733 : {
8366 3733 : zend_op *opline = EX(opline);
8367 : zend_free_op free_op1;
8368 :
8369 3733 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
8370 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8371 : &opline->op2.u.constant TSRMLS_CC);
8372 3733 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8373 :
8374 3733 : ZEND_VM_NEXT_OPCODE();
8375 : }
8376 :
8377 : static int ZEND_IS_NOT_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8378 2 : {
8379 2 : zend_op *opline = EX(opline);
8380 : zend_free_op free_op1;
8381 :
8382 2 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
8383 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8384 : &opline->op2.u.constant TSRMLS_CC);
8385 2 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8386 :
8387 2 : ZEND_VM_NEXT_OPCODE();
8388 : }
8389 :
8390 : static int ZEND_IS_SMALLER_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8391 0 : {
8392 0 : zend_op *opline = EX(opline);
8393 : zend_free_op free_op1;
8394 :
8395 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
8396 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8397 : &opline->op2.u.constant TSRMLS_CC);
8398 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8399 :
8400 0 : ZEND_VM_NEXT_OPCODE();
8401 : }
8402 :
8403 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8404 0 : {
8405 0 : zend_op *opline = EX(opline);
8406 : zend_free_op free_op1;
8407 :
8408 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
8409 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8410 : &opline->op2.u.constant TSRMLS_CC);
8411 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8412 :
8413 0 : ZEND_VM_NEXT_OPCODE();
8414 : }
8415 :
8416 : static int ZEND_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8417 0 : {
8418 0 : zend_op *opline = EX(opline);
8419 : zend_free_op free_op1;
8420 :
8421 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
8422 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8423 : &opline->op2.u.constant TSRMLS_CC);
8424 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8425 :
8426 0 : ZEND_VM_NEXT_OPCODE();
8427 : }
8428 :
8429 : static int ZEND_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8430 0 : {
8431 0 : zend_op *opline = EX(opline);
8432 : zend_free_op free_op1;
8433 :
8434 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
8435 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8436 : &opline->op2.u.constant TSRMLS_CC);
8437 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8438 :
8439 0 : ZEND_VM_NEXT_OPCODE();
8440 : }
8441 :
8442 : static int ZEND_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8443 0 : {
8444 0 : zend_op *opline = EX(opline);
8445 : zend_free_op free_op1;
8446 :
8447 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
8448 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8449 : &opline->op2.u.constant TSRMLS_CC);
8450 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8451 :
8452 0 : ZEND_VM_NEXT_OPCODE();
8453 : }
8454 :
8455 : static int ZEND_BOOL_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8456 0 : {
8457 0 : zend_op *opline = EX(opline);
8458 : zend_free_op free_op1;
8459 :
8460 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
8461 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
8462 : &opline->op2.u.constant TSRMLS_CC);
8463 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8464 :
8465 0 : ZEND_VM_NEXT_OPCODE();
8466 : }
8467 :
8468 : static int zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
8469 0 : {
8470 0 : zend_op *opline = EX(opline);
8471 0 : zend_op *op_data = opline+1;
8472 : zend_free_op free_op1, free_op_data1;
8473 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8474 : zval *object;
8475 0 : zval *property = &opline->op2.u.constant;
8476 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
8477 0 : znode *result = &opline->result;
8478 0 : zval **retval = &EX_T(result->u.var).var.ptr;
8479 0 : int have_get_ptr = 0;
8480 :
8481 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
8482 0 : make_real_object(object_ptr TSRMLS_CC);
8483 0 : object = *object_ptr;
8484 :
8485 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
8486 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
8487 :
8488 0 : FREE_OP(free_op_data1);
8489 :
8490 0 : if (!RETURN_VALUE_UNUSED(result)) {
8491 0 : *retval = EG(uninitialized_zval_ptr);
8492 0 : PZVAL_LOCK(*retval);
8493 : }
8494 : } else {
8495 : /* here we are sure we are dealing with an object */
8496 : if (0) {
8497 : MAKE_REAL_ZVAL_PTR(property);
8498 : }
8499 :
8500 : /* here property is a string */
8501 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
8502 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
8503 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
8504 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
8505 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
8506 :
8507 0 : have_get_ptr = 1;
8508 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
8509 0 : if (!RETURN_VALUE_UNUSED(result)) {
8510 0 : *retval = *zptr;
8511 0 : PZVAL_LOCK(*retval);
8512 : }
8513 : }
8514 : }
8515 :
8516 0 : if (!have_get_ptr) {
8517 0 : zval *z = NULL;
8518 :
8519 0 : switch (opline->extended_value) {
8520 : case ZEND_ASSIGN_OBJ:
8521 0 : if (Z_OBJ_HT_P(object)->read_property) {
8522 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
8523 : }
8524 0 : break;
8525 : case ZEND_ASSIGN_DIM:
8526 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
8527 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
8528 : }
8529 : break;
8530 : }
8531 0 : if (z) {
8532 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
8533 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
8534 :
8535 0 : if (z->refcount == 0) {
8536 0 : zval_dtor(z);
8537 0 : FREE_ZVAL(z);
8538 : }
8539 0 : z = value;
8540 : }
8541 0 : z->refcount++;
8542 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
8543 0 : binary_op(z, z, value TSRMLS_CC);
8544 0 : switch (opline->extended_value) {
8545 : case ZEND_ASSIGN_OBJ:
8546 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
8547 0 : break;
8548 : case ZEND_ASSIGN_DIM:
8549 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
8550 : break;
8551 : }
8552 0 : if (!RETURN_VALUE_UNUSED(result)) {
8553 0 : *retval = z;
8554 0 : PZVAL_LOCK(*retval);
8555 : }
8556 0 : zval_ptr_dtor(&z);
8557 : } else {
8558 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
8559 0 : if (!RETURN_VALUE_UNUSED(result)) {
8560 0 : *retval = EG(uninitialized_zval_ptr);
8561 0 : PZVAL_LOCK(*retval);
8562 : }
8563 : }
8564 : }
8565 :
8566 : if (0) {
8567 : zval_ptr_dtor(&property);
8568 : } else {
8569 :
8570 : }
8571 0 : FREE_OP(free_op_data1);
8572 : }
8573 :
8574 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8575 : /* assign_obj has two opcodes! */
8576 0 : ZEND_VM_INC_OPCODE();
8577 0 : ZEND_VM_NEXT_OPCODE();
8578 : }
8579 :
8580 : static int zend_binary_assign_op_helper_SPEC_VAR_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
8581 0 : {
8582 0 : zend_op *opline = EX(opline);
8583 : zend_free_op free_op1, free_op_data2, free_op_data1;
8584 : zval **var_ptr;
8585 : zval *value;
8586 0 : zend_bool increment_opline = 0;
8587 :
8588 0 : switch (opline->extended_value) {
8589 : case ZEND_ASSIGN_OBJ:
8590 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8591 : break;
8592 : case ZEND_ASSIGN_DIM: {
8593 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8594 :
8595 0 : if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) {
8596 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
8597 : }
8598 :
8599 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
8600 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8601 : } else {
8602 0 : zend_op *op_data = opline+1;
8603 0 : zval *dim = &opline->op2.u.constant;
8604 :
8605 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
8606 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
8607 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
8608 0 : increment_opline = 1;
8609 : }
8610 : }
8611 0 : break;
8612 : default:
8613 0 : value = &opline->op2.u.constant;
8614 0 : var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8615 : /* do nothing */
8616 : break;
8617 : }
8618 :
8619 0 : if (!var_ptr) {
8620 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
8621 : }
8622 :
8623 0 : if (*var_ptr == EG(error_zval_ptr)) {
8624 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
8625 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
8626 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
8627 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
8628 : }
8629 :
8630 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8631 0 : if (increment_opline) {
8632 0 : ZEND_VM_INC_OPCODE();
8633 : }
8634 0 : ZEND_VM_NEXT_OPCODE();
8635 : }
8636 :
8637 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
8638 :
8639 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
8640 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
8641 : /* proxy object */
8642 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
8643 0 : objval->refcount++;
8644 0 : binary_op(objval, objval, value TSRMLS_CC);
8645 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
8646 0 : zval_ptr_dtor(&objval);
8647 : } else {
8648 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
8649 : }
8650 :
8651 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
8652 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
8653 0 : PZVAL_LOCK(*var_ptr);
8654 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
8655 : }
8656 :
8657 0 : if (increment_opline) {
8658 0 : ZEND_VM_INC_OPCODE();
8659 0 : FREE_OP(free_op_data1);
8660 0 : FREE_OP_VAR_PTR(free_op_data2);
8661 : }
8662 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8663 0 : ZEND_VM_NEXT_OPCODE();
8664 : }
8665 :
8666 : static int ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8667 0 : {
8668 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8669 : }
8670 :
8671 : static int ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8672 0 : {
8673 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8674 : }
8675 :
8676 : static int ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8677 0 : {
8678 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8679 : }
8680 :
8681 : static int ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8682 0 : {
8683 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8684 : }
8685 :
8686 : static int ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8687 0 : {
8688 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8689 : }
8690 :
8691 : static int ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8692 0 : {
8693 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8694 : }
8695 :
8696 : static int ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8697 0 : {
8698 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8699 : }
8700 :
8701 : static int ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8702 0 : {
8703 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8704 : }
8705 :
8706 : static int ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8707 0 : {
8708 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8709 : }
8710 :
8711 : static int ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8712 0 : {
8713 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8714 : }
8715 :
8716 : static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8717 0 : {
8718 0 : return zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8719 : }
8720 :
8721 : static int zend_pre_incdec_property_helper_SPEC_VAR_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
8722 0 : {
8723 0 : zend_op *opline = EX(opline);
8724 : zend_free_op free_op1;
8725 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8726 : zval *object;
8727 0 : zval *property = &opline->op2.u.constant;
8728 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
8729 0 : int have_get_ptr = 0;
8730 :
8731 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
8732 0 : object = *object_ptr;
8733 :
8734 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
8735 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
8736 :
8737 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
8738 0 : *retval = EG(uninitialized_zval_ptr);
8739 0 : PZVAL_LOCK(*retval);
8740 : }
8741 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8742 0 : ZEND_VM_NEXT_OPCODE();
8743 : }
8744 :
8745 : /* here we are sure we are dealing with an object */
8746 :
8747 : if (0) {
8748 : MAKE_REAL_ZVAL_PTR(property);
8749 : }
8750 :
8751 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
8752 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
8753 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
8754 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
8755 :
8756 0 : have_get_ptr = 1;
8757 0 : incdec_op(*zptr);
8758 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
8759 0 : *retval = *zptr;
8760 0 : PZVAL_LOCK(*retval);
8761 : }
8762 : }
8763 : }
8764 :
8765 0 : if (!have_get_ptr) {
8766 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
8767 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
8768 :
8769 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
8770 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
8771 :
8772 0 : if (z->refcount == 0) {
8773 0 : zval_dtor(z);
8774 0 : FREE_ZVAL(z);
8775 : }
8776 0 : z = value;
8777 : }
8778 0 : z->refcount++;
8779 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
8780 0 : incdec_op(z);
8781 0 : *retval = z;
8782 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
8783 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
8784 0 : zval_ptr_dtor(&z);
8785 : } else {
8786 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
8787 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
8788 0 : *retval = EG(uninitialized_zval_ptr);
8789 0 : PZVAL_LOCK(*retval);
8790 : }
8791 : }
8792 : }
8793 :
8794 : if (0) {
8795 : zval_ptr_dtor(&property);
8796 : } else {
8797 :
8798 : }
8799 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8800 0 : ZEND_VM_NEXT_OPCODE();
8801 : }
8802 :
8803 : static int ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8804 0 : {
8805 0 : return zend_pre_incdec_property_helper_SPEC_VAR_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8806 : }
8807 :
8808 : static int ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8809 0 : {
8810 0 : return zend_pre_incdec_property_helper_SPEC_VAR_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8811 : }
8812 :
8813 : static int zend_post_incdec_property_helper_SPEC_VAR_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
8814 0 : {
8815 0 : zend_op *opline = EX(opline);
8816 : zend_free_op free_op1;
8817 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8818 : zval *object;
8819 0 : zval *property = &opline->op2.u.constant;
8820 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
8821 0 : int have_get_ptr = 0;
8822 :
8823 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
8824 0 : object = *object_ptr;
8825 :
8826 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
8827 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
8828 :
8829 0 : *retval = *EG(uninitialized_zval_ptr);
8830 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8831 0 : ZEND_VM_NEXT_OPCODE();
8832 : }
8833 :
8834 : /* here we are sure we are dealing with an object */
8835 :
8836 : if (0) {
8837 : MAKE_REAL_ZVAL_PTR(property);
8838 : }
8839 :
8840 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
8841 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
8842 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
8843 0 : have_get_ptr = 1;
8844 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
8845 :
8846 0 : *retval = **zptr;
8847 0 : zendi_zval_copy_ctor(*retval);
8848 :
8849 0 : incdec_op(*zptr);
8850 :
8851 : }
8852 : }
8853 :
8854 0 : if (!have_get_ptr) {
8855 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
8856 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
8857 : zval *z_copy;
8858 :
8859 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
8860 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
8861 :
8862 0 : if (z->refcount == 0) {
8863 0 : zval_dtor(z);
8864 0 : FREE_ZVAL(z);
8865 : }
8866 0 : z = value;
8867 : }
8868 0 : *retval = *z;
8869 0 : zendi_zval_copy_ctor(*retval);
8870 0 : ALLOC_ZVAL(z_copy);
8871 0 : *z_copy = *z;
8872 0 : zendi_zval_copy_ctor(*z_copy);
8873 0 : INIT_PZVAL(z_copy);
8874 0 : incdec_op(z_copy);
8875 0 : z->refcount++;
8876 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
8877 0 : zval_ptr_dtor(&z_copy);
8878 0 : zval_ptr_dtor(&z);
8879 : } else {
8880 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
8881 0 : *retval = *EG(uninitialized_zval_ptr);
8882 : }
8883 : }
8884 :
8885 : if (0) {
8886 : zval_ptr_dtor(&property);
8887 : } else {
8888 :
8889 : }
8890 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8891 0 : ZEND_VM_NEXT_OPCODE();
8892 : }
8893 :
8894 : static int ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8895 0 : {
8896 0 : return zend_post_incdec_property_helper_SPEC_VAR_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8897 : }
8898 :
8899 : static int ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8900 0 : {
8901 0 : return zend_post_incdec_property_helper_SPEC_VAR_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
8902 : }
8903 :
8904 : static int ZEND_FETCH_DIM_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8905 1476 : {
8906 1476 : zend_op *opline = EX(opline);
8907 : zend_free_op free_op1;
8908 1476 : zval *dim = &opline->op2.u.constant;
8909 :
8910 1476 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
8911 : IS_VAR != IS_CV &&
8912 : EX_T(opline->op1.u.var).var.ptr_ptr) {
8913 14 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
8914 : }
8915 1476 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
8916 :
8917 1476 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8918 1476 : ZEND_VM_NEXT_OPCODE();
8919 : }
8920 :
8921 : static int ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8922 0 : {
8923 0 : zend_op *opline = EX(opline);
8924 : zend_free_op free_op1;
8925 0 : zval *dim = &opline->op2.u.constant;
8926 :
8927 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
8928 :
8929 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
8930 : READY_TO_DESTROY(free_op1.var) &&
8931 : !RETURN_VALUE_UNUSED(&opline->result)) {
8932 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
8933 : }
8934 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8935 0 : ZEND_VM_NEXT_OPCODE();
8936 : }
8937 :
8938 : static int ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8939 0 : {
8940 0 : zend_op *opline = EX(opline);
8941 : zend_free_op free_op1;
8942 0 : zval *dim = &opline->op2.u.constant;
8943 :
8944 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
8945 :
8946 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
8947 : READY_TO_DESTROY(free_op1.var) &&
8948 : !RETURN_VALUE_UNUSED(&opline->result)) {
8949 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
8950 : }
8951 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8952 0 : ZEND_VM_NEXT_OPCODE();
8953 : }
8954 :
8955 : static int ZEND_FETCH_DIM_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8956 0 : {
8957 0 : zend_op *opline = EX(opline);
8958 : zend_free_op free_op1;
8959 0 : zval *dim = &opline->op2.u.constant;
8960 :
8961 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
8962 :
8963 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8964 0 : ZEND_VM_NEXT_OPCODE();
8965 : }
8966 :
8967 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8968 0 : {
8969 0 : zend_op *opline = EX(opline);
8970 : zend_free_op free_op1;
8971 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
8972 : zval *dim;
8973 :
8974 : if (IS_CONST == IS_UNUSED && type == BP_VAR_R) {
8975 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
8976 : }
8977 0 : dim = &opline->op2.u.constant;
8978 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC);
8979 :
8980 0 : if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
8981 : READY_TO_DESTROY(free_op1.var) &&
8982 : !RETURN_VALUE_UNUSED(&opline->result)) {
8983 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
8984 : }
8985 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
8986 0 : ZEND_VM_NEXT_OPCODE();
8987 : }
8988 :
8989 : static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
8990 0 : {
8991 0 : zend_op *opline = EX(opline);
8992 : zend_free_op free_op1;
8993 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
8994 0 : zval *dim = &opline->op2.u.constant;
8995 :
8996 : /* Not needed in DIM_UNSET
8997 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK) {
8998 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
8999 : }
9000 : */
9001 : if (IS_VAR == IS_CV) {
9002 : if (container != &EG(uninitialized_zval_ptr)) {
9003 : SEPARATE_ZVAL_IF_NOT_REF(container);
9004 : }
9005 : }
9006 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
9007 :
9008 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
9009 : READY_TO_DESTROY(free_op1.var) &&
9010 : !RETURN_VALUE_UNUSED(&opline->result)) {
9011 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
9012 : }
9013 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9014 0 : if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) {
9015 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
9016 : } else {
9017 : zend_free_op free_res;
9018 :
9019 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
9020 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
9021 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
9022 : }
9023 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
9024 0 : FREE_OP_VAR_PTR(free_res);
9025 : }
9026 0 : ZEND_VM_NEXT_OPCODE();
9027 : }
9028 :
9029 : static int zend_fetch_property_address_read_helper_SPEC_VAR_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
9030 47 : {
9031 47 : zend_op *opline = EX(opline);
9032 : zval *container;
9033 : zval **retval;
9034 : zend_free_op free_op1;
9035 :
9036 47 : retval = &EX_T(opline->result.u.var).var.ptr;
9037 47 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
9038 :
9039 47 : container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9040 :
9041 47 : if (container == EG(error_zval_ptr)) {
9042 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
9043 0 : *retval = EG(error_zval_ptr);
9044 0 : PZVAL_LOCK(*retval);
9045 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
9046 : }
9047 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9048 0 : ZEND_VM_NEXT_OPCODE();
9049 : }
9050 :
9051 :
9052 47 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
9053 0 : if (type != BP_VAR_IS) {
9054 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
9055 : }
9056 0 : *retval = EG(uninitialized_zval_ptr);
9057 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
9058 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
9059 : } else {
9060 :
9061 47 : zval *offset = &opline->op2.u.constant;
9062 :
9063 : if (0) {
9064 : MAKE_REAL_ZVAL_PTR(offset);
9065 : }
9066 :
9067 : /* here we are sure we are dealing with an object */
9068 47 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
9069 :
9070 47 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
9071 0 : zval_dtor(*retval);
9072 0 : FREE_ZVAL(*retval);
9073 : } else {
9074 47 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
9075 47 : AI_USE_PTR(EX_T(opline->result.u.var).var);
9076 : }
9077 :
9078 : if (0) {
9079 : zval_ptr_dtor(&offset);
9080 : } else {
9081 :
9082 : }
9083 : }
9084 :
9085 47 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9086 47 : ZEND_VM_NEXT_OPCODE();
9087 : }
9088 :
9089 : static int ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9090 47 : {
9091 47 : return zend_fetch_property_address_read_helper_SPEC_VAR_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
9092 : }
9093 :
9094 : static int ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9095 0 : {
9096 0 : zend_op *opline = EX(opline);
9097 : zend_free_op free_op1;
9098 0 : zval *property = &opline->op2.u.constant;
9099 :
9100 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_VAR != IS_CV) {
9101 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
9102 0 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
9103 : }
9104 :
9105 : if (0) {
9106 : MAKE_REAL_ZVAL_PTR(property);
9107 : }
9108 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
9109 : if (0) {
9110 : zval_ptr_dtor(&property);
9111 : } else {
9112 :
9113 : }
9114 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
9115 : READY_TO_DESTROY(free_op1.var) &&
9116 : !RETURN_VALUE_UNUSED(&opline->result)) {
9117 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
9118 : }
9119 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9120 0 : ZEND_VM_NEXT_OPCODE();
9121 : }
9122 :
9123 : static int ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9124 0 : {
9125 0 : zend_op *opline = EX(opline);
9126 : zend_free_op free_op1;
9127 0 : zval *property = &opline->op2.u.constant;
9128 :
9129 : if (0) {
9130 : MAKE_REAL_ZVAL_PTR(property);
9131 : }
9132 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
9133 : if (0) {
9134 : zval_ptr_dtor(&property);
9135 : } else {
9136 :
9137 : }
9138 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
9139 : READY_TO_DESTROY(free_op1.var) &&
9140 : !RETURN_VALUE_UNUSED(&opline->result)) {
9141 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
9142 : }
9143 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9144 0 : ZEND_VM_NEXT_OPCODE();
9145 : }
9146 :
9147 : static int ZEND_FETCH_OBJ_IS_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9148 0 : {
9149 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
9150 : }
9151 :
9152 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9153 0 : {
9154 0 : zend_op *opline = EX(opline);
9155 :
9156 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
9157 : /* Behave like FETCH_OBJ_W */
9158 : zend_free_op free_op1;
9159 0 : zval *property = &opline->op2.u.constant;
9160 :
9161 : if (0) {
9162 : MAKE_REAL_ZVAL_PTR(property);
9163 : }
9164 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
9165 : if (0) {
9166 : zval_ptr_dtor(&property);
9167 : } else {
9168 :
9169 : }
9170 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
9171 : READY_TO_DESTROY(free_op1.var) &&
9172 : !RETURN_VALUE_UNUSED(&opline->result)) {
9173 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
9174 : }
9175 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9176 0 : ZEND_VM_NEXT_OPCODE();
9177 : } else {
9178 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
9179 : }
9180 : }
9181 :
9182 : static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9183 0 : {
9184 0 : zend_op *opline = EX(opline);
9185 : zend_free_op free_op1, free_res;
9186 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9187 0 : zval *property = &opline->op2.u.constant;
9188 :
9189 : if (IS_VAR == IS_CV) {
9190 : if (container != &EG(uninitialized_zval_ptr)) {
9191 : SEPARATE_ZVAL_IF_NOT_REF(container);
9192 : }
9193 : }
9194 : if (0) {
9195 : MAKE_REAL_ZVAL_PTR(property);
9196 : }
9197 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
9198 : if (0) {
9199 : zval_ptr_dtor(&property);
9200 : } else {
9201 :
9202 : }
9203 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
9204 : READY_TO_DESTROY(free_op1.var) &&
9205 : !RETURN_VALUE_UNUSED(&opline->result)) {
9206 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
9207 : }
9208 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9209 :
9210 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
9211 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
9212 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
9213 : }
9214 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
9215 0 : FREE_OP_VAR_PTR(free_res);
9216 0 : ZEND_VM_NEXT_OPCODE();
9217 : }
9218 :
9219 : static int ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9220 2 : {
9221 2 : zend_op *opline = EX(opline);
9222 2 : zend_op *op_data = opline+1;
9223 : zend_free_op free_op1;
9224 2 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9225 :
9226 2 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
9227 2 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9228 : /* assign_obj has two opcodes! */
9229 2 : ZEND_VM_INC_OPCODE();
9230 2 : ZEND_VM_NEXT_OPCODE();
9231 : }
9232 :
9233 : static int ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9234 1 : {
9235 1 : zend_op *opline = EX(opline);
9236 1 : zend_op *op_data = opline+1;
9237 : zend_free_op free_op1;
9238 : zval **object_ptr;
9239 :
9240 1 : if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
9241 : /* not an array offset */
9242 1 : object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9243 : } else {
9244 0 : object_ptr = NULL;
9245 : }
9246 :
9247 1 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
9248 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
9249 : } else {
9250 : zend_free_op free_op_data1;
9251 : zval *value;
9252 1 : zval *dim = &opline->op2.u.constant;
9253 :
9254 1 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
9255 :
9256 1 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
9257 1 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
9258 1 : FREE_OP_IF_VAR(free_op_data1);
9259 : }
9260 1 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9261 : /* assign_dim has two opcodes! */
9262 1 : ZEND_VM_INC_OPCODE();
9263 1 : ZEND_VM_NEXT_OPCODE();
9264 : }
9265 :
9266 : static int ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9267 0 : {
9268 0 : zend_op *opline = EX(opline);
9269 :
9270 0 : zval *value = &opline->op2.u.constant;
9271 :
9272 0 : zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_CONST), EX(Ts) TSRMLS_CC);
9273 : /* zend_assign_to_variable() always takes care of op2, never free it! */
9274 :
9275 0 : ZEND_VM_NEXT_OPCODE();
9276 : }
9277 :
9278 : static int ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9279 37 : {
9280 37 : zend_op *opline = EX(opline);
9281 : zval *function_name;
9282 : char *function_name_strval;
9283 : int function_name_strlen;
9284 : zend_free_op free_op1;
9285 :
9286 37 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
9287 :
9288 37 : function_name = &opline->op2.u.constant;
9289 :
9290 37 : if (Z_TYPE_P(function_name)!=IS_STRING) {
9291 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
9292 : }
9293 :
9294 37 : function_name_strval = Z_STRVAL_P(function_name);
9295 37 : function_name_strlen = Z_STRLEN_P(function_name);
9296 :
9297 37 : EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9298 :
9299 37 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
9300 37 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
9301 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
9302 : }
9303 :
9304 : /* First, locate the function. */
9305 37 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
9306 37 : if (!EX(fbc)) {
9307 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
9308 : }
9309 : } else {
9310 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
9311 : }
9312 :
9313 37 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
9314 0 : EX(object) = NULL;
9315 : } else {
9316 37 : if (!PZVAL_IS_REF(EX(object))) {
9317 37 : EX(object)->refcount++; /* For $this pointer */
9318 : } else {
9319 : zval *this_ptr;
9320 0 : ALLOC_ZVAL(this_ptr);
9321 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
9322 0 : zval_copy_ctor(this_ptr);
9323 0 : EX(object) = this_ptr;
9324 : }
9325 : }
9326 :
9327 37 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9328 :
9329 37 : ZEND_VM_NEXT_OPCODE();
9330 : }
9331 :
9332 : static int ZEND_CASE_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9333 0 : {
9334 0 : zend_op *opline = EX(opline);
9335 0 : int switch_expr_is_overloaded=0;
9336 : zend_free_op free_op1;
9337 :
9338 : if (IS_VAR==IS_VAR) {
9339 0 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
9340 0 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
9341 : } else {
9342 0 : switch_expr_is_overloaded = 1;
9343 0 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
9344 : }
9345 : }
9346 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
9347 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9348 : &opline->op2.u.constant TSRMLS_CC);
9349 :
9350 0 : if (switch_expr_is_overloaded) {
9351 : /* We only free op1 if this is a string offset,
9352 : * Since if it is a TMP_VAR, it'll be reused by
9353 : * other CASE opcodes (whereas string offsets
9354 : * are allocated at each get_zval_ptr())
9355 : */
9356 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9357 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
9358 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
9359 : }
9360 0 : ZEND_VM_NEXT_OPCODE();
9361 : }
9362 :
9363 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9364 0 : {
9365 0 : zend_op *opline = EX(opline);
9366 : zend_free_op free_op1;
9367 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
9368 : zval *expr_ptr;
9369 0 : zval *offset=&opline->op2.u.constant;
9370 :
9371 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
9372 0 : zval **expr_ptr_ptr = NULL;
9373 :
9374 0 : if (opline->extended_value) {
9375 0 : expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9376 0 : expr_ptr = *expr_ptr_ptr;
9377 : } else {
9378 0 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9379 : }
9380 : #else
9381 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9382 : #endif
9383 :
9384 : if (0) { /* temporary variable */
9385 : zval *new_expr;
9386 :
9387 : ALLOC_ZVAL(new_expr);
9388 : INIT_PZVAL_COPY(new_expr, expr_ptr);
9389 : expr_ptr = new_expr;
9390 : } else {
9391 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
9392 0 : if (opline->extended_value) {
9393 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
9394 0 : expr_ptr = *expr_ptr_ptr;
9395 0 : expr_ptr->refcount++;
9396 : } else
9397 : #endif
9398 0 : if (PZVAL_IS_REF(expr_ptr)) {
9399 : zval *new_expr;
9400 :
9401 0 : ALLOC_ZVAL(new_expr);
9402 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
9403 0 : expr_ptr = new_expr;
9404 0 : zendi_zval_copy_ctor(*expr_ptr);
9405 : } else {
9406 0 : expr_ptr->refcount++;
9407 : }
9408 : }
9409 0 : if (offset) {
9410 0 : switch (Z_TYPE_P(offset)) {
9411 : case IS_DOUBLE:
9412 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
9413 0 : break;
9414 : case IS_LONG:
9415 : case IS_BOOL:
9416 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
9417 0 : break;
9418 : case IS_STRING:
9419 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
9420 0 : break;
9421 : case IS_NULL:
9422 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
9423 0 : break;
9424 : default:
9425 0 : zend_error(E_WARNING, "Illegal offset type");
9426 0 : zval_ptr_dtor(&expr_ptr);
9427 : /* do nothing */
9428 : break;
9429 : }
9430 :
9431 : } else {
9432 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
9433 : }
9434 0 : if (opline->extended_value) {
9435 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9436 : } else {
9437 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9438 : }
9439 0 : ZEND_VM_NEXT_OPCODE();
9440 : }
9441 :
9442 : static int ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9443 0 : {
9444 0 : zend_op *opline = EX(opline);
9445 :
9446 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
9447 : if (IS_VAR == IS_UNUSED) {
9448 : ZEND_VM_NEXT_OPCODE();
9449 : #if 0 || IS_VAR != IS_UNUSED
9450 : } else {
9451 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
9452 : #endif
9453 : }
9454 : }
9455 :
9456 : static int ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9457 0 : {
9458 0 : zend_op *opline = EX(opline);
9459 : zend_free_op free_op1;
9460 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9461 0 : zval *offset = &opline->op2.u.constant;
9462 : long index;
9463 :
9464 0 : if (container) {
9465 : if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
9466 : SEPARATE_ZVAL_IF_NOT_REF(container);
9467 : }
9468 0 : switch (Z_TYPE_PP(container)) {
9469 : case IS_ARRAY: {
9470 0 : HashTable *ht = Z_ARRVAL_PP(container);
9471 :
9472 0 : switch (Z_TYPE_P(offset)) {
9473 : case IS_DOUBLE:
9474 0 : index = (long) Z_DVAL_P(offset);
9475 0 : zend_hash_index_del(ht, index);
9476 0 : break;
9477 : case IS_RESOURCE:
9478 : case IS_BOOL:
9479 : case IS_LONG:
9480 0 : index = Z_LVAL_P(offset);
9481 0 : zend_hash_index_del(ht, index);
9482 0 : break;
9483 : case IS_STRING:
9484 : if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
9485 : offset->refcount++;
9486 : }
9487 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
9488 : ht == &EG(symbol_table)) {
9489 : zend_execute_data *ex;
9490 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
9491 :
9492 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
9493 0 : if (ex->op_array && ex->symbol_table == ht) {
9494 : int i;
9495 :
9496 0 : for (i = 0; i < ex->op_array->last_var; i++) {
9497 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
9498 : ex->op_array->vars[i].name_len == offset->value.str.len &&
9499 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
9500 0 : ex->CVs[i] = NULL;
9501 0 : break;
9502 : }
9503 : }
9504 : }
9505 : }
9506 : }
9507 : if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
9508 : zval_ptr_dtor(&offset);
9509 : }
9510 0 : break;
9511 : case IS_NULL:
9512 0 : zend_hash_del(ht, "", sizeof(""));
9513 0 : break;
9514 : default:
9515 0 : zend_error(E_WARNING, "Illegal offset type in unset");
9516 : break;
9517 : }
9518 :
9519 0 : break;
9520 : }
9521 : case IS_OBJECT:
9522 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
9523 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
9524 : }
9525 : if (0) {
9526 : MAKE_REAL_ZVAL_PTR(offset);
9527 : }
9528 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
9529 : if (0) {
9530 : zval_ptr_dtor(&offset);
9531 : } else {
9532 :
9533 : }
9534 0 : break;
9535 : case IS_STRING:
9536 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
9537 : ZEND_VM_CONTINUE(); /* bailed out before */
9538 : default:
9539 :
9540 : break;
9541 : }
9542 : } else {
9543 :
9544 : }
9545 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9546 :
9547 0 : ZEND_VM_NEXT_OPCODE();
9548 : }
9549 :
9550 : static int ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9551 0 : {
9552 0 : zend_op *opline = EX(opline);
9553 : zend_free_op free_op1;
9554 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9555 0 : zval *offset = &opline->op2.u.constant;
9556 :
9557 0 : if (container) {
9558 : if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
9559 : SEPARATE_ZVAL_IF_NOT_REF(container);
9560 : }
9561 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
9562 : if (0) {
9563 : MAKE_REAL_ZVAL_PTR(offset);
9564 : }
9565 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
9566 : if (0) {
9567 : zval_ptr_dtor(&offset);
9568 : } else {
9569 :
9570 : }
9571 : } else {
9572 :
9573 : }
9574 : } else {
9575 :
9576 : }
9577 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9578 :
9579 0 : ZEND_VM_NEXT_OPCODE();
9580 : }
9581 :
9582 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
9583 0 : {
9584 0 : zend_op *opline = EX(opline);
9585 : zend_free_op free_op1;
9586 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9587 0 : zval **value = NULL;
9588 0 : int result = 0;
9589 : long index;
9590 :
9591 0 : if (container) {
9592 :
9593 0 : zval *offset = &opline->op2.u.constant;
9594 :
9595 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
9596 : HashTable *ht;
9597 0 : int isset = 0;
9598 :
9599 0 : ht = Z_ARRVAL_PP(container);
9600 :
9601 0 : switch (Z_TYPE_P(offset)) {
9602 : case IS_DOUBLE:
9603 0 : index = (long) Z_DVAL_P(offset);
9604 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
9605 0 : isset = 1;
9606 : }
9607 0 : break;
9608 : case IS_RESOURCE:
9609 : case IS_BOOL:
9610 : case IS_LONG:
9611 0 : index = Z_LVAL_P(offset);
9612 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
9613 0 : isset = 1;
9614 : }
9615 0 : break;
9616 : case IS_STRING:
9617 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
9618 0 : isset = 1;
9619 : }
9620 0 : break;
9621 : case IS_NULL:
9622 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
9623 0 : isset = 1;
9624 : }
9625 0 : break;
9626 : default:
9627 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
9628 :
9629 : break;
9630 : }
9631 :
9632 0 : switch (opline->extended_value) {
9633 : case ZEND_ISSET:
9634 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
9635 0 : result = 0;
9636 : } else {
9637 0 : result = isset;
9638 : }
9639 0 : break;
9640 : case ZEND_ISEMPTY:
9641 0 : if (!isset || !i_zend_is_true(*value)) {
9642 0 : result = 0;
9643 : } else {
9644 0 : result = 1;
9645 : }
9646 : break;
9647 : }
9648 :
9649 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
9650 : if (0) {
9651 : MAKE_REAL_ZVAL_PTR(offset);
9652 : }
9653 0 : if (prop_dim) {
9654 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
9655 : } else {
9656 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
9657 : }
9658 : if (0) {
9659 : zval_ptr_dtor(&offset);
9660 : } else {
9661 :
9662 : }
9663 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
9664 : zval tmp;
9665 :
9666 0 : if (Z_TYPE_P(offset) != IS_LONG) {
9667 0 : tmp = *offset;
9668 0 : zval_copy_ctor(&tmp);
9669 0 : convert_to_long(&tmp);
9670 0 : offset = &tmp;
9671 : }
9672 0 : if (Z_TYPE_P(offset) == IS_LONG) {
9673 0 : switch (opline->extended_value) {
9674 : case ZEND_ISSET:
9675 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
9676 0 : result = 1;
9677 : }
9678 0 : break;
9679 : case ZEND_ISEMPTY:
9680 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
9681 0 : result = 1;
9682 : }
9683 : break;
9684 : }
9685 : }
9686 :
9687 : } else {
9688 :
9689 : }
9690 : }
9691 :
9692 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
9693 :
9694 0 : switch (opline->extended_value) {
9695 : case ZEND_ISSET:
9696 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
9697 0 : break;
9698 : case ZEND_ISEMPTY:
9699 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
9700 : break;
9701 : }
9702 :
9703 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9704 :
9705 0 : ZEND_VM_NEXT_OPCODE();
9706 : }
9707 :
9708 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9709 0 : {
9710 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
9711 : }
9712 :
9713 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9714 0 : {
9715 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
9716 : }
9717 :
9718 : static int ZEND_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9719 0 : {
9720 0 : zend_op *opline = EX(opline);
9721 : zend_free_op free_op1, free_op2;
9722 :
9723 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
9724 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9725 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9726 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9727 0 : zval_dtor(free_op2.var);
9728 0 : ZEND_VM_NEXT_OPCODE();
9729 : }
9730 :
9731 : static int ZEND_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9732 0 : {
9733 0 : zend_op *opline = EX(opline);
9734 : zend_free_op free_op1, free_op2;
9735 :
9736 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
9737 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9738 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9739 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9740 0 : zval_dtor(free_op2.var);
9741 0 : ZEND_VM_NEXT_OPCODE();
9742 : }
9743 :
9744 : static int ZEND_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9745 0 : {
9746 0 : zend_op *opline = EX(opline);
9747 : zend_free_op free_op1, free_op2;
9748 :
9749 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
9750 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9751 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9752 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9753 0 : zval_dtor(free_op2.var);
9754 0 : ZEND_VM_NEXT_OPCODE();
9755 : }
9756 :
9757 : static int ZEND_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9758 0 : {
9759 0 : zend_op *opline = EX(opline);
9760 : zend_free_op free_op1, free_op2;
9761 :
9762 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
9763 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9764 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9765 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9766 0 : zval_dtor(free_op2.var);
9767 0 : ZEND_VM_NEXT_OPCODE();
9768 : }
9769 :
9770 : static int ZEND_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9771 0 : {
9772 0 : zend_op *opline = EX(opline);
9773 : zend_free_op free_op1, free_op2;
9774 :
9775 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
9776 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9777 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9778 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9779 0 : zval_dtor(free_op2.var);
9780 0 : ZEND_VM_NEXT_OPCODE();
9781 : }
9782 :
9783 : static int ZEND_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9784 0 : {
9785 0 : zend_op *opline = EX(opline);
9786 : zend_free_op free_op1, free_op2;
9787 :
9788 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
9789 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9790 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9791 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9792 0 : zval_dtor(free_op2.var);
9793 0 : ZEND_VM_NEXT_OPCODE();
9794 : }
9795 :
9796 : static int ZEND_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9797 0 : {
9798 0 : zend_op *opline = EX(opline);
9799 : zend_free_op free_op1, free_op2;
9800 :
9801 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
9802 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9803 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9804 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9805 0 : zval_dtor(free_op2.var);
9806 0 : ZEND_VM_NEXT_OPCODE();
9807 : }
9808 :
9809 : static int ZEND_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9810 109 : {
9811 109 : zend_op *opline = EX(opline);
9812 : zend_free_op free_op1, free_op2;
9813 :
9814 109 : concat_function(&EX_T(opline->result.u.var).tmp_var,
9815 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9816 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9817 109 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9818 109 : zval_dtor(free_op2.var);
9819 109 : ZEND_VM_NEXT_OPCODE();
9820 : }
9821 :
9822 : static int ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9823 0 : {
9824 0 : zend_op *opline = EX(opline);
9825 : zend_free_op free_op1, free_op2;
9826 :
9827 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
9828 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9829 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9830 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9831 0 : zval_dtor(free_op2.var);
9832 0 : ZEND_VM_NEXT_OPCODE();
9833 : }
9834 :
9835 : static int ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9836 0 : {
9837 0 : zend_op *opline = EX(opline);
9838 : zend_free_op free_op1, free_op2;
9839 :
9840 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
9841 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9842 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9843 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9844 0 : zval_dtor(free_op2.var);
9845 0 : ZEND_VM_NEXT_OPCODE();
9846 : }
9847 :
9848 : static int ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9849 0 : {
9850 0 : zend_op *opline = EX(opline);
9851 : zend_free_op free_op1, free_op2;
9852 :
9853 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
9854 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9855 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9856 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9857 0 : zval_dtor(free_op2.var);
9858 0 : ZEND_VM_NEXT_OPCODE();
9859 : }
9860 :
9861 : static int ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9862 0 : {
9863 0 : zend_op *opline = EX(opline);
9864 : zend_free_op free_op1, free_op2;
9865 :
9866 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
9867 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9868 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9869 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9870 0 : zval_dtor(free_op2.var);
9871 0 : ZEND_VM_NEXT_OPCODE();
9872 : }
9873 :
9874 : static int ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9875 0 : {
9876 0 : zend_op *opline = EX(opline);
9877 : zend_free_op free_op1, free_op2;
9878 :
9879 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
9880 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9881 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9882 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9883 0 : zval_dtor(free_op2.var);
9884 0 : ZEND_VM_NEXT_OPCODE();
9885 : }
9886 :
9887 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9888 0 : {
9889 0 : zend_op *opline = EX(opline);
9890 : zend_free_op free_op1, free_op2;
9891 :
9892 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
9893 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9894 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9895 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9896 0 : zval_dtor(free_op2.var);
9897 0 : ZEND_VM_NEXT_OPCODE();
9898 : }
9899 :
9900 : static int ZEND_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9901 0 : {
9902 0 : zend_op *opline = EX(opline);
9903 : zend_free_op free_op1, free_op2;
9904 :
9905 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
9906 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9907 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9908 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9909 0 : zval_dtor(free_op2.var);
9910 0 : ZEND_VM_NEXT_OPCODE();
9911 : }
9912 :
9913 : static int ZEND_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9914 0 : {
9915 0 : zend_op *opline = EX(opline);
9916 : zend_free_op free_op1, free_op2;
9917 :
9918 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
9919 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9920 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9921 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9922 0 : zval_dtor(free_op2.var);
9923 0 : ZEND_VM_NEXT_OPCODE();
9924 : }
9925 :
9926 : static int ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9927 0 : {
9928 0 : zend_op *opline = EX(opline);
9929 : zend_free_op free_op1, free_op2;
9930 :
9931 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
9932 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9933 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9934 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9935 0 : zval_dtor(free_op2.var);
9936 0 : ZEND_VM_NEXT_OPCODE();
9937 : }
9938 :
9939 : static int ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
9940 0 : {
9941 0 : zend_op *opline = EX(opline);
9942 : zend_free_op free_op1, free_op2;
9943 :
9944 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
9945 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
9946 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
9947 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
9948 0 : zval_dtor(free_op2.var);
9949 0 : ZEND_VM_NEXT_OPCODE();
9950 : }
9951 :
9952 : static int zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
9953 0 : {
9954 0 : zend_op *opline = EX(opline);
9955 0 : zend_op *op_data = opline+1;
9956 : zend_free_op free_op1, free_op2, free_op_data1;
9957 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
9958 : zval *object;
9959 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
9960 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
9961 0 : znode *result = &opline->result;
9962 0 : zval **retval = &EX_T(result->u.var).var.ptr;
9963 0 : int have_get_ptr = 0;
9964 :
9965 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
9966 0 : make_real_object(object_ptr TSRMLS_CC);
9967 0 : object = *object_ptr;
9968 :
9969 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
9970 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
9971 0 : zval_dtor(free_op2.var);
9972 0 : FREE_OP(free_op_data1);
9973 :
9974 0 : if (!RETURN_VALUE_UNUSED(result)) {
9975 0 : *retval = EG(uninitialized_zval_ptr);
9976 0 : PZVAL_LOCK(*retval);
9977 : }
9978 : } else {
9979 : /* here we are sure we are dealing with an object */
9980 : if (1) {
9981 0 : MAKE_REAL_ZVAL_PTR(property);
9982 : }
9983 :
9984 : /* here property is a string */
9985 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
9986 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
9987 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
9988 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
9989 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
9990 :
9991 0 : have_get_ptr = 1;
9992 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
9993 0 : if (!RETURN_VALUE_UNUSED(result)) {
9994 0 : *retval = *zptr;
9995 0 : PZVAL_LOCK(*retval);
9996 : }
9997 : }
9998 : }
9999 :
10000 0 : if (!have_get_ptr) {
10001 0 : zval *z = NULL;
10002 :
10003 0 : switch (opline->extended_value) {
10004 : case ZEND_ASSIGN_OBJ:
10005 0 : if (Z_OBJ_HT_P(object)->read_property) {
10006 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
10007 : }
10008 0 : break;
10009 : case ZEND_ASSIGN_DIM:
10010 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
10011 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
10012 : }
10013 : break;
10014 : }
10015 0 : if (z) {
10016 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
10017 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
10018 :
10019 0 : if (z->refcount == 0) {
10020 0 : zval_dtor(z);
10021 0 : FREE_ZVAL(z);
10022 : }
10023 0 : z = value;
10024 : }
10025 0 : z->refcount++;
10026 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
10027 0 : binary_op(z, z, value TSRMLS_CC);
10028 0 : switch (opline->extended_value) {
10029 : case ZEND_ASSIGN_OBJ:
10030 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
10031 0 : break;
10032 : case ZEND_ASSIGN_DIM:
10033 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
10034 : break;
10035 : }
10036 0 : if (!RETURN_VALUE_UNUSED(result)) {
10037 0 : *retval = z;
10038 0 : PZVAL_LOCK(*retval);
10039 : }
10040 0 : zval_ptr_dtor(&z);
10041 : } else {
10042 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
10043 0 : if (!RETURN_VALUE_UNUSED(result)) {
10044 0 : *retval = EG(uninitialized_zval_ptr);
10045 0 : PZVAL_LOCK(*retval);
10046 : }
10047 : }
10048 : }
10049 :
10050 : if (1) {
10051 0 : zval_ptr_dtor(&property);
10052 : } else {
10053 : zval_dtor(free_op2.var);
10054 : }
10055 0 : FREE_OP(free_op_data1);
10056 : }
10057 :
10058 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10059 : /* assign_obj has two opcodes! */
10060 0 : ZEND_VM_INC_OPCODE();
10061 0 : ZEND_VM_NEXT_OPCODE();
10062 : }
10063 :
10064 : static int zend_binary_assign_op_helper_SPEC_VAR_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
10065 0 : {
10066 0 : zend_op *opline = EX(opline);
10067 : zend_free_op free_op1, free_op2, free_op_data2, free_op_data1;
10068 : zval **var_ptr;
10069 : zval *value;
10070 0 : zend_bool increment_opline = 0;
10071 :
10072 0 : switch (opline->extended_value) {
10073 : case ZEND_ASSIGN_OBJ:
10074 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10075 : break;
10076 : case ZEND_ASSIGN_DIM: {
10077 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10078 :
10079 0 : if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) {
10080 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
10081 : }
10082 :
10083 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
10084 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10085 : } else {
10086 0 : zend_op *op_data = opline+1;
10087 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10088 :
10089 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
10090 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
10091 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
10092 0 : increment_opline = 1;
10093 : }
10094 : }
10095 0 : break;
10096 : default:
10097 0 : value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10098 0 : var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10099 : /* do nothing */
10100 : break;
10101 : }
10102 :
10103 0 : if (!var_ptr) {
10104 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
10105 : }
10106 :
10107 0 : if (*var_ptr == EG(error_zval_ptr)) {
10108 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
10109 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
10110 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
10111 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10112 : }
10113 0 : zval_dtor(free_op2.var);
10114 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10115 0 : if (increment_opline) {
10116 0 : ZEND_VM_INC_OPCODE();
10117 : }
10118 0 : ZEND_VM_NEXT_OPCODE();
10119 : }
10120 :
10121 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
10122 :
10123 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
10124 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
10125 : /* proxy object */
10126 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
10127 0 : objval->refcount++;
10128 0 : binary_op(objval, objval, value TSRMLS_CC);
10129 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
10130 0 : zval_ptr_dtor(&objval);
10131 : } else {
10132 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
10133 : }
10134 :
10135 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
10136 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
10137 0 : PZVAL_LOCK(*var_ptr);
10138 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10139 : }
10140 0 : zval_dtor(free_op2.var);
10141 :
10142 0 : if (increment_opline) {
10143 0 : ZEND_VM_INC_OPCODE();
10144 0 : FREE_OP(free_op_data1);
10145 0 : FREE_OP_VAR_PTR(free_op_data2);
10146 : }
10147 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10148 0 : ZEND_VM_NEXT_OPCODE();
10149 : }
10150 :
10151 : static int ZEND_ASSIGN_ADD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10152 0 : {
10153 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10154 : }
10155 :
10156 : static int ZEND_ASSIGN_SUB_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10157 0 : {
10158 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10159 : }
10160 :
10161 : static int ZEND_ASSIGN_MUL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10162 0 : {
10163 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10164 : }
10165 :
10166 : static int ZEND_ASSIGN_DIV_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10167 0 : {
10168 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10169 : }
10170 :
10171 : static int ZEND_ASSIGN_MOD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10172 0 : {
10173 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10174 : }
10175 :
10176 : static int ZEND_ASSIGN_SL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10177 0 : {
10178 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10179 : }
10180 :
10181 : static int ZEND_ASSIGN_SR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10182 0 : {
10183 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10184 : }
10185 :
10186 : static int ZEND_ASSIGN_CONCAT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10187 0 : {
10188 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10189 : }
10190 :
10191 : static int ZEND_ASSIGN_BW_OR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10192 0 : {
10193 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10194 : }
10195 :
10196 : static int ZEND_ASSIGN_BW_AND_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10197 0 : {
10198 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10199 : }
10200 :
10201 : static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10202 0 : {
10203 0 : return zend_binary_assign_op_helper_SPEC_VAR_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10204 : }
10205 :
10206 : static int zend_pre_incdec_property_helper_SPEC_VAR_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
10207 0 : {
10208 0 : zend_op *opline = EX(opline);
10209 : zend_free_op free_op1, free_op2;
10210 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10211 : zval *object;
10212 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10213 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
10214 0 : int have_get_ptr = 0;
10215 :
10216 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
10217 0 : object = *object_ptr;
10218 :
10219 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
10220 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
10221 0 : zval_dtor(free_op2.var);
10222 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
10223 0 : *retval = EG(uninitialized_zval_ptr);
10224 0 : PZVAL_LOCK(*retval);
10225 : }
10226 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10227 0 : ZEND_VM_NEXT_OPCODE();
10228 : }
10229 :
10230 : /* here we are sure we are dealing with an object */
10231 :
10232 : if (1) {
10233 0 : MAKE_REAL_ZVAL_PTR(property);
10234 : }
10235 :
10236 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
10237 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
10238 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
10239 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
10240 :
10241 0 : have_get_ptr = 1;
10242 0 : incdec_op(*zptr);
10243 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
10244 0 : *retval = *zptr;
10245 0 : PZVAL_LOCK(*retval);
10246 : }
10247 : }
10248 : }
10249 :
10250 0 : if (!have_get_ptr) {
10251 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
10252 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
10253 :
10254 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
10255 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
10256 :
10257 0 : if (z->refcount == 0) {
10258 0 : zval_dtor(z);
10259 0 : FREE_ZVAL(z);
10260 : }
10261 0 : z = value;
10262 : }
10263 0 : z->refcount++;
10264 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
10265 0 : incdec_op(z);
10266 0 : *retval = z;
10267 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
10268 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
10269 0 : zval_ptr_dtor(&z);
10270 : } else {
10271 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
10272 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
10273 0 : *retval = EG(uninitialized_zval_ptr);
10274 0 : PZVAL_LOCK(*retval);
10275 : }
10276 : }
10277 : }
10278 :
10279 : if (1) {
10280 0 : zval_ptr_dtor(&property);
10281 : } else {
10282 : zval_dtor(free_op2.var);
10283 : }
10284 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10285 0 : ZEND_VM_NEXT_OPCODE();
10286 : }
10287 :
10288 : static int ZEND_PRE_INC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10289 0 : {
10290 0 : return zend_pre_incdec_property_helper_SPEC_VAR_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10291 : }
10292 :
10293 : static int ZEND_PRE_DEC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10294 0 : {
10295 0 : return zend_pre_incdec_property_helper_SPEC_VAR_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10296 : }
10297 :
10298 : static int zend_post_incdec_property_helper_SPEC_VAR_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
10299 0 : {
10300 0 : zend_op *opline = EX(opline);
10301 : zend_free_op free_op1, free_op2;
10302 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10303 : zval *object;
10304 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10305 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
10306 0 : int have_get_ptr = 0;
10307 :
10308 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
10309 0 : object = *object_ptr;
10310 :
10311 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
10312 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
10313 0 : zval_dtor(free_op2.var);
10314 0 : *retval = *EG(uninitialized_zval_ptr);
10315 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10316 0 : ZEND_VM_NEXT_OPCODE();
10317 : }
10318 :
10319 : /* here we are sure we are dealing with an object */
10320 :
10321 : if (1) {
10322 0 : MAKE_REAL_ZVAL_PTR(property);
10323 : }
10324 :
10325 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
10326 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
10327 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
10328 0 : have_get_ptr = 1;
10329 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
10330 :
10331 0 : *retval = **zptr;
10332 0 : zendi_zval_copy_ctor(*retval);
10333 :
10334 0 : incdec_op(*zptr);
10335 :
10336 : }
10337 : }
10338 :
10339 0 : if (!have_get_ptr) {
10340 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
10341 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
10342 : zval *z_copy;
10343 :
10344 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
10345 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
10346 :
10347 0 : if (z->refcount == 0) {
10348 0 : zval_dtor(z);
10349 0 : FREE_ZVAL(z);
10350 : }
10351 0 : z = value;
10352 : }
10353 0 : *retval = *z;
10354 0 : zendi_zval_copy_ctor(*retval);
10355 0 : ALLOC_ZVAL(z_copy);
10356 0 : *z_copy = *z;
10357 0 : zendi_zval_copy_ctor(*z_copy);
10358 0 : INIT_PZVAL(z_copy);
10359 0 : incdec_op(z_copy);
10360 0 : z->refcount++;
10361 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
10362 0 : zval_ptr_dtor(&z_copy);
10363 0 : zval_ptr_dtor(&z);
10364 : } else {
10365 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
10366 0 : *retval = *EG(uninitialized_zval_ptr);
10367 : }
10368 : }
10369 :
10370 : if (1) {
10371 0 : zval_ptr_dtor(&property);
10372 : } else {
10373 : zval_dtor(free_op2.var);
10374 : }
10375 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10376 0 : ZEND_VM_NEXT_OPCODE();
10377 : }
10378 :
10379 : static int ZEND_POST_INC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10380 0 : {
10381 0 : return zend_post_incdec_property_helper_SPEC_VAR_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10382 : }
10383 :
10384 : static int ZEND_POST_DEC_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10385 0 : {
10386 0 : return zend_post_incdec_property_helper_SPEC_VAR_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10387 : }
10388 :
10389 : static int ZEND_FETCH_DIM_R_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10390 0 : {
10391 0 : zend_op *opline = EX(opline);
10392 : zend_free_op free_op1, free_op2;
10393 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10394 :
10395 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
10396 : IS_VAR != IS_CV &&
10397 : EX_T(opline->op1.u.var).var.ptr_ptr) {
10398 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
10399 : }
10400 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_R TSRMLS_CC);
10401 0 : zval_dtor(free_op2.var);
10402 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10403 0 : ZEND_VM_NEXT_OPCODE();
10404 : }
10405 :
10406 : static int ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10407 0 : {
10408 0 : zend_op *opline = EX(opline);
10409 : zend_free_op free_op1, free_op2;
10410 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10411 :
10412 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC);
10413 0 : zval_dtor(free_op2.var);
10414 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
10415 : READY_TO_DESTROY(free_op1.var) &&
10416 : !RETURN_VALUE_UNUSED(&opline->result)) {
10417 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10418 : }
10419 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10420 0 : ZEND_VM_NEXT_OPCODE();
10421 : }
10422 :
10423 : static int ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10424 0 : {
10425 0 : zend_op *opline = EX(opline);
10426 : zend_free_op free_op1, free_op2;
10427 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10428 :
10429 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
10430 0 : zval_dtor(free_op2.var);
10431 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
10432 : READY_TO_DESTROY(free_op1.var) &&
10433 : !RETURN_VALUE_UNUSED(&opline->result)) {
10434 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10435 : }
10436 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10437 0 : ZEND_VM_NEXT_OPCODE();
10438 : }
10439 :
10440 : static int ZEND_FETCH_DIM_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10441 0 : {
10442 0 : zend_op *opline = EX(opline);
10443 : zend_free_op free_op1, free_op2;
10444 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10445 :
10446 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, BP_VAR_IS TSRMLS_CC);
10447 0 : zval_dtor(free_op2.var);
10448 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10449 0 : ZEND_VM_NEXT_OPCODE();
10450 : }
10451 :
10452 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10453 0 : {
10454 0 : zend_op *opline = EX(opline);
10455 : zend_free_op free_op1, free_op2;
10456 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
10457 : zval *dim;
10458 :
10459 : if (IS_TMP_VAR == IS_UNUSED && type == BP_VAR_R) {
10460 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
10461 : }
10462 0 : dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10463 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 1, type TSRMLS_CC);
10464 0 : zval_dtor(free_op2.var);
10465 0 : if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
10466 : READY_TO_DESTROY(free_op1.var) &&
10467 : !RETURN_VALUE_UNUSED(&opline->result)) {
10468 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10469 : }
10470 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10471 0 : ZEND_VM_NEXT_OPCODE();
10472 : }
10473 :
10474 : static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10475 0 : {
10476 0 : zend_op *opline = EX(opline);
10477 : zend_free_op free_op1, free_op2;
10478 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10479 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10480 :
10481 : /* Not needed in DIM_UNSET
10482 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK) {
10483 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
10484 : }
10485 : */
10486 : if (IS_VAR == IS_CV) {
10487 : if (container != &EG(uninitialized_zval_ptr)) {
10488 : SEPARATE_ZVAL_IF_NOT_REF(container);
10489 : }
10490 : }
10491 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC);
10492 0 : zval_dtor(free_op2.var);
10493 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
10494 : READY_TO_DESTROY(free_op1.var) &&
10495 : !RETURN_VALUE_UNUSED(&opline->result)) {
10496 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10497 : }
10498 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10499 0 : if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) {
10500 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
10501 : } else {
10502 : zend_free_op free_res;
10503 :
10504 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
10505 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
10506 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
10507 : }
10508 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
10509 0 : FREE_OP_VAR_PTR(free_res);
10510 : }
10511 0 : ZEND_VM_NEXT_OPCODE();
10512 : }
10513 :
10514 : static int zend_fetch_property_address_read_helper_SPEC_VAR_TMP(int type, ZEND_OPCODE_HANDLER_ARGS)
10515 0 : {
10516 0 : zend_op *opline = EX(opline);
10517 : zval *container;
10518 : zval **retval;
10519 : zend_free_op free_op1;
10520 :
10521 0 : retval = &EX_T(opline->result.u.var).var.ptr;
10522 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
10523 :
10524 0 : container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10525 :
10526 0 : if (container == EG(error_zval_ptr)) {
10527 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
10528 0 : *retval = EG(error_zval_ptr);
10529 0 : PZVAL_LOCK(*retval);
10530 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10531 : }
10532 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10533 0 : ZEND_VM_NEXT_OPCODE();
10534 : }
10535 :
10536 :
10537 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
10538 0 : if (type != BP_VAR_IS) {
10539 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
10540 : }
10541 0 : *retval = EG(uninitialized_zval_ptr);
10542 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
10543 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10544 : } else {
10545 : zend_free_op free_op2;
10546 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10547 :
10548 : if (1) {
10549 0 : MAKE_REAL_ZVAL_PTR(offset);
10550 : }
10551 :
10552 : /* here we are sure we are dealing with an object */
10553 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
10554 :
10555 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
10556 0 : zval_dtor(*retval);
10557 0 : FREE_ZVAL(*retval);
10558 : } else {
10559 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
10560 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10561 : }
10562 :
10563 : if (1) {
10564 0 : zval_ptr_dtor(&offset);
10565 : } else {
10566 : zval_dtor(free_op2.var);
10567 : }
10568 : }
10569 :
10570 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10571 0 : ZEND_VM_NEXT_OPCODE();
10572 : }
10573 :
10574 : static int ZEND_FETCH_OBJ_R_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10575 0 : {
10576 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10577 : }
10578 :
10579 : static int ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10580 0 : {
10581 0 : zend_op *opline = EX(opline);
10582 : zend_free_op free_op1, free_op2;
10583 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10584 :
10585 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_VAR != IS_CV) {
10586 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
10587 0 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
10588 : }
10589 :
10590 : if (1) {
10591 0 : MAKE_REAL_ZVAL_PTR(property);
10592 : }
10593 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
10594 : if (1) {
10595 0 : zval_ptr_dtor(&property);
10596 : } else {
10597 : zval_dtor(free_op2.var);
10598 : }
10599 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
10600 : READY_TO_DESTROY(free_op1.var) &&
10601 : !RETURN_VALUE_UNUSED(&opline->result)) {
10602 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10603 : }
10604 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10605 0 : ZEND_VM_NEXT_OPCODE();
10606 : }
10607 :
10608 : static int ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10609 0 : {
10610 0 : zend_op *opline = EX(opline);
10611 : zend_free_op free_op1, free_op2;
10612 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10613 :
10614 : if (1) {
10615 0 : MAKE_REAL_ZVAL_PTR(property);
10616 : }
10617 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
10618 : if (1) {
10619 0 : zval_ptr_dtor(&property);
10620 : } else {
10621 : zval_dtor(free_op2.var);
10622 : }
10623 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
10624 : READY_TO_DESTROY(free_op1.var) &&
10625 : !RETURN_VALUE_UNUSED(&opline->result)) {
10626 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10627 : }
10628 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10629 0 : ZEND_VM_NEXT_OPCODE();
10630 : }
10631 :
10632 : static int ZEND_FETCH_OBJ_IS_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10633 0 : {
10634 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_TMP(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10635 : }
10636 :
10637 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10638 0 : {
10639 0 : zend_op *opline = EX(opline);
10640 :
10641 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
10642 : /* Behave like FETCH_OBJ_W */
10643 : zend_free_op free_op1, free_op2;
10644 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10645 :
10646 : if (1) {
10647 0 : MAKE_REAL_ZVAL_PTR(property);
10648 : }
10649 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
10650 : if (1) {
10651 0 : zval_ptr_dtor(&property);
10652 : } else {
10653 : zval_dtor(free_op2.var);
10654 : }
10655 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
10656 : READY_TO_DESTROY(free_op1.var) &&
10657 : !RETURN_VALUE_UNUSED(&opline->result)) {
10658 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10659 : }
10660 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10661 0 : ZEND_VM_NEXT_OPCODE();
10662 : } else {
10663 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10664 : }
10665 : }
10666 :
10667 : static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10668 0 : {
10669 0 : zend_op *opline = EX(opline);
10670 : zend_free_op free_op1, free_op2, free_res;
10671 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10672 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10673 :
10674 : if (IS_VAR == IS_CV) {
10675 : if (container != &EG(uninitialized_zval_ptr)) {
10676 : SEPARATE_ZVAL_IF_NOT_REF(container);
10677 : }
10678 : }
10679 : if (1) {
10680 0 : MAKE_REAL_ZVAL_PTR(property);
10681 : }
10682 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
10683 : if (1) {
10684 0 : zval_ptr_dtor(&property);
10685 : } else {
10686 : zval_dtor(free_op2.var);
10687 : }
10688 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
10689 : READY_TO_DESTROY(free_op1.var) &&
10690 : !RETURN_VALUE_UNUSED(&opline->result)) {
10691 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
10692 : }
10693 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10694 :
10695 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
10696 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
10697 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
10698 : }
10699 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
10700 0 : FREE_OP_VAR_PTR(free_res);
10701 0 : ZEND_VM_NEXT_OPCODE();
10702 : }
10703 :
10704 : static int ZEND_ASSIGN_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10705 0 : {
10706 0 : zend_op *opline = EX(opline);
10707 0 : zend_op *op_data = opline+1;
10708 : zend_free_op free_op1;
10709 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10710 :
10711 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
10712 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10713 : /* assign_obj has two opcodes! */
10714 0 : ZEND_VM_INC_OPCODE();
10715 0 : ZEND_VM_NEXT_OPCODE();
10716 : }
10717 :
10718 : static int ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10719 0 : {
10720 0 : zend_op *opline = EX(opline);
10721 0 : zend_op *op_data = opline+1;
10722 : zend_free_op free_op1;
10723 : zval **object_ptr;
10724 :
10725 0 : if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
10726 : /* not an array offset */
10727 0 : object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10728 : } else {
10729 0 : object_ptr = NULL;
10730 : }
10731 :
10732 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
10733 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
10734 : } else {
10735 : zend_free_op free_op2, free_op_data1;
10736 : zval *value;
10737 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10738 :
10739 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 1, BP_VAR_W TSRMLS_CC);
10740 0 : zval_dtor(free_op2.var);
10741 :
10742 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
10743 0 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
10744 0 : FREE_OP_IF_VAR(free_op_data1);
10745 : }
10746 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10747 : /* assign_dim has two opcodes! */
10748 0 : ZEND_VM_INC_OPCODE();
10749 0 : ZEND_VM_NEXT_OPCODE();
10750 : }
10751 :
10752 : static int ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10753 1 : {
10754 1 : zend_op *opline = EX(opline);
10755 : zend_free_op free_op2;
10756 1 : zval *value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10757 :
10758 1 : zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (1?IS_TMP_VAR:IS_TMP_VAR), EX(Ts) TSRMLS_CC);
10759 : /* zend_assign_to_variable() always takes care of op2, never free it! */
10760 :
10761 1 : ZEND_VM_NEXT_OPCODE();
10762 : }
10763 :
10764 : static int ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10765 0 : {
10766 0 : zend_op *opline = EX(opline);
10767 : zval *function_name;
10768 : char *function_name_strval;
10769 : int function_name_strlen;
10770 : zend_free_op free_op1, free_op2;
10771 :
10772 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
10773 :
10774 0 : function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10775 :
10776 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
10777 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
10778 : }
10779 :
10780 0 : function_name_strval = Z_STRVAL_P(function_name);
10781 0 : function_name_strlen = Z_STRLEN_P(function_name);
10782 :
10783 0 : EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10784 :
10785 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
10786 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
10787 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
10788 : }
10789 :
10790 : /* First, locate the function. */
10791 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
10792 0 : if (!EX(fbc)) {
10793 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
10794 : }
10795 : } else {
10796 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
10797 : }
10798 :
10799 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
10800 0 : EX(object) = NULL;
10801 : } else {
10802 0 : if (!PZVAL_IS_REF(EX(object))) {
10803 0 : EX(object)->refcount++; /* For $this pointer */
10804 : } else {
10805 : zval *this_ptr;
10806 0 : ALLOC_ZVAL(this_ptr);
10807 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
10808 0 : zval_copy_ctor(this_ptr);
10809 0 : EX(object) = this_ptr;
10810 : }
10811 : }
10812 :
10813 0 : zval_dtor(free_op2.var);
10814 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10815 :
10816 0 : ZEND_VM_NEXT_OPCODE();
10817 : }
10818 :
10819 : static int ZEND_CASE_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10820 0 : {
10821 0 : zend_op *opline = EX(opline);
10822 0 : int switch_expr_is_overloaded=0;
10823 : zend_free_op free_op1, free_op2;
10824 :
10825 : if (IS_VAR==IS_VAR) {
10826 0 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
10827 0 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
10828 : } else {
10829 0 : switch_expr_is_overloaded = 1;
10830 0 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
10831 : }
10832 : }
10833 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
10834 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
10835 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
10836 :
10837 0 : zval_dtor(free_op2.var);
10838 0 : if (switch_expr_is_overloaded) {
10839 : /* We only free op1 if this is a string offset,
10840 : * Since if it is a TMP_VAR, it'll be reused by
10841 : * other CASE opcodes (whereas string offsets
10842 : * are allocated at each get_zval_ptr())
10843 : */
10844 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10845 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
10846 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
10847 : }
10848 0 : ZEND_VM_NEXT_OPCODE();
10849 : }
10850 :
10851 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10852 0 : {
10853 0 : zend_op *opline = EX(opline);
10854 : zend_free_op free_op1, free_op2;
10855 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
10856 : zval *expr_ptr;
10857 0 : zval *offset=_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10858 :
10859 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
10860 0 : zval **expr_ptr_ptr = NULL;
10861 :
10862 0 : if (opline->extended_value) {
10863 0 : expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10864 0 : expr_ptr = *expr_ptr_ptr;
10865 : } else {
10866 0 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10867 : }
10868 : #else
10869 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10870 : #endif
10871 :
10872 : if (0) { /* temporary variable */
10873 : zval *new_expr;
10874 :
10875 : ALLOC_ZVAL(new_expr);
10876 : INIT_PZVAL_COPY(new_expr, expr_ptr);
10877 : expr_ptr = new_expr;
10878 : } else {
10879 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
10880 0 : if (opline->extended_value) {
10881 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
10882 0 : expr_ptr = *expr_ptr_ptr;
10883 0 : expr_ptr->refcount++;
10884 : } else
10885 : #endif
10886 0 : if (PZVAL_IS_REF(expr_ptr)) {
10887 : zval *new_expr;
10888 :
10889 0 : ALLOC_ZVAL(new_expr);
10890 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
10891 0 : expr_ptr = new_expr;
10892 0 : zendi_zval_copy_ctor(*expr_ptr);
10893 : } else {
10894 0 : expr_ptr->refcount++;
10895 : }
10896 : }
10897 0 : if (offset) {
10898 0 : switch (Z_TYPE_P(offset)) {
10899 : case IS_DOUBLE:
10900 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
10901 0 : break;
10902 : case IS_LONG:
10903 : case IS_BOOL:
10904 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
10905 0 : break;
10906 : case IS_STRING:
10907 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
10908 0 : break;
10909 : case IS_NULL:
10910 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
10911 0 : break;
10912 : default:
10913 0 : zend_error(E_WARNING, "Illegal offset type");
10914 0 : zval_ptr_dtor(&expr_ptr);
10915 : /* do nothing */
10916 : break;
10917 : }
10918 0 : zval_dtor(free_op2.var);
10919 : } else {
10920 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
10921 : }
10922 0 : if (opline->extended_value) {
10923 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10924 : } else {
10925 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
10926 : }
10927 0 : ZEND_VM_NEXT_OPCODE();
10928 : }
10929 :
10930 : static int ZEND_INIT_ARRAY_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10931 0 : {
10932 0 : zend_op *opline = EX(opline);
10933 :
10934 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
10935 : if (IS_VAR == IS_UNUSED) {
10936 : ZEND_VM_NEXT_OPCODE();
10937 : #if 0 || IS_VAR != IS_UNUSED
10938 : } else {
10939 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
10940 : #endif
10941 : }
10942 : }
10943 :
10944 : static int ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
10945 0 : {
10946 0 : zend_op *opline = EX(opline);
10947 : zend_free_op free_op1, free_op2;
10948 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
10949 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
10950 : long index;
10951 :
10952 0 : if (container) {
10953 : if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
10954 : SEPARATE_ZVAL_IF_NOT_REF(container);
10955 : }
10956 0 : switch (Z_TYPE_PP(container)) {
10957 : case IS_ARRAY: {
10958 0 : HashTable *ht = Z_ARRVAL_PP(container);
10959 :
10960 0 : switch (Z_TYPE_P(offset)) {
10961 : case IS_DOUBLE:
10962 0 : index = (long) Z_DVAL_P(offset);
10963 0 : zend_hash_index_del(ht, index);
10964 0 : break;
10965 : case IS_RESOURCE:
10966 : case IS_BOOL:
10967 : case IS_LONG:
10968 0 : index = Z_LVAL_P(offset);
10969 0 : zend_hash_index_del(ht, index);
10970 0 : break;
10971 : case IS_STRING:
10972 : if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
10973 : offset->refcount++;
10974 : }
10975 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
10976 : ht == &EG(symbol_table)) {
10977 : zend_execute_data *ex;
10978 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
10979 :
10980 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
10981 0 : if (ex->op_array && ex->symbol_table == ht) {
10982 : int i;
10983 :
10984 0 : for (i = 0; i < ex->op_array->last_var; i++) {
10985 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
10986 : ex->op_array->vars[i].name_len == offset->value.str.len &&
10987 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
10988 0 : ex->CVs[i] = NULL;
10989 0 : break;
10990 : }
10991 : }
10992 : }
10993 : }
10994 : }
10995 : if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
10996 : zval_ptr_dtor(&offset);
10997 : }
10998 0 : break;
10999 : case IS_NULL:
11000 0 : zend_hash_del(ht, "", sizeof(""));
11001 0 : break;
11002 : default:
11003 0 : zend_error(E_WARNING, "Illegal offset type in unset");
11004 : break;
11005 : }
11006 0 : zval_dtor(free_op2.var);
11007 0 : break;
11008 : }
11009 : case IS_OBJECT:
11010 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
11011 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
11012 : }
11013 : if (1) {
11014 0 : MAKE_REAL_ZVAL_PTR(offset);
11015 : }
11016 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
11017 : if (1) {
11018 0 : zval_ptr_dtor(&offset);
11019 : } else {
11020 : zval_dtor(free_op2.var);
11021 : }
11022 0 : break;
11023 : case IS_STRING:
11024 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
11025 : ZEND_VM_CONTINUE(); /* bailed out before */
11026 : default:
11027 0 : zval_dtor(free_op2.var);
11028 : break;
11029 : }
11030 : } else {
11031 0 : zval_dtor(free_op2.var);
11032 : }
11033 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11034 :
11035 0 : ZEND_VM_NEXT_OPCODE();
11036 : }
11037 :
11038 : static int ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11039 0 : {
11040 0 : zend_op *opline = EX(opline);
11041 : zend_free_op free_op1, free_op2;
11042 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
11043 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11044 :
11045 0 : if (container) {
11046 : if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
11047 : SEPARATE_ZVAL_IF_NOT_REF(container);
11048 : }
11049 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
11050 : if (1) {
11051 0 : MAKE_REAL_ZVAL_PTR(offset);
11052 : }
11053 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
11054 : if (1) {
11055 0 : zval_ptr_dtor(&offset);
11056 : } else {
11057 : zval_dtor(free_op2.var);
11058 : }
11059 : } else {
11060 0 : zval_dtor(free_op2.var);
11061 : }
11062 : } else {
11063 0 : zval_dtor(free_op2.var);
11064 : }
11065 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11066 :
11067 0 : ZEND_VM_NEXT_OPCODE();
11068 : }
11069 :
11070 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
11071 0 : {
11072 0 : zend_op *opline = EX(opline);
11073 : zend_free_op free_op1;
11074 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
11075 0 : zval **value = NULL;
11076 0 : int result = 0;
11077 : long index;
11078 :
11079 0 : if (container) {
11080 : zend_free_op free_op2;
11081 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11082 :
11083 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
11084 : HashTable *ht;
11085 0 : int isset = 0;
11086 :
11087 0 : ht = Z_ARRVAL_PP(container);
11088 :
11089 0 : switch (Z_TYPE_P(offset)) {
11090 : case IS_DOUBLE:
11091 0 : index = (long) Z_DVAL_P(offset);
11092 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
11093 0 : isset = 1;
11094 : }
11095 0 : break;
11096 : case IS_RESOURCE:
11097 : case IS_BOOL:
11098 : case IS_LONG:
11099 0 : index = Z_LVAL_P(offset);
11100 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
11101 0 : isset = 1;
11102 : }
11103 0 : break;
11104 : case IS_STRING:
11105 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
11106 0 : isset = 1;
11107 : }
11108 0 : break;
11109 : case IS_NULL:
11110 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
11111 0 : isset = 1;
11112 : }
11113 0 : break;
11114 : default:
11115 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
11116 :
11117 : break;
11118 : }
11119 :
11120 0 : switch (opline->extended_value) {
11121 : case ZEND_ISSET:
11122 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
11123 0 : result = 0;
11124 : } else {
11125 0 : result = isset;
11126 : }
11127 0 : break;
11128 : case ZEND_ISEMPTY:
11129 0 : if (!isset || !i_zend_is_true(*value)) {
11130 0 : result = 0;
11131 : } else {
11132 0 : result = 1;
11133 : }
11134 : break;
11135 : }
11136 0 : zval_dtor(free_op2.var);
11137 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
11138 : if (1) {
11139 0 : MAKE_REAL_ZVAL_PTR(offset);
11140 : }
11141 0 : if (prop_dim) {
11142 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
11143 : } else {
11144 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
11145 : }
11146 : if (1) {
11147 0 : zval_ptr_dtor(&offset);
11148 : } else {
11149 : zval_dtor(free_op2.var);
11150 : }
11151 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
11152 : zval tmp;
11153 :
11154 0 : if (Z_TYPE_P(offset) != IS_LONG) {
11155 0 : tmp = *offset;
11156 0 : zval_copy_ctor(&tmp);
11157 0 : convert_to_long(&tmp);
11158 0 : offset = &tmp;
11159 : }
11160 0 : if (Z_TYPE_P(offset) == IS_LONG) {
11161 0 : switch (opline->extended_value) {
11162 : case ZEND_ISSET:
11163 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
11164 0 : result = 1;
11165 : }
11166 0 : break;
11167 : case ZEND_ISEMPTY:
11168 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
11169 0 : result = 1;
11170 : }
11171 : break;
11172 : }
11173 : }
11174 0 : zval_dtor(free_op2.var);
11175 : } else {
11176 0 : zval_dtor(free_op2.var);
11177 : }
11178 : }
11179 :
11180 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
11181 :
11182 0 : switch (opline->extended_value) {
11183 : case ZEND_ISSET:
11184 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
11185 0 : break;
11186 : case ZEND_ISEMPTY:
11187 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
11188 : break;
11189 : }
11190 :
11191 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11192 :
11193 0 : ZEND_VM_NEXT_OPCODE();
11194 : }
11195 :
11196 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11197 0 : {
11198 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11199 : }
11200 :
11201 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11202 0 : {
11203 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11204 : }
11205 :
11206 : static int ZEND_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11207 220 : {
11208 220 : zend_op *opline = EX(opline);
11209 : zend_free_op free_op1, free_op2;
11210 :
11211 220 : add_function(&EX_T(opline->result.u.var).tmp_var,
11212 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11213 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11214 220 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11215 220 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11216 220 : ZEND_VM_NEXT_OPCODE();
11217 : }
11218 :
11219 : static int ZEND_SUB_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11220 0 : {
11221 0 : zend_op *opline = EX(opline);
11222 : zend_free_op free_op1, free_op2;
11223 :
11224 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
11225 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11226 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11227 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11228 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11229 0 : ZEND_VM_NEXT_OPCODE();
11230 : }
11231 :
11232 : static int ZEND_MUL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11233 0 : {
11234 0 : zend_op *opline = EX(opline);
11235 : zend_free_op free_op1, free_op2;
11236 :
11237 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
11238 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11239 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11240 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11241 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11242 0 : ZEND_VM_NEXT_OPCODE();
11243 : }
11244 :
11245 : static int ZEND_DIV_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11246 0 : {
11247 0 : zend_op *opline = EX(opline);
11248 : zend_free_op free_op1, free_op2;
11249 :
11250 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
11251 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11252 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11253 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11254 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11255 0 : ZEND_VM_NEXT_OPCODE();
11256 : }
11257 :
11258 : static int ZEND_MOD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11259 0 : {
11260 0 : zend_op *opline = EX(opline);
11261 : zend_free_op free_op1, free_op2;
11262 :
11263 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
11264 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11265 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11266 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11267 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11268 0 : ZEND_VM_NEXT_OPCODE();
11269 : }
11270 :
11271 : static int ZEND_SL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11272 0 : {
11273 0 : zend_op *opline = EX(opline);
11274 : zend_free_op free_op1, free_op2;
11275 :
11276 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
11277 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11278 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11279 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11280 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11281 0 : ZEND_VM_NEXT_OPCODE();
11282 : }
11283 :
11284 : static int ZEND_SR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11285 0 : {
11286 0 : zend_op *opline = EX(opline);
11287 : zend_free_op free_op1, free_op2;
11288 :
11289 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
11290 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11291 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11292 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11293 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11294 0 : ZEND_VM_NEXT_OPCODE();
11295 : }
11296 :
11297 : static int ZEND_CONCAT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11298 76 : {
11299 76 : zend_op *opline = EX(opline);
11300 : zend_free_op free_op1, free_op2;
11301 :
11302 76 : concat_function(&EX_T(opline->result.u.var).tmp_var,
11303 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11304 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11305 76 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11306 76 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11307 76 : ZEND_VM_NEXT_OPCODE();
11308 : }
11309 :
11310 : static int ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11311 4 : {
11312 4 : zend_op *opline = EX(opline);
11313 : zend_free_op free_op1, free_op2;
11314 :
11315 4 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
11316 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11317 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11318 4 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11319 4 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11320 4 : ZEND_VM_NEXT_OPCODE();
11321 : }
11322 :
11323 : static int ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11324 2 : {
11325 2 : zend_op *opline = EX(opline);
11326 : zend_free_op free_op1, free_op2;
11327 :
11328 2 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
11329 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11330 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11331 2 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11332 2 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11333 2 : ZEND_VM_NEXT_OPCODE();
11334 : }
11335 :
11336 : static int ZEND_IS_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11337 4 : {
11338 4 : zend_op *opline = EX(opline);
11339 : zend_free_op free_op1, free_op2;
11340 :
11341 4 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
11342 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11343 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11344 4 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11345 4 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11346 4 : ZEND_VM_NEXT_OPCODE();
11347 : }
11348 :
11349 : static int ZEND_IS_NOT_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11350 0 : {
11351 0 : zend_op *opline = EX(opline);
11352 : zend_free_op free_op1, free_op2;
11353 :
11354 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
11355 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11356 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11357 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11358 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11359 0 : ZEND_VM_NEXT_OPCODE();
11360 : }
11361 :
11362 : static int ZEND_IS_SMALLER_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11363 54 : {
11364 54 : zend_op *opline = EX(opline);
11365 : zend_free_op free_op1, free_op2;
11366 :
11367 54 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
11368 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11369 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11370 54 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11371 54 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11372 54 : ZEND_VM_NEXT_OPCODE();
11373 : }
11374 :
11375 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11376 0 : {
11377 0 : zend_op *opline = EX(opline);
11378 : zend_free_op free_op1, free_op2;
11379 :
11380 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
11381 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11382 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11383 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11384 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11385 0 : ZEND_VM_NEXT_OPCODE();
11386 : }
11387 :
11388 : static int ZEND_BW_OR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11389 0 : {
11390 0 : zend_op *opline = EX(opline);
11391 : zend_free_op free_op1, free_op2;
11392 :
11393 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
11394 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11395 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11396 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11397 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11398 0 : ZEND_VM_NEXT_OPCODE();
11399 : }
11400 :
11401 : static int ZEND_BW_AND_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11402 0 : {
11403 0 : zend_op *opline = EX(opline);
11404 : zend_free_op free_op1, free_op2;
11405 :
11406 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
11407 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11408 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11409 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11410 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11411 0 : ZEND_VM_NEXT_OPCODE();
11412 : }
11413 :
11414 : static int ZEND_BW_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11415 0 : {
11416 0 : zend_op *opline = EX(opline);
11417 : zend_free_op free_op1, free_op2;
11418 :
11419 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
11420 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11421 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11422 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11423 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11424 0 : ZEND_VM_NEXT_OPCODE();
11425 : }
11426 :
11427 : static int ZEND_BOOL_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11428 0 : {
11429 0 : zend_op *opline = EX(opline);
11430 : zend_free_op free_op1, free_op2;
11431 :
11432 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
11433 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
11434 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
11435 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11436 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11437 0 : ZEND_VM_NEXT_OPCODE();
11438 : }
11439 :
11440 : static int zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
11441 0 : {
11442 0 : zend_op *opline = EX(opline);
11443 0 : zend_op *op_data = opline+1;
11444 : zend_free_op free_op1, free_op2, free_op_data1;
11445 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
11446 : zval *object;
11447 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11448 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
11449 0 : znode *result = &opline->result;
11450 0 : zval **retval = &EX_T(result->u.var).var.ptr;
11451 0 : int have_get_ptr = 0;
11452 :
11453 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
11454 0 : make_real_object(object_ptr TSRMLS_CC);
11455 0 : object = *object_ptr;
11456 :
11457 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
11458 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
11459 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11460 0 : FREE_OP(free_op_data1);
11461 :
11462 0 : if (!RETURN_VALUE_UNUSED(result)) {
11463 0 : *retval = EG(uninitialized_zval_ptr);
11464 0 : PZVAL_LOCK(*retval);
11465 : }
11466 : } else {
11467 : /* here we are sure we are dealing with an object */
11468 : if (0) {
11469 : MAKE_REAL_ZVAL_PTR(property);
11470 : }
11471 :
11472 : /* here property is a string */
11473 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
11474 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
11475 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
11476 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
11477 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
11478 :
11479 0 : have_get_ptr = 1;
11480 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
11481 0 : if (!RETURN_VALUE_UNUSED(result)) {
11482 0 : *retval = *zptr;
11483 0 : PZVAL_LOCK(*retval);
11484 : }
11485 : }
11486 : }
11487 :
11488 0 : if (!have_get_ptr) {
11489 0 : zval *z = NULL;
11490 :
11491 0 : switch (opline->extended_value) {
11492 : case ZEND_ASSIGN_OBJ:
11493 0 : if (Z_OBJ_HT_P(object)->read_property) {
11494 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
11495 : }
11496 0 : break;
11497 : case ZEND_ASSIGN_DIM:
11498 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
11499 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
11500 : }
11501 : break;
11502 : }
11503 0 : if (z) {
11504 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
11505 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
11506 :
11507 0 : if (z->refcount == 0) {
11508 0 : zval_dtor(z);
11509 0 : FREE_ZVAL(z);
11510 : }
11511 0 : z = value;
11512 : }
11513 0 : z->refcount++;
11514 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
11515 0 : binary_op(z, z, value TSRMLS_CC);
11516 0 : switch (opline->extended_value) {
11517 : case ZEND_ASSIGN_OBJ:
11518 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
11519 0 : break;
11520 : case ZEND_ASSIGN_DIM:
11521 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
11522 : break;
11523 : }
11524 0 : if (!RETURN_VALUE_UNUSED(result)) {
11525 0 : *retval = z;
11526 0 : PZVAL_LOCK(*retval);
11527 : }
11528 0 : zval_ptr_dtor(&z);
11529 : } else {
11530 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
11531 0 : if (!RETURN_VALUE_UNUSED(result)) {
11532 0 : *retval = EG(uninitialized_zval_ptr);
11533 0 : PZVAL_LOCK(*retval);
11534 : }
11535 : }
11536 : }
11537 :
11538 : if (0) {
11539 : zval_ptr_dtor(&property);
11540 : } else {
11541 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11542 : }
11543 0 : FREE_OP(free_op_data1);
11544 : }
11545 :
11546 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11547 : /* assign_obj has two opcodes! */
11548 0 : ZEND_VM_INC_OPCODE();
11549 0 : ZEND_VM_NEXT_OPCODE();
11550 : }
11551 :
11552 : static int zend_binary_assign_op_helper_SPEC_VAR_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
11553 0 : {
11554 0 : zend_op *opline = EX(opline);
11555 : zend_free_op free_op1, free_op2, free_op_data2, free_op_data1;
11556 : zval **var_ptr;
11557 : zval *value;
11558 0 : zend_bool increment_opline = 0;
11559 :
11560 0 : switch (opline->extended_value) {
11561 : case ZEND_ASSIGN_OBJ:
11562 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11563 : break;
11564 : case ZEND_ASSIGN_DIM: {
11565 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
11566 :
11567 0 : if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) {
11568 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
11569 : }
11570 :
11571 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
11572 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11573 : } else {
11574 0 : zend_op *op_data = opline+1;
11575 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11576 :
11577 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
11578 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
11579 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
11580 0 : increment_opline = 1;
11581 : }
11582 : }
11583 0 : break;
11584 : default:
11585 0 : value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11586 0 : var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
11587 : /* do nothing */
11588 : break;
11589 : }
11590 :
11591 0 : if (!var_ptr) {
11592 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
11593 : }
11594 :
11595 0 : if (*var_ptr == EG(error_zval_ptr)) {
11596 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
11597 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
11598 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
11599 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
11600 : }
11601 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11602 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11603 0 : if (increment_opline) {
11604 0 : ZEND_VM_INC_OPCODE();
11605 : }
11606 0 : ZEND_VM_NEXT_OPCODE();
11607 : }
11608 :
11609 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
11610 :
11611 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
11612 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
11613 : /* proxy object */
11614 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
11615 0 : objval->refcount++;
11616 0 : binary_op(objval, objval, value TSRMLS_CC);
11617 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
11618 0 : zval_ptr_dtor(&objval);
11619 : } else {
11620 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
11621 : }
11622 :
11623 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
11624 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
11625 0 : PZVAL_LOCK(*var_ptr);
11626 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
11627 : }
11628 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11629 :
11630 0 : if (increment_opline) {
11631 0 : ZEND_VM_INC_OPCODE();
11632 0 : FREE_OP(free_op_data1);
11633 0 : FREE_OP_VAR_PTR(free_op_data2);
11634 : }
11635 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11636 0 : ZEND_VM_NEXT_OPCODE();
11637 : }
11638 :
11639 : static int ZEND_ASSIGN_ADD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11640 0 : {
11641 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11642 : }
11643 :
11644 : static int ZEND_ASSIGN_SUB_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11645 0 : {
11646 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11647 : }
11648 :
11649 : static int ZEND_ASSIGN_MUL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11650 0 : {
11651 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11652 : }
11653 :
11654 : static int ZEND_ASSIGN_DIV_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11655 0 : {
11656 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11657 : }
11658 :
11659 : static int ZEND_ASSIGN_MOD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11660 0 : {
11661 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11662 : }
11663 :
11664 : static int ZEND_ASSIGN_SL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11665 0 : {
11666 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11667 : }
11668 :
11669 : static int ZEND_ASSIGN_SR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11670 0 : {
11671 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11672 : }
11673 :
11674 : static int ZEND_ASSIGN_CONCAT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11675 0 : {
11676 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11677 : }
11678 :
11679 : static int ZEND_ASSIGN_BW_OR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11680 0 : {
11681 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11682 : }
11683 :
11684 : static int ZEND_ASSIGN_BW_AND_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11685 0 : {
11686 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11687 : }
11688 :
11689 : static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11690 0 : {
11691 0 : return zend_binary_assign_op_helper_SPEC_VAR_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11692 : }
11693 :
11694 : static int zend_pre_incdec_property_helper_SPEC_VAR_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
11695 0 : {
11696 0 : zend_op *opline = EX(opline);
11697 : zend_free_op free_op1, free_op2;
11698 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
11699 : zval *object;
11700 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11701 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
11702 0 : int have_get_ptr = 0;
11703 :
11704 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
11705 0 : object = *object_ptr;
11706 :
11707 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
11708 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
11709 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11710 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
11711 0 : *retval = EG(uninitialized_zval_ptr);
11712 0 : PZVAL_LOCK(*retval);
11713 : }
11714 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11715 0 : ZEND_VM_NEXT_OPCODE();
11716 : }
11717 :
11718 : /* here we are sure we are dealing with an object */
11719 :
11720 : if (0) {
11721 : MAKE_REAL_ZVAL_PTR(property);
11722 : }
11723 :
11724 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
11725 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
11726 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
11727 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
11728 :
11729 0 : have_get_ptr = 1;
11730 0 : incdec_op(*zptr);
11731 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
11732 0 : *retval = *zptr;
11733 0 : PZVAL_LOCK(*retval);
11734 : }
11735 : }
11736 : }
11737 :
11738 0 : if (!have_get_ptr) {
11739 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
11740 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
11741 :
11742 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
11743 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
11744 :
11745 0 : if (z->refcount == 0) {
11746 0 : zval_dtor(z);
11747 0 : FREE_ZVAL(z);
11748 : }
11749 0 : z = value;
11750 : }
11751 0 : z->refcount++;
11752 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
11753 0 : incdec_op(z);
11754 0 : *retval = z;
11755 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
11756 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
11757 0 : zval_ptr_dtor(&z);
11758 : } else {
11759 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
11760 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
11761 0 : *retval = EG(uninitialized_zval_ptr);
11762 0 : PZVAL_LOCK(*retval);
11763 : }
11764 : }
11765 : }
11766 :
11767 : if (0) {
11768 : zval_ptr_dtor(&property);
11769 : } else {
11770 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11771 : }
11772 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11773 0 : ZEND_VM_NEXT_OPCODE();
11774 : }
11775 :
11776 : static int ZEND_PRE_INC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11777 0 : {
11778 0 : return zend_pre_incdec_property_helper_SPEC_VAR_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11779 : }
11780 :
11781 : static int ZEND_PRE_DEC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11782 0 : {
11783 0 : return zend_pre_incdec_property_helper_SPEC_VAR_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11784 : }
11785 :
11786 : static int zend_post_incdec_property_helper_SPEC_VAR_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
11787 0 : {
11788 0 : zend_op *opline = EX(opline);
11789 : zend_free_op free_op1, free_op2;
11790 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
11791 : zval *object;
11792 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11793 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
11794 0 : int have_get_ptr = 0;
11795 :
11796 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
11797 0 : object = *object_ptr;
11798 :
11799 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
11800 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
11801 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11802 0 : *retval = *EG(uninitialized_zval_ptr);
11803 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11804 0 : ZEND_VM_NEXT_OPCODE();
11805 : }
11806 :
11807 : /* here we are sure we are dealing with an object */
11808 :
11809 : if (0) {
11810 : MAKE_REAL_ZVAL_PTR(property);
11811 : }
11812 :
11813 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
11814 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
11815 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
11816 0 : have_get_ptr = 1;
11817 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
11818 :
11819 0 : *retval = **zptr;
11820 0 : zendi_zval_copy_ctor(*retval);
11821 :
11822 0 : incdec_op(*zptr);
11823 :
11824 : }
11825 : }
11826 :
11827 0 : if (!have_get_ptr) {
11828 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
11829 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
11830 : zval *z_copy;
11831 :
11832 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
11833 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
11834 :
11835 0 : if (z->refcount == 0) {
11836 0 : zval_dtor(z);
11837 0 : FREE_ZVAL(z);
11838 : }
11839 0 : z = value;
11840 : }
11841 0 : *retval = *z;
11842 0 : zendi_zval_copy_ctor(*retval);
11843 0 : ALLOC_ZVAL(z_copy);
11844 0 : *z_copy = *z;
11845 0 : zendi_zval_copy_ctor(*z_copy);
11846 0 : INIT_PZVAL(z_copy);
11847 0 : incdec_op(z_copy);
11848 0 : z->refcount++;
11849 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
11850 0 : zval_ptr_dtor(&z_copy);
11851 0 : zval_ptr_dtor(&z);
11852 : } else {
11853 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
11854 0 : *retval = *EG(uninitialized_zval_ptr);
11855 : }
11856 : }
11857 :
11858 : if (0) {
11859 : zval_ptr_dtor(&property);
11860 : } else {
11861 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11862 : }
11863 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11864 0 : ZEND_VM_NEXT_OPCODE();
11865 : }
11866 :
11867 : static int ZEND_POST_INC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11868 0 : {
11869 0 : return zend_post_incdec_property_helper_SPEC_VAR_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11870 : }
11871 :
11872 : static int ZEND_POST_DEC_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11873 0 : {
11874 0 : return zend_post_incdec_property_helper_SPEC_VAR_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
11875 : }
11876 :
11877 : static int ZEND_FETCH_DIM_R_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11878 0 : {
11879 0 : zend_op *opline = EX(opline);
11880 : zend_free_op free_op1, free_op2;
11881 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11882 :
11883 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
11884 : IS_VAR != IS_CV &&
11885 : EX_T(opline->op1.u.var).var.ptr_ptr) {
11886 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
11887 : }
11888 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
11889 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11890 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11891 0 : ZEND_VM_NEXT_OPCODE();
11892 : }
11893 :
11894 : static int ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11895 0 : {
11896 0 : zend_op *opline = EX(opline);
11897 : zend_free_op free_op1, free_op2;
11898 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11899 :
11900 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
11901 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11902 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
11903 : READY_TO_DESTROY(free_op1.var) &&
11904 : !RETURN_VALUE_UNUSED(&opline->result)) {
11905 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
11906 : }
11907 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11908 0 : ZEND_VM_NEXT_OPCODE();
11909 : }
11910 :
11911 : static int ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11912 0 : {
11913 0 : zend_op *opline = EX(opline);
11914 : zend_free_op free_op1, free_op2;
11915 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11916 :
11917 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
11918 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11919 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
11920 : READY_TO_DESTROY(free_op1.var) &&
11921 : !RETURN_VALUE_UNUSED(&opline->result)) {
11922 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
11923 : }
11924 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11925 0 : ZEND_VM_NEXT_OPCODE();
11926 : }
11927 :
11928 : static int ZEND_FETCH_DIM_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11929 0 : {
11930 0 : zend_op *opline = EX(opline);
11931 : zend_free_op free_op1, free_op2;
11932 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11933 :
11934 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
11935 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11936 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11937 0 : ZEND_VM_NEXT_OPCODE();
11938 : }
11939 :
11940 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11941 0 : {
11942 0 : zend_op *opline = EX(opline);
11943 : zend_free_op free_op1, free_op2;
11944 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
11945 : zval *dim;
11946 :
11947 : if (IS_VAR == IS_UNUSED && type == BP_VAR_R) {
11948 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
11949 : }
11950 0 : dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11951 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC);
11952 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11953 0 : if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
11954 : READY_TO_DESTROY(free_op1.var) &&
11955 : !RETURN_VALUE_UNUSED(&opline->result)) {
11956 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
11957 : }
11958 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11959 0 : ZEND_VM_NEXT_OPCODE();
11960 : }
11961 :
11962 : static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
11963 0 : {
11964 0 : zend_op *opline = EX(opline);
11965 : zend_free_op free_op1, free_op2;
11966 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
11967 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
11968 :
11969 : /* Not needed in DIM_UNSET
11970 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK) {
11971 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
11972 : }
11973 : */
11974 : if (IS_VAR == IS_CV) {
11975 : if (container != &EG(uninitialized_zval_ptr)) {
11976 : SEPARATE_ZVAL_IF_NOT_REF(container);
11977 : }
11978 : }
11979 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
11980 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
11981 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
11982 : READY_TO_DESTROY(free_op1.var) &&
11983 : !RETURN_VALUE_UNUSED(&opline->result)) {
11984 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
11985 : }
11986 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
11987 0 : if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) {
11988 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
11989 : } else {
11990 : zend_free_op free_res;
11991 :
11992 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
11993 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
11994 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
11995 : }
11996 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
11997 0 : FREE_OP_VAR_PTR(free_res);
11998 : }
11999 0 : ZEND_VM_NEXT_OPCODE();
12000 : }
12001 :
12002 : static int zend_fetch_property_address_read_helper_SPEC_VAR_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
12003 0 : {
12004 0 : zend_op *opline = EX(opline);
12005 : zval *container;
12006 : zval **retval;
12007 : zend_free_op free_op1;
12008 :
12009 0 : retval = &EX_T(opline->result.u.var).var.ptr;
12010 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
12011 :
12012 0 : container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12013 :
12014 0 : if (container == EG(error_zval_ptr)) {
12015 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
12016 0 : *retval = EG(error_zval_ptr);
12017 0 : PZVAL_LOCK(*retval);
12018 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12019 : }
12020 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12021 0 : ZEND_VM_NEXT_OPCODE();
12022 : }
12023 :
12024 :
12025 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
12026 0 : if (type != BP_VAR_IS) {
12027 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
12028 : }
12029 0 : *retval = EG(uninitialized_zval_ptr);
12030 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
12031 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12032 : } else {
12033 : zend_free_op free_op2;
12034 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12035 :
12036 : if (0) {
12037 : MAKE_REAL_ZVAL_PTR(offset);
12038 : }
12039 :
12040 : /* here we are sure we are dealing with an object */
12041 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
12042 :
12043 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
12044 0 : zval_dtor(*retval);
12045 0 : FREE_ZVAL(*retval);
12046 : } else {
12047 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
12048 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12049 : }
12050 :
12051 : if (0) {
12052 : zval_ptr_dtor(&offset);
12053 : } else {
12054 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12055 : }
12056 : }
12057 :
12058 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12059 0 : ZEND_VM_NEXT_OPCODE();
12060 : }
12061 :
12062 : static int ZEND_FETCH_OBJ_R_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12063 0 : {
12064 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12065 : }
12066 :
12067 : static int ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12068 0 : {
12069 0 : zend_op *opline = EX(opline);
12070 : zend_free_op free_op1, free_op2;
12071 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12072 :
12073 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_VAR != IS_CV) {
12074 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
12075 0 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
12076 : }
12077 :
12078 : if (0) {
12079 : MAKE_REAL_ZVAL_PTR(property);
12080 : }
12081 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
12082 : if (0) {
12083 : zval_ptr_dtor(&property);
12084 : } else {
12085 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12086 : }
12087 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
12088 : READY_TO_DESTROY(free_op1.var) &&
12089 : !RETURN_VALUE_UNUSED(&opline->result)) {
12090 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12091 : }
12092 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12093 0 : ZEND_VM_NEXT_OPCODE();
12094 : }
12095 :
12096 : static int ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12097 0 : {
12098 0 : zend_op *opline = EX(opline);
12099 : zend_free_op free_op1, free_op2;
12100 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12101 :
12102 : if (0) {
12103 : MAKE_REAL_ZVAL_PTR(property);
12104 : }
12105 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
12106 : if (0) {
12107 : zval_ptr_dtor(&property);
12108 : } else {
12109 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12110 : }
12111 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
12112 : READY_TO_DESTROY(free_op1.var) &&
12113 : !RETURN_VALUE_UNUSED(&opline->result)) {
12114 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12115 : }
12116 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12117 0 : ZEND_VM_NEXT_OPCODE();
12118 : }
12119 :
12120 : static int ZEND_FETCH_OBJ_IS_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12121 0 : {
12122 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12123 : }
12124 :
12125 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12126 0 : {
12127 0 : zend_op *opline = EX(opline);
12128 :
12129 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
12130 : /* Behave like FETCH_OBJ_W */
12131 : zend_free_op free_op1, free_op2;
12132 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12133 :
12134 : if (0) {
12135 : MAKE_REAL_ZVAL_PTR(property);
12136 : }
12137 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
12138 : if (0) {
12139 : zval_ptr_dtor(&property);
12140 : } else {
12141 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12142 : }
12143 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
12144 : READY_TO_DESTROY(free_op1.var) &&
12145 : !RETURN_VALUE_UNUSED(&opline->result)) {
12146 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12147 : }
12148 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12149 0 : ZEND_VM_NEXT_OPCODE();
12150 : } else {
12151 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12152 : }
12153 : }
12154 :
12155 : static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12156 0 : {
12157 0 : zend_op *opline = EX(opline);
12158 : zend_free_op free_op1, free_op2, free_res;
12159 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12160 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12161 :
12162 : if (IS_VAR == IS_CV) {
12163 : if (container != &EG(uninitialized_zval_ptr)) {
12164 : SEPARATE_ZVAL_IF_NOT_REF(container);
12165 : }
12166 : }
12167 : if (0) {
12168 : MAKE_REAL_ZVAL_PTR(property);
12169 : }
12170 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
12171 : if (0) {
12172 : zval_ptr_dtor(&property);
12173 : } else {
12174 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12175 : }
12176 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
12177 : READY_TO_DESTROY(free_op1.var) &&
12178 : !RETURN_VALUE_UNUSED(&opline->result)) {
12179 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12180 : }
12181 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12182 :
12183 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
12184 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
12185 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
12186 : }
12187 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
12188 0 : FREE_OP_VAR_PTR(free_res);
12189 0 : ZEND_VM_NEXT_OPCODE();
12190 : }
12191 :
12192 : static int ZEND_ASSIGN_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12193 0 : {
12194 0 : zend_op *opline = EX(opline);
12195 0 : zend_op *op_data = opline+1;
12196 : zend_free_op free_op1;
12197 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12198 :
12199 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
12200 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12201 : /* assign_obj has two opcodes! */
12202 0 : ZEND_VM_INC_OPCODE();
12203 0 : ZEND_VM_NEXT_OPCODE();
12204 : }
12205 :
12206 : static int ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12207 0 : {
12208 0 : zend_op *opline = EX(opline);
12209 0 : zend_op *op_data = opline+1;
12210 : zend_free_op free_op1;
12211 : zval **object_ptr;
12212 :
12213 0 : if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
12214 : /* not an array offset */
12215 0 : object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12216 : } else {
12217 0 : object_ptr = NULL;
12218 : }
12219 :
12220 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
12221 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
12222 : } else {
12223 : zend_free_op free_op2, free_op_data1;
12224 : zval *value;
12225 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12226 :
12227 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
12228 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12229 :
12230 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
12231 0 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
12232 0 : FREE_OP_IF_VAR(free_op_data1);
12233 : }
12234 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12235 : /* assign_dim has two opcodes! */
12236 0 : ZEND_VM_INC_OPCODE();
12237 0 : ZEND_VM_NEXT_OPCODE();
12238 : }
12239 :
12240 : static int ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12241 0 : {
12242 0 : zend_op *opline = EX(opline);
12243 : zend_free_op free_op2;
12244 0 : zval *value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12245 :
12246 0 : zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_VAR), EX(Ts) TSRMLS_CC);
12247 : /* zend_assign_to_variable() always takes care of op2, never free it! */
12248 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12249 :
12250 0 : ZEND_VM_NEXT_OPCODE();
12251 : }
12252 :
12253 : static int ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12254 0 : {
12255 0 : zend_op *opline = EX(opline);
12256 : zend_free_op free_op1, free_op2;
12257 : zval **variable_ptr_ptr;
12258 0 : zval **value_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12259 :
12260 0 : if (IS_VAR == IS_VAR &&
12261 : value_ptr_ptr &&
12262 : !(*value_ptr_ptr)->is_ref &&
12263 : opline->extended_value == ZEND_RETURNS_FUNCTION &&
12264 : !EX_T(opline->op2.u.var).var.fcall_returned_reference) {
12265 0 : if (free_op2.var == NULL) {
12266 0 : PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
12267 : }
12268 0 : zend_error(E_STRICT, "Only variables should be assigned by reference");
12269 0 : return ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12270 : }
12271 0 : if (IS_VAR == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) {
12272 0 : zend_error(E_ERROR, "Cannot assign by reference to overloaded object");
12273 : }
12274 :
12275 0 : variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12276 0 : zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
12277 :
12278 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
12279 0 : EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr;
12280 0 : PZVAL_LOCK(*variable_ptr_ptr);
12281 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12282 : }
12283 :
12284 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12285 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12286 :
12287 0 : ZEND_VM_NEXT_OPCODE();
12288 : }
12289 :
12290 : static int ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12291 0 : {
12292 0 : zend_op *opline = EX(opline);
12293 : zval *function_name;
12294 : char *function_name_strval;
12295 : int function_name_strlen;
12296 : zend_free_op free_op1, free_op2;
12297 :
12298 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
12299 :
12300 0 : function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12301 :
12302 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
12303 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
12304 : }
12305 :
12306 0 : function_name_strval = Z_STRVAL_P(function_name);
12307 0 : function_name_strlen = Z_STRLEN_P(function_name);
12308 :
12309 0 : EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12310 :
12311 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
12312 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
12313 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
12314 : }
12315 :
12316 : /* First, locate the function. */
12317 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
12318 0 : if (!EX(fbc)) {
12319 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
12320 : }
12321 : } else {
12322 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
12323 : }
12324 :
12325 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
12326 0 : EX(object) = NULL;
12327 : } else {
12328 0 : if (!PZVAL_IS_REF(EX(object))) {
12329 0 : EX(object)->refcount++; /* For $this pointer */
12330 : } else {
12331 : zval *this_ptr;
12332 0 : ALLOC_ZVAL(this_ptr);
12333 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
12334 0 : zval_copy_ctor(this_ptr);
12335 0 : EX(object) = this_ptr;
12336 : }
12337 : }
12338 :
12339 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12340 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12341 :
12342 0 : ZEND_VM_NEXT_OPCODE();
12343 : }
12344 :
12345 : static int ZEND_CASE_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12346 0 : {
12347 0 : zend_op *opline = EX(opline);
12348 0 : int switch_expr_is_overloaded=0;
12349 : zend_free_op free_op1, free_op2;
12350 :
12351 : if (IS_VAR==IS_VAR) {
12352 0 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
12353 0 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
12354 : } else {
12355 0 : switch_expr_is_overloaded = 1;
12356 0 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
12357 : }
12358 : }
12359 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
12360 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
12361 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
12362 :
12363 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12364 0 : if (switch_expr_is_overloaded) {
12365 : /* We only free op1 if this is a string offset,
12366 : * Since if it is a TMP_VAR, it'll be reused by
12367 : * other CASE opcodes (whereas string offsets
12368 : * are allocated at each get_zval_ptr())
12369 : */
12370 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12371 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
12372 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
12373 : }
12374 0 : ZEND_VM_NEXT_OPCODE();
12375 : }
12376 :
12377 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12378 0 : {
12379 0 : zend_op *opline = EX(opline);
12380 : zend_free_op free_op1, free_op2;
12381 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
12382 : zval *expr_ptr;
12383 0 : zval *offset=_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12384 :
12385 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
12386 0 : zval **expr_ptr_ptr = NULL;
12387 :
12388 0 : if (opline->extended_value) {
12389 0 : expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12390 0 : expr_ptr = *expr_ptr_ptr;
12391 : } else {
12392 0 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12393 : }
12394 : #else
12395 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12396 : #endif
12397 :
12398 : if (0) { /* temporary variable */
12399 : zval *new_expr;
12400 :
12401 : ALLOC_ZVAL(new_expr);
12402 : INIT_PZVAL_COPY(new_expr, expr_ptr);
12403 : expr_ptr = new_expr;
12404 : } else {
12405 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
12406 0 : if (opline->extended_value) {
12407 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
12408 0 : expr_ptr = *expr_ptr_ptr;
12409 0 : expr_ptr->refcount++;
12410 : } else
12411 : #endif
12412 0 : if (PZVAL_IS_REF(expr_ptr)) {
12413 : zval *new_expr;
12414 :
12415 0 : ALLOC_ZVAL(new_expr);
12416 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
12417 0 : expr_ptr = new_expr;
12418 0 : zendi_zval_copy_ctor(*expr_ptr);
12419 : } else {
12420 0 : expr_ptr->refcount++;
12421 : }
12422 : }
12423 0 : if (offset) {
12424 0 : switch (Z_TYPE_P(offset)) {
12425 : case IS_DOUBLE:
12426 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
12427 0 : break;
12428 : case IS_LONG:
12429 : case IS_BOOL:
12430 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
12431 0 : break;
12432 : case IS_STRING:
12433 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
12434 0 : break;
12435 : case IS_NULL:
12436 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
12437 0 : break;
12438 : default:
12439 0 : zend_error(E_WARNING, "Illegal offset type");
12440 0 : zval_ptr_dtor(&expr_ptr);
12441 : /* do nothing */
12442 : break;
12443 : }
12444 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12445 : } else {
12446 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
12447 : }
12448 0 : if (opline->extended_value) {
12449 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12450 : } else {
12451 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12452 : }
12453 0 : ZEND_VM_NEXT_OPCODE();
12454 : }
12455 :
12456 : static int ZEND_INIT_ARRAY_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12457 0 : {
12458 0 : zend_op *opline = EX(opline);
12459 :
12460 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
12461 : if (IS_VAR == IS_UNUSED) {
12462 : ZEND_VM_NEXT_OPCODE();
12463 : #if 0 || IS_VAR != IS_UNUSED
12464 : } else {
12465 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12466 : #endif
12467 : }
12468 : }
12469 :
12470 : static int ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12471 0 : {
12472 0 : zend_op *opline = EX(opline);
12473 : zend_free_op free_op1, free_op2;
12474 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12475 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12476 : long index;
12477 :
12478 0 : if (container) {
12479 : if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
12480 : SEPARATE_ZVAL_IF_NOT_REF(container);
12481 : }
12482 0 : switch (Z_TYPE_PP(container)) {
12483 : case IS_ARRAY: {
12484 0 : HashTable *ht = Z_ARRVAL_PP(container);
12485 :
12486 0 : switch (Z_TYPE_P(offset)) {
12487 : case IS_DOUBLE:
12488 0 : index = (long) Z_DVAL_P(offset);
12489 0 : zend_hash_index_del(ht, index);
12490 0 : break;
12491 : case IS_RESOURCE:
12492 : case IS_BOOL:
12493 : case IS_LONG:
12494 0 : index = Z_LVAL_P(offset);
12495 0 : zend_hash_index_del(ht, index);
12496 0 : break;
12497 : case IS_STRING:
12498 : if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
12499 0 : offset->refcount++;
12500 : }
12501 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
12502 : ht == &EG(symbol_table)) {
12503 : zend_execute_data *ex;
12504 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
12505 :
12506 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
12507 0 : if (ex->op_array && ex->symbol_table == ht) {
12508 : int i;
12509 :
12510 0 : for (i = 0; i < ex->op_array->last_var; i++) {
12511 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
12512 : ex->op_array->vars[i].name_len == offset->value.str.len &&
12513 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
12514 0 : ex->CVs[i] = NULL;
12515 0 : break;
12516 : }
12517 : }
12518 : }
12519 : }
12520 : }
12521 : if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
12522 0 : zval_ptr_dtor(&offset);
12523 : }
12524 0 : break;
12525 : case IS_NULL:
12526 0 : zend_hash_del(ht, "", sizeof(""));
12527 0 : break;
12528 : default:
12529 0 : zend_error(E_WARNING, "Illegal offset type in unset");
12530 : break;
12531 : }
12532 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12533 0 : break;
12534 : }
12535 : case IS_OBJECT:
12536 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
12537 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
12538 : }
12539 : if (0) {
12540 : MAKE_REAL_ZVAL_PTR(offset);
12541 : }
12542 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
12543 : if (0) {
12544 : zval_ptr_dtor(&offset);
12545 : } else {
12546 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12547 : }
12548 0 : break;
12549 : case IS_STRING:
12550 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
12551 : ZEND_VM_CONTINUE(); /* bailed out before */
12552 : default:
12553 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12554 : break;
12555 : }
12556 : } else {
12557 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12558 : }
12559 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12560 :
12561 0 : ZEND_VM_NEXT_OPCODE();
12562 : }
12563 :
12564 : static int ZEND_UNSET_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12565 0 : {
12566 0 : zend_op *opline = EX(opline);
12567 : zend_free_op free_op1, free_op2;
12568 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12569 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12570 :
12571 0 : if (container) {
12572 : if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
12573 : SEPARATE_ZVAL_IF_NOT_REF(container);
12574 : }
12575 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
12576 : if (0) {
12577 : MAKE_REAL_ZVAL_PTR(offset);
12578 : }
12579 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
12580 : if (0) {
12581 : zval_ptr_dtor(&offset);
12582 : } else {
12583 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12584 : }
12585 : } else {
12586 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12587 : }
12588 : } else {
12589 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12590 : }
12591 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12592 :
12593 0 : ZEND_VM_NEXT_OPCODE();
12594 : }
12595 :
12596 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
12597 0 : {
12598 0 : zend_op *opline = EX(opline);
12599 : zend_free_op free_op1;
12600 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12601 0 : zval **value = NULL;
12602 0 : int result = 0;
12603 : long index;
12604 :
12605 0 : if (container) {
12606 : zend_free_op free_op2;
12607 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
12608 :
12609 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
12610 : HashTable *ht;
12611 0 : int isset = 0;
12612 :
12613 0 : ht = Z_ARRVAL_PP(container);
12614 :
12615 0 : switch (Z_TYPE_P(offset)) {
12616 : case IS_DOUBLE:
12617 0 : index = (long) Z_DVAL_P(offset);
12618 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
12619 0 : isset = 1;
12620 : }
12621 0 : break;
12622 : case IS_RESOURCE:
12623 : case IS_BOOL:
12624 : case IS_LONG:
12625 0 : index = Z_LVAL_P(offset);
12626 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
12627 0 : isset = 1;
12628 : }
12629 0 : break;
12630 : case IS_STRING:
12631 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
12632 0 : isset = 1;
12633 : }
12634 0 : break;
12635 : case IS_NULL:
12636 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
12637 0 : isset = 1;
12638 : }
12639 0 : break;
12640 : default:
12641 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
12642 :
12643 : break;
12644 : }
12645 :
12646 0 : switch (opline->extended_value) {
12647 : case ZEND_ISSET:
12648 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
12649 0 : result = 0;
12650 : } else {
12651 0 : result = isset;
12652 : }
12653 0 : break;
12654 : case ZEND_ISEMPTY:
12655 0 : if (!isset || !i_zend_is_true(*value)) {
12656 0 : result = 0;
12657 : } else {
12658 0 : result = 1;
12659 : }
12660 : break;
12661 : }
12662 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12663 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
12664 : if (0) {
12665 : MAKE_REAL_ZVAL_PTR(offset);
12666 : }
12667 0 : if (prop_dim) {
12668 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
12669 : } else {
12670 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
12671 : }
12672 : if (0) {
12673 : zval_ptr_dtor(&offset);
12674 : } else {
12675 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12676 : }
12677 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
12678 : zval tmp;
12679 :
12680 0 : if (Z_TYPE_P(offset) != IS_LONG) {
12681 0 : tmp = *offset;
12682 0 : zval_copy_ctor(&tmp);
12683 0 : convert_to_long(&tmp);
12684 0 : offset = &tmp;
12685 : }
12686 0 : if (Z_TYPE_P(offset) == IS_LONG) {
12687 0 : switch (opline->extended_value) {
12688 : case ZEND_ISSET:
12689 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
12690 0 : result = 1;
12691 : }
12692 0 : break;
12693 : case ZEND_ISEMPTY:
12694 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
12695 0 : result = 1;
12696 : }
12697 : break;
12698 : }
12699 : }
12700 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12701 : } else {
12702 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
12703 : }
12704 : }
12705 :
12706 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
12707 :
12708 0 : switch (opline->extended_value) {
12709 : case ZEND_ISSET:
12710 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
12711 0 : break;
12712 : case ZEND_ISEMPTY:
12713 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
12714 : break;
12715 : }
12716 :
12717 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12718 :
12719 0 : ZEND_VM_NEXT_OPCODE();
12720 : }
12721 :
12722 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12723 0 : {
12724 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12725 : }
12726 :
12727 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12728 0 : {
12729 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12730 : }
12731 :
12732 : static int zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
12733 0 : {
12734 0 : zend_op *opline = EX(opline);
12735 0 : zend_op *op_data = opline+1;
12736 : zend_free_op free_op1, free_op_data1;
12737 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12738 : zval *object;
12739 0 : zval *property = NULL;
12740 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
12741 0 : znode *result = &opline->result;
12742 0 : zval **retval = &EX_T(result->u.var).var.ptr;
12743 0 : int have_get_ptr = 0;
12744 :
12745 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
12746 0 : make_real_object(object_ptr TSRMLS_CC);
12747 0 : object = *object_ptr;
12748 :
12749 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
12750 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
12751 :
12752 0 : FREE_OP(free_op_data1);
12753 :
12754 0 : if (!RETURN_VALUE_UNUSED(result)) {
12755 0 : *retval = EG(uninitialized_zval_ptr);
12756 0 : PZVAL_LOCK(*retval);
12757 : }
12758 : } else {
12759 : /* here we are sure we are dealing with an object */
12760 : if (0) {
12761 : MAKE_REAL_ZVAL_PTR(property);
12762 : }
12763 :
12764 : /* here property is a string */
12765 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
12766 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
12767 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
12768 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
12769 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
12770 :
12771 0 : have_get_ptr = 1;
12772 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
12773 0 : if (!RETURN_VALUE_UNUSED(result)) {
12774 0 : *retval = *zptr;
12775 0 : PZVAL_LOCK(*retval);
12776 : }
12777 : }
12778 : }
12779 :
12780 0 : if (!have_get_ptr) {
12781 0 : zval *z = NULL;
12782 :
12783 0 : switch (opline->extended_value) {
12784 : case ZEND_ASSIGN_OBJ:
12785 0 : if (Z_OBJ_HT_P(object)->read_property) {
12786 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
12787 : }
12788 0 : break;
12789 : case ZEND_ASSIGN_DIM:
12790 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
12791 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
12792 : }
12793 : break;
12794 : }
12795 0 : if (z) {
12796 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
12797 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
12798 :
12799 0 : if (z->refcount == 0) {
12800 0 : zval_dtor(z);
12801 0 : FREE_ZVAL(z);
12802 : }
12803 0 : z = value;
12804 : }
12805 0 : z->refcount++;
12806 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
12807 0 : binary_op(z, z, value TSRMLS_CC);
12808 0 : switch (opline->extended_value) {
12809 : case ZEND_ASSIGN_OBJ:
12810 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
12811 0 : break;
12812 : case ZEND_ASSIGN_DIM:
12813 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
12814 : break;
12815 : }
12816 0 : if (!RETURN_VALUE_UNUSED(result)) {
12817 0 : *retval = z;
12818 0 : PZVAL_LOCK(*retval);
12819 : }
12820 0 : zval_ptr_dtor(&z);
12821 : } else {
12822 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
12823 0 : if (!RETURN_VALUE_UNUSED(result)) {
12824 0 : *retval = EG(uninitialized_zval_ptr);
12825 0 : PZVAL_LOCK(*retval);
12826 : }
12827 : }
12828 : }
12829 :
12830 : if (0) {
12831 : zval_ptr_dtor(&property);
12832 : } else {
12833 :
12834 : }
12835 0 : FREE_OP(free_op_data1);
12836 : }
12837 :
12838 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12839 : /* assign_obj has two opcodes! */
12840 0 : ZEND_VM_INC_OPCODE();
12841 0 : ZEND_VM_NEXT_OPCODE();
12842 : }
12843 :
12844 : static int zend_binary_assign_op_helper_SPEC_VAR_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
12845 0 : {
12846 0 : zend_op *opline = EX(opline);
12847 : zend_free_op free_op1, free_op_data2, free_op_data1;
12848 : zval **var_ptr;
12849 : zval *value;
12850 0 : zend_bool increment_opline = 0;
12851 :
12852 0 : switch (opline->extended_value) {
12853 : case ZEND_ASSIGN_OBJ:
12854 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12855 : break;
12856 : case ZEND_ASSIGN_DIM: {
12857 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12858 :
12859 0 : if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) {
12860 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
12861 : }
12862 :
12863 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
12864 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12865 : } else {
12866 0 : zend_op *op_data = opline+1;
12867 0 : zval *dim = NULL;
12868 :
12869 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
12870 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
12871 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
12872 0 : increment_opline = 1;
12873 : }
12874 : }
12875 0 : break;
12876 : default:
12877 0 : value = NULL;
12878 0 : var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
12879 : /* do nothing */
12880 : break;
12881 : }
12882 :
12883 0 : if (!var_ptr) {
12884 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
12885 : }
12886 :
12887 0 : if (*var_ptr == EG(error_zval_ptr)) {
12888 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
12889 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
12890 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
12891 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12892 : }
12893 :
12894 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12895 0 : if (increment_opline) {
12896 0 : ZEND_VM_INC_OPCODE();
12897 : }
12898 0 : ZEND_VM_NEXT_OPCODE();
12899 : }
12900 :
12901 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
12902 :
12903 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
12904 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
12905 : /* proxy object */
12906 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
12907 0 : objval->refcount++;
12908 0 : binary_op(objval, objval, value TSRMLS_CC);
12909 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
12910 0 : zval_ptr_dtor(&objval);
12911 : } else {
12912 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
12913 : }
12914 :
12915 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
12916 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
12917 0 : PZVAL_LOCK(*var_ptr);
12918 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12919 : }
12920 :
12921 0 : if (increment_opline) {
12922 0 : ZEND_VM_INC_OPCODE();
12923 0 : FREE_OP(free_op_data1);
12924 0 : FREE_OP_VAR_PTR(free_op_data2);
12925 : }
12926 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12927 0 : ZEND_VM_NEXT_OPCODE();
12928 : }
12929 :
12930 : static int ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12931 0 : {
12932 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12933 : }
12934 :
12935 : static int ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12936 0 : {
12937 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12938 : }
12939 :
12940 : static int ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12941 0 : {
12942 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12943 : }
12944 :
12945 : static int ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12946 0 : {
12947 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12948 : }
12949 :
12950 : static int ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12951 0 : {
12952 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12953 : }
12954 :
12955 : static int ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12956 0 : {
12957 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12958 : }
12959 :
12960 : static int ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12961 0 : {
12962 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12963 : }
12964 :
12965 : static int ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12966 0 : {
12967 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12968 : }
12969 :
12970 : static int ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12971 0 : {
12972 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12973 : }
12974 :
12975 : static int ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12976 0 : {
12977 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12978 : }
12979 :
12980 : static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12981 0 : {
12982 0 : return zend_binary_assign_op_helper_SPEC_VAR_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
12983 : }
12984 :
12985 : static int ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12986 0 : {
12987 0 : zend_op *opline = EX(opline);
12988 : zend_free_op free_op1;
12989 0 : zval *dim = NULL;
12990 :
12991 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
12992 :
12993 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
12994 : READY_TO_DESTROY(free_op1.var) &&
12995 : !RETURN_VALUE_UNUSED(&opline->result)) {
12996 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
12997 : }
12998 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
12999 0 : ZEND_VM_NEXT_OPCODE();
13000 : }
13001 :
13002 : static int ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13003 0 : {
13004 0 : zend_op *opline = EX(opline);
13005 : zend_free_op free_op1;
13006 0 : zval *dim = NULL;
13007 :
13008 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
13009 :
13010 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
13011 : READY_TO_DESTROY(free_op1.var) &&
13012 : !RETURN_VALUE_UNUSED(&opline->result)) {
13013 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13014 : }
13015 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13016 0 : ZEND_VM_NEXT_OPCODE();
13017 : }
13018 :
13019 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13020 0 : {
13021 0 : zend_op *opline = EX(opline);
13022 : zend_free_op free_op1;
13023 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
13024 : zval *dim;
13025 :
13026 0 : if (IS_UNUSED == IS_UNUSED && type == BP_VAR_R) {
13027 0 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
13028 : }
13029 0 : dim = NULL;
13030 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC);
13031 :
13032 0 : if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
13033 : READY_TO_DESTROY(free_op1.var) &&
13034 : !RETURN_VALUE_UNUSED(&opline->result)) {
13035 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13036 : }
13037 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13038 0 : ZEND_VM_NEXT_OPCODE();
13039 : }
13040 :
13041 : static int ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13042 4 : {
13043 4 : zend_op *opline = EX(opline);
13044 4 : zend_op *op_data = opline+1;
13045 : zend_free_op free_op1;
13046 : zval **object_ptr;
13047 :
13048 4 : if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
13049 : /* not an array offset */
13050 4 : object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13051 : } else {
13052 0 : object_ptr = NULL;
13053 : }
13054 :
13055 4 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
13056 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
13057 : } else {
13058 : zend_free_op free_op_data1;
13059 : zval *value;
13060 4 : zval *dim = NULL;
13061 :
13062 4 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
13063 :
13064 4 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
13065 4 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
13066 4 : FREE_OP_IF_VAR(free_op_data1);
13067 : }
13068 4 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13069 : /* assign_dim has two opcodes! */
13070 4 : ZEND_VM_INC_OPCODE();
13071 4 : ZEND_VM_NEXT_OPCODE();
13072 : }
13073 :
13074 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13075 0 : {
13076 0 : zend_op *opline = EX(opline);
13077 : zend_free_op free_op1;
13078 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
13079 : zval *expr_ptr;
13080 0 : zval *offset=NULL;
13081 :
13082 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
13083 0 : zval **expr_ptr_ptr = NULL;
13084 :
13085 0 : if (opline->extended_value) {
13086 0 : expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13087 0 : expr_ptr = *expr_ptr_ptr;
13088 : } else {
13089 0 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13090 : }
13091 : #else
13092 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13093 : #endif
13094 :
13095 : if (0) { /* temporary variable */
13096 : zval *new_expr;
13097 :
13098 : ALLOC_ZVAL(new_expr);
13099 : INIT_PZVAL_COPY(new_expr, expr_ptr);
13100 : expr_ptr = new_expr;
13101 : } else {
13102 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
13103 0 : if (opline->extended_value) {
13104 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
13105 0 : expr_ptr = *expr_ptr_ptr;
13106 0 : expr_ptr->refcount++;
13107 : } else
13108 : #endif
13109 0 : if (PZVAL_IS_REF(expr_ptr)) {
13110 : zval *new_expr;
13111 :
13112 0 : ALLOC_ZVAL(new_expr);
13113 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
13114 0 : expr_ptr = new_expr;
13115 0 : zendi_zval_copy_ctor(*expr_ptr);
13116 : } else {
13117 0 : expr_ptr->refcount++;
13118 : }
13119 : }
13120 0 : if (offset) {
13121 0 : switch (Z_TYPE_P(offset)) {
13122 : case IS_DOUBLE:
13123 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
13124 0 : break;
13125 : case IS_LONG:
13126 : case IS_BOOL:
13127 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
13128 0 : break;
13129 : case IS_STRING:
13130 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
13131 0 : break;
13132 : case IS_NULL:
13133 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
13134 0 : break;
13135 : default:
13136 0 : zend_error(E_WARNING, "Illegal offset type");
13137 0 : zval_ptr_dtor(&expr_ptr);
13138 : /* do nothing */
13139 : break;
13140 : }
13141 :
13142 : } else {
13143 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
13144 : }
13145 0 : if (opline->extended_value) {
13146 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13147 : } else {
13148 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13149 : }
13150 0 : ZEND_VM_NEXT_OPCODE();
13151 : }
13152 :
13153 : static int ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13154 0 : {
13155 0 : zend_op *opline = EX(opline);
13156 :
13157 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
13158 : if (IS_VAR == IS_UNUSED) {
13159 : ZEND_VM_NEXT_OPCODE();
13160 : #if 0 || IS_VAR != IS_UNUSED
13161 : } else {
13162 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13163 : #endif
13164 : }
13165 : }
13166 :
13167 : static int ZEND_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13168 0 : {
13169 0 : zend_op *opline = EX(opline);
13170 : zend_free_op free_op1;
13171 :
13172 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
13173 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13174 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13175 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13176 :
13177 0 : ZEND_VM_NEXT_OPCODE();
13178 : }
13179 :
13180 : static int ZEND_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13181 1 : {
13182 1 : zend_op *opline = EX(opline);
13183 : zend_free_op free_op1;
13184 :
13185 1 : sub_function(&EX_T(opline->result.u.var).tmp_var,
13186 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13187 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13188 1 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13189 :
13190 1 : ZEND_VM_NEXT_OPCODE();
13191 : }
13192 :
13193 : static int ZEND_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13194 0 : {
13195 0 : zend_op *opline = EX(opline);
13196 : zend_free_op free_op1;
13197 :
13198 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
13199 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13200 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13201 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13202 :
13203 0 : ZEND_VM_NEXT_OPCODE();
13204 : }
13205 :
13206 : static int ZEND_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13207 0 : {
13208 0 : zend_op *opline = EX(opline);
13209 : zend_free_op free_op1;
13210 :
13211 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
13212 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13213 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13214 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13215 :
13216 0 : ZEND_VM_NEXT_OPCODE();
13217 : }
13218 :
13219 : static int ZEND_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13220 0 : {
13221 0 : zend_op *opline = EX(opline);
13222 : zend_free_op free_op1;
13223 :
13224 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
13225 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13226 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13227 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13228 :
13229 0 : ZEND_VM_NEXT_OPCODE();
13230 : }
13231 :
13232 : static int ZEND_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13233 0 : {
13234 0 : zend_op *opline = EX(opline);
13235 : zend_free_op free_op1;
13236 :
13237 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
13238 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13239 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13240 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13241 :
13242 0 : ZEND_VM_NEXT_OPCODE();
13243 : }
13244 :
13245 : static int ZEND_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13246 0 : {
13247 0 : zend_op *opline = EX(opline);
13248 : zend_free_op free_op1;
13249 :
13250 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
13251 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13252 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13253 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13254 :
13255 0 : ZEND_VM_NEXT_OPCODE();
13256 : }
13257 :
13258 : static int ZEND_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13259 0 : {
13260 0 : zend_op *opline = EX(opline);
13261 : zend_free_op free_op1;
13262 :
13263 0 : concat_function(&EX_T(opline->result.u.var).tmp_var,
13264 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13265 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13266 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13267 :
13268 0 : ZEND_VM_NEXT_OPCODE();
13269 : }
13270 :
13271 : static int ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13272 0 : {
13273 0 : zend_op *opline = EX(opline);
13274 : zend_free_op free_op1;
13275 :
13276 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
13277 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13278 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13279 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13280 :
13281 0 : ZEND_VM_NEXT_OPCODE();
13282 : }
13283 :
13284 : static int ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13285 0 : {
13286 0 : zend_op *opline = EX(opline);
13287 : zend_free_op free_op1;
13288 :
13289 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
13290 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13291 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13292 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13293 :
13294 0 : ZEND_VM_NEXT_OPCODE();
13295 : }
13296 :
13297 : static int ZEND_IS_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13298 0 : {
13299 0 : zend_op *opline = EX(opline);
13300 : zend_free_op free_op1;
13301 :
13302 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
13303 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13304 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13305 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13306 :
13307 0 : ZEND_VM_NEXT_OPCODE();
13308 : }
13309 :
13310 : static int ZEND_IS_NOT_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13311 0 : {
13312 0 : zend_op *opline = EX(opline);
13313 : zend_free_op free_op1;
13314 :
13315 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
13316 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13317 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13318 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13319 :
13320 0 : ZEND_VM_NEXT_OPCODE();
13321 : }
13322 :
13323 : static int ZEND_IS_SMALLER_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13324 0 : {
13325 0 : zend_op *opline = EX(opline);
13326 : zend_free_op free_op1;
13327 :
13328 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
13329 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13330 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13331 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13332 :
13333 0 : ZEND_VM_NEXT_OPCODE();
13334 : }
13335 :
13336 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13337 0 : {
13338 0 : zend_op *opline = EX(opline);
13339 : zend_free_op free_op1;
13340 :
13341 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
13342 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13343 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13344 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13345 :
13346 0 : ZEND_VM_NEXT_OPCODE();
13347 : }
13348 :
13349 : static int ZEND_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13350 0 : {
13351 0 : zend_op *opline = EX(opline);
13352 : zend_free_op free_op1;
13353 :
13354 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
13355 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13356 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13357 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13358 :
13359 0 : ZEND_VM_NEXT_OPCODE();
13360 : }
13361 :
13362 : static int ZEND_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13363 0 : {
13364 0 : zend_op *opline = EX(opline);
13365 : zend_free_op free_op1;
13366 :
13367 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
13368 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13369 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13370 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13371 :
13372 0 : ZEND_VM_NEXT_OPCODE();
13373 : }
13374 :
13375 : static int ZEND_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13376 0 : {
13377 0 : zend_op *opline = EX(opline);
13378 : zend_free_op free_op1;
13379 :
13380 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
13381 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13382 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13383 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13384 :
13385 0 : ZEND_VM_NEXT_OPCODE();
13386 : }
13387 :
13388 : static int ZEND_BOOL_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13389 0 : {
13390 0 : zend_op *opline = EX(opline);
13391 : zend_free_op free_op1;
13392 :
13393 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
13394 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
13395 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
13396 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13397 :
13398 0 : ZEND_VM_NEXT_OPCODE();
13399 : }
13400 :
13401 : static int zend_binary_assign_op_obj_helper_SPEC_VAR_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
13402 0 : {
13403 0 : zend_op *opline = EX(opline);
13404 0 : zend_op *op_data = opline+1;
13405 : zend_free_op free_op1, free_op_data1;
13406 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13407 : zval *object;
13408 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13409 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
13410 0 : znode *result = &opline->result;
13411 0 : zval **retval = &EX_T(result->u.var).var.ptr;
13412 0 : int have_get_ptr = 0;
13413 :
13414 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
13415 0 : make_real_object(object_ptr TSRMLS_CC);
13416 0 : object = *object_ptr;
13417 :
13418 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
13419 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
13420 :
13421 0 : FREE_OP(free_op_data1);
13422 :
13423 0 : if (!RETURN_VALUE_UNUSED(result)) {
13424 0 : *retval = EG(uninitialized_zval_ptr);
13425 0 : PZVAL_LOCK(*retval);
13426 : }
13427 : } else {
13428 : /* here we are sure we are dealing with an object */
13429 : if (0) {
13430 : MAKE_REAL_ZVAL_PTR(property);
13431 : }
13432 :
13433 : /* here property is a string */
13434 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
13435 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
13436 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
13437 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
13438 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
13439 :
13440 0 : have_get_ptr = 1;
13441 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
13442 0 : if (!RETURN_VALUE_UNUSED(result)) {
13443 0 : *retval = *zptr;
13444 0 : PZVAL_LOCK(*retval);
13445 : }
13446 : }
13447 : }
13448 :
13449 0 : if (!have_get_ptr) {
13450 0 : zval *z = NULL;
13451 :
13452 0 : switch (opline->extended_value) {
13453 : case ZEND_ASSIGN_OBJ:
13454 0 : if (Z_OBJ_HT_P(object)->read_property) {
13455 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
13456 : }
13457 0 : break;
13458 : case ZEND_ASSIGN_DIM:
13459 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
13460 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
13461 : }
13462 : break;
13463 : }
13464 0 : if (z) {
13465 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
13466 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
13467 :
13468 0 : if (z->refcount == 0) {
13469 0 : zval_dtor(z);
13470 0 : FREE_ZVAL(z);
13471 : }
13472 0 : z = value;
13473 : }
13474 0 : z->refcount++;
13475 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
13476 0 : binary_op(z, z, value TSRMLS_CC);
13477 0 : switch (opline->extended_value) {
13478 : case ZEND_ASSIGN_OBJ:
13479 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
13480 0 : break;
13481 : case ZEND_ASSIGN_DIM:
13482 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
13483 : break;
13484 : }
13485 0 : if (!RETURN_VALUE_UNUSED(result)) {
13486 0 : *retval = z;
13487 0 : PZVAL_LOCK(*retval);
13488 : }
13489 0 : zval_ptr_dtor(&z);
13490 : } else {
13491 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
13492 0 : if (!RETURN_VALUE_UNUSED(result)) {
13493 0 : *retval = EG(uninitialized_zval_ptr);
13494 0 : PZVAL_LOCK(*retval);
13495 : }
13496 : }
13497 : }
13498 :
13499 : if (0) {
13500 : zval_ptr_dtor(&property);
13501 : } else {
13502 :
13503 : }
13504 0 : FREE_OP(free_op_data1);
13505 : }
13506 :
13507 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13508 : /* assign_obj has two opcodes! */
13509 0 : ZEND_VM_INC_OPCODE();
13510 0 : ZEND_VM_NEXT_OPCODE();
13511 : }
13512 :
13513 : static int zend_binary_assign_op_helper_SPEC_VAR_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
13514 0 : {
13515 0 : zend_op *opline = EX(opline);
13516 : zend_free_op free_op1, free_op_data2, free_op_data1;
13517 : zval **var_ptr;
13518 : zval *value;
13519 0 : zend_bool increment_opline = 0;
13520 :
13521 0 : switch (opline->extended_value) {
13522 : case ZEND_ASSIGN_OBJ:
13523 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13524 : break;
13525 : case ZEND_ASSIGN_DIM: {
13526 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13527 :
13528 0 : if (object_ptr && IS_VAR != IS_CV && !(free_op1.var != NULL)) {
13529 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
13530 : }
13531 :
13532 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
13533 0 : return zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13534 : } else {
13535 0 : zend_op *op_data = opline+1;
13536 0 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13537 :
13538 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
13539 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
13540 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
13541 0 : increment_opline = 1;
13542 : }
13543 : }
13544 0 : break;
13545 : default:
13546 0 : value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13547 0 : var_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13548 : /* do nothing */
13549 : break;
13550 : }
13551 :
13552 0 : if (!var_ptr) {
13553 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
13554 : }
13555 :
13556 0 : if (*var_ptr == EG(error_zval_ptr)) {
13557 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
13558 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
13559 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
13560 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13561 : }
13562 :
13563 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13564 0 : if (increment_opline) {
13565 0 : ZEND_VM_INC_OPCODE();
13566 : }
13567 0 : ZEND_VM_NEXT_OPCODE();
13568 : }
13569 :
13570 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
13571 :
13572 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
13573 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
13574 : /* proxy object */
13575 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
13576 0 : objval->refcount++;
13577 0 : binary_op(objval, objval, value TSRMLS_CC);
13578 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
13579 0 : zval_ptr_dtor(&objval);
13580 : } else {
13581 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
13582 : }
13583 :
13584 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
13585 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
13586 0 : PZVAL_LOCK(*var_ptr);
13587 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13588 : }
13589 :
13590 0 : if (increment_opline) {
13591 0 : ZEND_VM_INC_OPCODE();
13592 0 : FREE_OP(free_op_data1);
13593 0 : FREE_OP_VAR_PTR(free_op_data2);
13594 : }
13595 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13596 0 : ZEND_VM_NEXT_OPCODE();
13597 : }
13598 :
13599 : static int ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13600 0 : {
13601 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13602 : }
13603 :
13604 : static int ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13605 0 : {
13606 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13607 : }
13608 :
13609 : static int ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13610 0 : {
13611 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13612 : }
13613 :
13614 : static int ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13615 0 : {
13616 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13617 : }
13618 :
13619 : static int ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13620 0 : {
13621 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13622 : }
13623 :
13624 : static int ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13625 0 : {
13626 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13627 : }
13628 :
13629 : static int ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13630 0 : {
13631 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13632 : }
13633 :
13634 : static int ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13635 0 : {
13636 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13637 : }
13638 :
13639 : static int ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13640 0 : {
13641 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13642 : }
13643 :
13644 : static int ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13645 0 : {
13646 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13647 : }
13648 :
13649 : static int ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13650 0 : {
13651 0 : return zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13652 : }
13653 :
13654 : static int zend_pre_incdec_property_helper_SPEC_VAR_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
13655 0 : {
13656 0 : zend_op *opline = EX(opline);
13657 : zend_free_op free_op1;
13658 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13659 : zval *object;
13660 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13661 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
13662 0 : int have_get_ptr = 0;
13663 :
13664 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
13665 0 : object = *object_ptr;
13666 :
13667 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
13668 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
13669 :
13670 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
13671 0 : *retval = EG(uninitialized_zval_ptr);
13672 0 : PZVAL_LOCK(*retval);
13673 : }
13674 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13675 0 : ZEND_VM_NEXT_OPCODE();
13676 : }
13677 :
13678 : /* here we are sure we are dealing with an object */
13679 :
13680 : if (0) {
13681 : MAKE_REAL_ZVAL_PTR(property);
13682 : }
13683 :
13684 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
13685 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
13686 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
13687 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
13688 :
13689 0 : have_get_ptr = 1;
13690 0 : incdec_op(*zptr);
13691 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
13692 0 : *retval = *zptr;
13693 0 : PZVAL_LOCK(*retval);
13694 : }
13695 : }
13696 : }
13697 :
13698 0 : if (!have_get_ptr) {
13699 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
13700 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
13701 :
13702 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
13703 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
13704 :
13705 0 : if (z->refcount == 0) {
13706 0 : zval_dtor(z);
13707 0 : FREE_ZVAL(z);
13708 : }
13709 0 : z = value;
13710 : }
13711 0 : z->refcount++;
13712 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
13713 0 : incdec_op(z);
13714 0 : *retval = z;
13715 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
13716 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
13717 0 : zval_ptr_dtor(&z);
13718 : } else {
13719 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
13720 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
13721 0 : *retval = EG(uninitialized_zval_ptr);
13722 0 : PZVAL_LOCK(*retval);
13723 : }
13724 : }
13725 : }
13726 :
13727 : if (0) {
13728 : zval_ptr_dtor(&property);
13729 : } else {
13730 :
13731 : }
13732 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13733 0 : ZEND_VM_NEXT_OPCODE();
13734 : }
13735 :
13736 : static int ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13737 0 : {
13738 0 : return zend_pre_incdec_property_helper_SPEC_VAR_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13739 : }
13740 :
13741 : static int ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13742 0 : {
13743 0 : return zend_pre_incdec_property_helper_SPEC_VAR_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13744 : }
13745 :
13746 : static int zend_post_incdec_property_helper_SPEC_VAR_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
13747 0 : {
13748 0 : zend_op *opline = EX(opline);
13749 : zend_free_op free_op1;
13750 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13751 : zval *object;
13752 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13753 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
13754 0 : int have_get_ptr = 0;
13755 :
13756 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
13757 0 : object = *object_ptr;
13758 :
13759 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
13760 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
13761 :
13762 0 : *retval = *EG(uninitialized_zval_ptr);
13763 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13764 0 : ZEND_VM_NEXT_OPCODE();
13765 : }
13766 :
13767 : /* here we are sure we are dealing with an object */
13768 :
13769 : if (0) {
13770 : MAKE_REAL_ZVAL_PTR(property);
13771 : }
13772 :
13773 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
13774 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
13775 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
13776 0 : have_get_ptr = 1;
13777 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
13778 :
13779 0 : *retval = **zptr;
13780 0 : zendi_zval_copy_ctor(*retval);
13781 :
13782 0 : incdec_op(*zptr);
13783 :
13784 : }
13785 : }
13786 :
13787 0 : if (!have_get_ptr) {
13788 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
13789 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
13790 : zval *z_copy;
13791 :
13792 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
13793 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
13794 :
13795 0 : if (z->refcount == 0) {
13796 0 : zval_dtor(z);
13797 0 : FREE_ZVAL(z);
13798 : }
13799 0 : z = value;
13800 : }
13801 0 : *retval = *z;
13802 0 : zendi_zval_copy_ctor(*retval);
13803 0 : ALLOC_ZVAL(z_copy);
13804 0 : *z_copy = *z;
13805 0 : zendi_zval_copy_ctor(*z_copy);
13806 0 : INIT_PZVAL(z_copy);
13807 0 : incdec_op(z_copy);
13808 0 : z->refcount++;
13809 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
13810 0 : zval_ptr_dtor(&z_copy);
13811 0 : zval_ptr_dtor(&z);
13812 : } else {
13813 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
13814 0 : *retval = *EG(uninitialized_zval_ptr);
13815 : }
13816 : }
13817 :
13818 : if (0) {
13819 : zval_ptr_dtor(&property);
13820 : } else {
13821 :
13822 : }
13823 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13824 0 : ZEND_VM_NEXT_OPCODE();
13825 : }
13826 :
13827 : static int ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13828 0 : {
13829 0 : return zend_post_incdec_property_helper_SPEC_VAR_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13830 : }
13831 :
13832 : static int ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13833 0 : {
13834 0 : return zend_post_incdec_property_helper_SPEC_VAR_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
13835 : }
13836 :
13837 : static int ZEND_FETCH_DIM_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13838 38 : {
13839 38 : zend_op *opline = EX(opline);
13840 : zend_free_op free_op1;
13841 38 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13842 :
13843 38 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
13844 : IS_VAR != IS_CV &&
13845 : EX_T(opline->op1.u.var).var.ptr_ptr) {
13846 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
13847 : }
13848 38 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
13849 :
13850 38 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13851 38 : ZEND_VM_NEXT_OPCODE();
13852 : }
13853 :
13854 : static int ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13855 0 : {
13856 0 : zend_op *opline = EX(opline);
13857 : zend_free_op free_op1;
13858 0 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13859 :
13860 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
13861 :
13862 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
13863 : READY_TO_DESTROY(free_op1.var) &&
13864 : !RETURN_VALUE_UNUSED(&opline->result)) {
13865 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13866 : }
13867 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13868 0 : ZEND_VM_NEXT_OPCODE();
13869 : }
13870 :
13871 : static int ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13872 0 : {
13873 0 : zend_op *opline = EX(opline);
13874 : zend_free_op free_op1;
13875 0 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13876 :
13877 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
13878 :
13879 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
13880 : READY_TO_DESTROY(free_op1.var) &&
13881 : !RETURN_VALUE_UNUSED(&opline->result)) {
13882 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13883 : }
13884 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13885 0 : ZEND_VM_NEXT_OPCODE();
13886 : }
13887 :
13888 : static int ZEND_FETCH_DIM_IS_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13889 0 : {
13890 0 : zend_op *opline = EX(opline);
13891 : zend_free_op free_op1;
13892 0 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13893 :
13894 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
13895 :
13896 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13897 0 : ZEND_VM_NEXT_OPCODE();
13898 : }
13899 :
13900 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13901 0 : {
13902 0 : zend_op *opline = EX(opline);
13903 : zend_free_op free_op1;
13904 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
13905 : zval *dim;
13906 :
13907 : if (IS_CV == IS_UNUSED && type == BP_VAR_R) {
13908 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
13909 : }
13910 0 : dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13911 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), dim, 0, type TSRMLS_CC);
13912 :
13913 0 : if (IS_VAR == IS_VAR && type == BP_VAR_W && (free_op1.var != NULL) &&
13914 : READY_TO_DESTROY(free_op1.var) &&
13915 : !RETURN_VALUE_UNUSED(&opline->result)) {
13916 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13917 : }
13918 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13919 0 : ZEND_VM_NEXT_OPCODE();
13920 : }
13921 :
13922 : static int ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
13923 0 : {
13924 0 : zend_op *opline = EX(opline);
13925 : zend_free_op free_op1;
13926 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13927 0 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13928 :
13929 : /* Not needed in DIM_UNSET
13930 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK) {
13931 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
13932 : }
13933 : */
13934 : if (IS_VAR == IS_CV) {
13935 : if (container != &EG(uninitialized_zval_ptr)) {
13936 : SEPARATE_ZVAL_IF_NOT_REF(container);
13937 : }
13938 : }
13939 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
13940 :
13941 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
13942 : READY_TO_DESTROY(free_op1.var) &&
13943 : !RETURN_VALUE_UNUSED(&opline->result)) {
13944 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13945 : }
13946 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13947 0 : if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) {
13948 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
13949 : } else {
13950 : zend_free_op free_res;
13951 :
13952 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
13953 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
13954 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
13955 : }
13956 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
13957 0 : FREE_OP_VAR_PTR(free_res);
13958 : }
13959 0 : ZEND_VM_NEXT_OPCODE();
13960 : }
13961 :
13962 : static int zend_fetch_property_address_read_helper_SPEC_VAR_CV(int type, ZEND_OPCODE_HANDLER_ARGS)
13963 0 : {
13964 0 : zend_op *opline = EX(opline);
13965 : zval *container;
13966 : zval **retval;
13967 : zend_free_op free_op1;
13968 :
13969 0 : retval = &EX_T(opline->result.u.var).var.ptr;
13970 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
13971 :
13972 0 : container = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
13973 :
13974 0 : if (container == EG(error_zval_ptr)) {
13975 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
13976 0 : *retval = EG(error_zval_ptr);
13977 0 : PZVAL_LOCK(*retval);
13978 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13979 : }
13980 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
13981 0 : ZEND_VM_NEXT_OPCODE();
13982 : }
13983 :
13984 :
13985 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
13986 0 : if (type != BP_VAR_IS) {
13987 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
13988 : }
13989 0 : *retval = EG(uninitialized_zval_ptr);
13990 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
13991 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
13992 : } else {
13993 :
13994 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
13995 :
13996 : if (0) {
13997 : MAKE_REAL_ZVAL_PTR(offset);
13998 : }
13999 :
14000 : /* here we are sure we are dealing with an object */
14001 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
14002 :
14003 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
14004 0 : zval_dtor(*retval);
14005 0 : FREE_ZVAL(*retval);
14006 : } else {
14007 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
14008 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
14009 : }
14010 :
14011 : if (0) {
14012 : zval_ptr_dtor(&offset);
14013 : } else {
14014 :
14015 : }
14016 : }
14017 :
14018 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14019 0 : ZEND_VM_NEXT_OPCODE();
14020 : }
14021 :
14022 : static int ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14023 0 : {
14024 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14025 : }
14026 :
14027 : static int ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14028 0 : {
14029 0 : zend_op *opline = EX(opline);
14030 : zend_free_op free_op1;
14031 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14032 :
14033 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_VAR != IS_CV) {
14034 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
14035 0 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
14036 : }
14037 :
14038 : if (0) {
14039 : MAKE_REAL_ZVAL_PTR(property);
14040 : }
14041 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
14042 : if (0) {
14043 : zval_ptr_dtor(&property);
14044 : } else {
14045 :
14046 : }
14047 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
14048 : READY_TO_DESTROY(free_op1.var) &&
14049 : !RETURN_VALUE_UNUSED(&opline->result)) {
14050 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
14051 : }
14052 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14053 0 : ZEND_VM_NEXT_OPCODE();
14054 : }
14055 :
14056 : static int ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14057 0 : {
14058 0 : zend_op *opline = EX(opline);
14059 : zend_free_op free_op1;
14060 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14061 :
14062 : if (0) {
14063 : MAKE_REAL_ZVAL_PTR(property);
14064 : }
14065 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
14066 : if (0) {
14067 : zval_ptr_dtor(&property);
14068 : } else {
14069 :
14070 : }
14071 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
14072 : READY_TO_DESTROY(free_op1.var) &&
14073 : !RETURN_VALUE_UNUSED(&opline->result)) {
14074 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
14075 : }
14076 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14077 0 : ZEND_VM_NEXT_OPCODE();
14078 : }
14079 :
14080 : static int ZEND_FETCH_OBJ_IS_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14081 0 : {
14082 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_CV(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14083 : }
14084 :
14085 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14086 0 : {
14087 0 : zend_op *opline = EX(opline);
14088 :
14089 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
14090 : /* Behave like FETCH_OBJ_W */
14091 : zend_free_op free_op1;
14092 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14093 :
14094 : if (0) {
14095 : MAKE_REAL_ZVAL_PTR(property);
14096 : }
14097 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
14098 : if (0) {
14099 : zval_ptr_dtor(&property);
14100 : } else {
14101 :
14102 : }
14103 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
14104 : READY_TO_DESTROY(free_op1.var) &&
14105 : !RETURN_VALUE_UNUSED(&opline->result)) {
14106 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
14107 : }
14108 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14109 0 : ZEND_VM_NEXT_OPCODE();
14110 : } else {
14111 0 : return zend_fetch_property_address_read_helper_SPEC_VAR_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14112 : }
14113 : }
14114 :
14115 : static int ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14116 0 : {
14117 0 : zend_op *opline = EX(opline);
14118 : zend_free_op free_op1, free_res;
14119 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14120 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14121 :
14122 : if (IS_VAR == IS_CV) {
14123 : if (container != &EG(uninitialized_zval_ptr)) {
14124 : SEPARATE_ZVAL_IF_NOT_REF(container);
14125 : }
14126 : }
14127 : if (0) {
14128 : MAKE_REAL_ZVAL_PTR(property);
14129 : }
14130 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
14131 : if (0) {
14132 : zval_ptr_dtor(&property);
14133 : } else {
14134 :
14135 : }
14136 0 : if (IS_VAR == IS_VAR && (free_op1.var != NULL) &&
14137 : READY_TO_DESTROY(free_op1.var) &&
14138 : !RETURN_VALUE_UNUSED(&opline->result)) {
14139 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
14140 : }
14141 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14142 :
14143 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
14144 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
14145 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
14146 : }
14147 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
14148 0 : FREE_OP_VAR_PTR(free_res);
14149 0 : ZEND_VM_NEXT_OPCODE();
14150 : }
14151 :
14152 : static int ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14153 0 : {
14154 0 : zend_op *opline = EX(opline);
14155 0 : zend_op *op_data = opline+1;
14156 : zend_free_op free_op1;
14157 0 : zval **object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14158 :
14159 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
14160 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14161 : /* assign_obj has two opcodes! */
14162 0 : ZEND_VM_INC_OPCODE();
14163 0 : ZEND_VM_NEXT_OPCODE();
14164 : }
14165 :
14166 : static int ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14167 55 : {
14168 55 : zend_op *opline = EX(opline);
14169 55 : zend_op *op_data = opline+1;
14170 : zend_free_op free_op1;
14171 : zval **object_ptr;
14172 :
14173 55 : if (IS_VAR == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
14174 : /* not an array offset */
14175 55 : object_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14176 : } else {
14177 0 : object_ptr = NULL;
14178 : }
14179 :
14180 55 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
14181 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
14182 : } else {
14183 : zend_free_op free_op_data1;
14184 : zval *value;
14185 55 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14186 :
14187 55 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
14188 :
14189 55 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
14190 55 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
14191 55 : FREE_OP_IF_VAR(free_op_data1);
14192 : }
14193 55 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14194 : /* assign_dim has two opcodes! */
14195 55 : ZEND_VM_INC_OPCODE();
14196 55 : ZEND_VM_NEXT_OPCODE();
14197 : }
14198 :
14199 : static int ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14200 0 : {
14201 0 : zend_op *opline = EX(opline);
14202 :
14203 0 : zval *value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14204 :
14205 0 : zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_CV), EX(Ts) TSRMLS_CC);
14206 : /* zend_assign_to_variable() always takes care of op2, never free it! */
14207 :
14208 0 : ZEND_VM_NEXT_OPCODE();
14209 : }
14210 :
14211 : static int ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14212 0 : {
14213 0 : zend_op *opline = EX(opline);
14214 : zend_free_op free_op1, free_op2;
14215 : zval **variable_ptr_ptr;
14216 0 : zval **value_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op2, EX(Ts), BP_VAR_W TSRMLS_CC);
14217 :
14218 : if (IS_CV == IS_VAR &&
14219 : value_ptr_ptr &&
14220 : !(*value_ptr_ptr)->is_ref &&
14221 : opline->extended_value == ZEND_RETURNS_FUNCTION &&
14222 : !EX_T(opline->op2.u.var).var.fcall_returned_reference) {
14223 : if (free_op2.var == NULL) {
14224 : PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
14225 : }
14226 : zend_error(E_STRICT, "Only variables should be assigned by reference");
14227 : return ZEND_ASSIGN_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14228 : }
14229 0 : if (IS_VAR == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) {
14230 0 : zend_error(E_ERROR, "Cannot assign by reference to overloaded object");
14231 : }
14232 :
14233 0 : variable_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14234 0 : zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
14235 :
14236 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
14237 0 : EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr;
14238 0 : PZVAL_LOCK(*variable_ptr_ptr);
14239 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
14240 : }
14241 :
14242 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14243 :
14244 0 : ZEND_VM_NEXT_OPCODE();
14245 : }
14246 :
14247 : static int ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14248 0 : {
14249 0 : zend_op *opline = EX(opline);
14250 : zval *function_name;
14251 : char *function_name_strval;
14252 : int function_name_strlen;
14253 : zend_free_op free_op1;
14254 :
14255 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
14256 :
14257 0 : function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14258 :
14259 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
14260 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
14261 : }
14262 :
14263 0 : function_name_strval = Z_STRVAL_P(function_name);
14264 0 : function_name_strlen = Z_STRLEN_P(function_name);
14265 :
14266 0 : EX(object) = _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14267 :
14268 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
14269 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
14270 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
14271 : }
14272 :
14273 : /* First, locate the function. */
14274 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
14275 0 : if (!EX(fbc)) {
14276 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
14277 : }
14278 : } else {
14279 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
14280 : }
14281 :
14282 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
14283 0 : EX(object) = NULL;
14284 : } else {
14285 0 : if (!PZVAL_IS_REF(EX(object))) {
14286 0 : EX(object)->refcount++; /* For $this pointer */
14287 : } else {
14288 : zval *this_ptr;
14289 0 : ALLOC_ZVAL(this_ptr);
14290 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
14291 0 : zval_copy_ctor(this_ptr);
14292 0 : EX(object) = this_ptr;
14293 : }
14294 : }
14295 :
14296 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14297 :
14298 0 : ZEND_VM_NEXT_OPCODE();
14299 : }
14300 :
14301 : static int ZEND_CASE_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14302 0 : {
14303 0 : zend_op *opline = EX(opline);
14304 0 : int switch_expr_is_overloaded=0;
14305 : zend_free_op free_op1;
14306 :
14307 : if (IS_VAR==IS_VAR) {
14308 0 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
14309 0 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
14310 : } else {
14311 0 : switch_expr_is_overloaded = 1;
14312 0 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
14313 : }
14314 : }
14315 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
14316 : _get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC),
14317 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
14318 :
14319 0 : if (switch_expr_is_overloaded) {
14320 : /* We only free op1 if this is a string offset,
14321 : * Since if it is a TMP_VAR, it'll be reused by
14322 : * other CASE opcodes (whereas string offsets
14323 : * are allocated at each get_zval_ptr())
14324 : */
14325 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14326 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
14327 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
14328 : }
14329 0 : ZEND_VM_NEXT_OPCODE();
14330 : }
14331 :
14332 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14333 0 : {
14334 0 : zend_op *opline = EX(opline);
14335 : zend_free_op free_op1;
14336 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
14337 : zval *expr_ptr;
14338 0 : zval *offset=_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14339 :
14340 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
14341 0 : zval **expr_ptr_ptr = NULL;
14342 :
14343 0 : if (opline->extended_value) {
14344 0 : expr_ptr_ptr=_get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14345 0 : expr_ptr = *expr_ptr_ptr;
14346 : } else {
14347 0 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14348 : }
14349 : #else
14350 : expr_ptr=_get_zval_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14351 : #endif
14352 :
14353 : if (0) { /* temporary variable */
14354 : zval *new_expr;
14355 :
14356 : ALLOC_ZVAL(new_expr);
14357 : INIT_PZVAL_COPY(new_expr, expr_ptr);
14358 : expr_ptr = new_expr;
14359 : } else {
14360 : #if 0 || IS_VAR == IS_VAR || IS_VAR == IS_CV
14361 0 : if (opline->extended_value) {
14362 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
14363 0 : expr_ptr = *expr_ptr_ptr;
14364 0 : expr_ptr->refcount++;
14365 : } else
14366 : #endif
14367 0 : if (PZVAL_IS_REF(expr_ptr)) {
14368 : zval *new_expr;
14369 :
14370 0 : ALLOC_ZVAL(new_expr);
14371 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
14372 0 : expr_ptr = new_expr;
14373 0 : zendi_zval_copy_ctor(*expr_ptr);
14374 : } else {
14375 0 : expr_ptr->refcount++;
14376 : }
14377 : }
14378 0 : if (offset) {
14379 0 : switch (Z_TYPE_P(offset)) {
14380 : case IS_DOUBLE:
14381 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
14382 0 : break;
14383 : case IS_LONG:
14384 : case IS_BOOL:
14385 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
14386 0 : break;
14387 : case IS_STRING:
14388 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
14389 0 : break;
14390 : case IS_NULL:
14391 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
14392 0 : break;
14393 : default:
14394 0 : zend_error(E_WARNING, "Illegal offset type");
14395 0 : zval_ptr_dtor(&expr_ptr);
14396 : /* do nothing */
14397 : break;
14398 : }
14399 :
14400 : } else {
14401 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
14402 : }
14403 0 : if (opline->extended_value) {
14404 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14405 : } else {
14406 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14407 : }
14408 0 : ZEND_VM_NEXT_OPCODE();
14409 : }
14410 :
14411 : static int ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14412 0 : {
14413 0 : zend_op *opline = EX(opline);
14414 :
14415 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
14416 : if (IS_VAR == IS_UNUSED) {
14417 : ZEND_VM_NEXT_OPCODE();
14418 : #if 0 || IS_VAR != IS_UNUSED
14419 : } else {
14420 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14421 : #endif
14422 : }
14423 : }
14424 :
14425 : static int ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14426 0 : {
14427 0 : zend_op *opline = EX(opline);
14428 : zend_free_op free_op1;
14429 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14430 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14431 : long index;
14432 :
14433 0 : if (container) {
14434 : if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
14435 : SEPARATE_ZVAL_IF_NOT_REF(container);
14436 : }
14437 0 : switch (Z_TYPE_PP(container)) {
14438 : case IS_ARRAY: {
14439 0 : HashTable *ht = Z_ARRVAL_PP(container);
14440 :
14441 0 : switch (Z_TYPE_P(offset)) {
14442 : case IS_DOUBLE:
14443 0 : index = (long) Z_DVAL_P(offset);
14444 0 : zend_hash_index_del(ht, index);
14445 0 : break;
14446 : case IS_RESOURCE:
14447 : case IS_BOOL:
14448 : case IS_LONG:
14449 0 : index = Z_LVAL_P(offset);
14450 0 : zend_hash_index_del(ht, index);
14451 0 : break;
14452 : case IS_STRING:
14453 : if (IS_CV == IS_CV || IS_CV == IS_VAR) {
14454 0 : offset->refcount++;
14455 : }
14456 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
14457 : ht == &EG(symbol_table)) {
14458 : zend_execute_data *ex;
14459 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
14460 :
14461 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
14462 0 : if (ex->op_array && ex->symbol_table == ht) {
14463 : int i;
14464 :
14465 0 : for (i = 0; i < ex->op_array->last_var; i++) {
14466 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
14467 : ex->op_array->vars[i].name_len == offset->value.str.len &&
14468 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
14469 0 : ex->CVs[i] = NULL;
14470 0 : break;
14471 : }
14472 : }
14473 : }
14474 : }
14475 : }
14476 : if (IS_CV == IS_CV || IS_CV == IS_VAR) {
14477 0 : zval_ptr_dtor(&offset);
14478 : }
14479 0 : break;
14480 : case IS_NULL:
14481 0 : zend_hash_del(ht, "", sizeof(""));
14482 0 : break;
14483 : default:
14484 0 : zend_error(E_WARNING, "Illegal offset type in unset");
14485 : break;
14486 : }
14487 :
14488 0 : break;
14489 : }
14490 : case IS_OBJECT:
14491 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
14492 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
14493 : }
14494 : if (0) {
14495 : MAKE_REAL_ZVAL_PTR(offset);
14496 : }
14497 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
14498 : if (0) {
14499 : zval_ptr_dtor(&offset);
14500 : } else {
14501 :
14502 : }
14503 0 : break;
14504 : case IS_STRING:
14505 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
14506 : ZEND_VM_CONTINUE(); /* bailed out before */
14507 : default:
14508 :
14509 : break;
14510 : }
14511 : } else {
14512 :
14513 : }
14514 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14515 :
14516 0 : ZEND_VM_NEXT_OPCODE();
14517 : }
14518 :
14519 : static int ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14520 0 : {
14521 0 : zend_op *opline = EX(opline);
14522 : zend_free_op free_op1;
14523 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14524 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14525 :
14526 0 : if (container) {
14527 : if (IS_VAR == IS_CV && container != &EG(uninitialized_zval_ptr)) {
14528 : SEPARATE_ZVAL_IF_NOT_REF(container);
14529 : }
14530 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
14531 : if (0) {
14532 : MAKE_REAL_ZVAL_PTR(offset);
14533 : }
14534 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
14535 : if (0) {
14536 : zval_ptr_dtor(&offset);
14537 : } else {
14538 :
14539 : }
14540 : } else {
14541 :
14542 : }
14543 : } else {
14544 :
14545 : }
14546 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14547 :
14548 0 : ZEND_VM_NEXT_OPCODE();
14549 : }
14550 :
14551 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
14552 0 : {
14553 0 : zend_op *opline = EX(opline);
14554 : zend_free_op free_op1;
14555 0 : zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
14556 0 : zval **value = NULL;
14557 0 : int result = 0;
14558 : long index;
14559 :
14560 0 : if (container) {
14561 :
14562 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
14563 :
14564 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
14565 : HashTable *ht;
14566 0 : int isset = 0;
14567 :
14568 0 : ht = Z_ARRVAL_PP(container);
14569 :
14570 0 : switch (Z_TYPE_P(offset)) {
14571 : case IS_DOUBLE:
14572 0 : index = (long) Z_DVAL_P(offset);
14573 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
14574 0 : isset = 1;
14575 : }
14576 0 : break;
14577 : case IS_RESOURCE:
14578 : case IS_BOOL:
14579 : case IS_LONG:
14580 0 : index = Z_LVAL_P(offset);
14581 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
14582 0 : isset = 1;
14583 : }
14584 0 : break;
14585 : case IS_STRING:
14586 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
14587 0 : isset = 1;
14588 : }
14589 0 : break;
14590 : case IS_NULL:
14591 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
14592 0 : isset = 1;
14593 : }
14594 0 : break;
14595 : default:
14596 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
14597 :
14598 : break;
14599 : }
14600 :
14601 0 : switch (opline->extended_value) {
14602 : case ZEND_ISSET:
14603 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
14604 0 : result = 0;
14605 : } else {
14606 0 : result = isset;
14607 : }
14608 0 : break;
14609 : case ZEND_ISEMPTY:
14610 0 : if (!isset || !i_zend_is_true(*value)) {
14611 0 : result = 0;
14612 : } else {
14613 0 : result = 1;
14614 : }
14615 : break;
14616 : }
14617 :
14618 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
14619 : if (0) {
14620 : MAKE_REAL_ZVAL_PTR(offset);
14621 : }
14622 0 : if (prop_dim) {
14623 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
14624 : } else {
14625 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
14626 : }
14627 : if (0) {
14628 : zval_ptr_dtor(&offset);
14629 : } else {
14630 :
14631 : }
14632 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
14633 : zval tmp;
14634 :
14635 0 : if (Z_TYPE_P(offset) != IS_LONG) {
14636 0 : tmp = *offset;
14637 0 : zval_copy_ctor(&tmp);
14638 0 : convert_to_long(&tmp);
14639 0 : offset = &tmp;
14640 : }
14641 0 : if (Z_TYPE_P(offset) == IS_LONG) {
14642 0 : switch (opline->extended_value) {
14643 : case ZEND_ISSET:
14644 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
14645 0 : result = 1;
14646 : }
14647 0 : break;
14648 : case ZEND_ISEMPTY:
14649 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
14650 0 : result = 1;
14651 : }
14652 : break;
14653 : }
14654 : }
14655 :
14656 : } else {
14657 :
14658 : }
14659 : }
14660 :
14661 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
14662 :
14663 0 : switch (opline->extended_value) {
14664 : case ZEND_ISSET:
14665 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
14666 0 : break;
14667 : case ZEND_ISEMPTY:
14668 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
14669 : break;
14670 : }
14671 :
14672 0 : if (free_op1.var) {zval_ptr_dtor(&free_op1.var);};
14673 :
14674 0 : ZEND_VM_NEXT_OPCODE();
14675 : }
14676 :
14677 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14678 0 : {
14679 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14680 : }
14681 :
14682 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14683 0 : {
14684 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_VAR_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14685 : }
14686 :
14687 : static int ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14688 0 : {
14689 0 : zend_op *opline = EX(opline);
14690 :
14691 0 : zval *obj = _get_obj_zval_ptr_unused(TSRMLS_C);
14692 : zend_class_entry *ce;
14693 : zend_function *clone;
14694 : zend_object_clone_obj_t clone_call;
14695 :
14696 0 : if (!obj || Z_TYPE_P(obj) != IS_OBJECT) {
14697 0 : zend_error(E_WARNING, "__clone method called on non-object");
14698 0 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
14699 0 : EX_T(opline->result.u.var).var.ptr->refcount++;
14700 :
14701 0 : ZEND_VM_NEXT_OPCODE();
14702 : }
14703 :
14704 0 : ce = Z_OBJCE_P(obj);
14705 0 : clone = ce ? ce->clone : NULL;
14706 0 : clone_call = Z_OBJ_HT_P(obj)->clone_obj;
14707 0 : if (!clone_call) {
14708 0 : if (ce) {
14709 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
14710 : } else {
14711 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
14712 : }
14713 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
14714 : EX_T(opline->result.u.var).var.ptr->refcount++;
14715 : }
14716 :
14717 0 : if (ce && clone) {
14718 0 : if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
14719 : /* Ensure that if we're calling a private function, we're allowed to do so.
14720 : */
14721 0 : if (ce != EG(scope)) {
14722 0 : zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
14723 : }
14724 0 : } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
14725 : /* Ensure that if we're calling a protected function, we're allowed to do so.
14726 : */
14727 0 : if (!zend_check_protected(clone->common.scope, EG(scope))) {
14728 0 : zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
14729 : }
14730 : }
14731 : }
14732 :
14733 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
14734 0 : if (!EG(exception)) {
14735 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
14736 0 : Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC);
14737 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT;
14738 0 : EX_T(opline->result.u.var).var.ptr->refcount=1;
14739 0 : EX_T(opline->result.u.var).var.ptr->is_ref=1;
14740 0 : if (!RETURN_VALUE_USED(opline) || EG(exception)) {
14741 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
14742 : }
14743 : }
14744 :
14745 0 : ZEND_VM_NEXT_OPCODE();
14746 : }
14747 :
14748 : static int ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14749 1 : {
14750 : #if 0 || (IS_UNUSED != IS_UNUSED)
14751 : zend_op *opline = EX(opline);
14752 : if (IS_UNUSED != IS_UNUSED) {
14753 :
14754 : zval *ptr = NULL;
14755 :
14756 : if (Z_TYPE_P(ptr) == IS_LONG) {
14757 : EG(exit_status) = Z_LVAL_P(ptr);
14758 : } else {
14759 : zend_print_variable(ptr);
14760 : }
14761 :
14762 : }
14763 : #endif
14764 1 : zend_bailout();
14765 0 : ZEND_VM_NEXT_OPCODE();
14766 : }
14767 :
14768 : static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
14769 0 : {
14770 0 : zend_op *opline = EX(opline);
14771 0 : zend_op *op_data = opline+1;
14772 : zend_free_op free_op_data1;
14773 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
14774 : zval *object;
14775 0 : zval *property = &opline->op2.u.constant;
14776 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
14777 0 : znode *result = &opline->result;
14778 0 : zval **retval = &EX_T(result->u.var).var.ptr;
14779 0 : int have_get_ptr = 0;
14780 :
14781 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
14782 0 : make_real_object(object_ptr TSRMLS_CC);
14783 0 : object = *object_ptr;
14784 :
14785 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
14786 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
14787 :
14788 0 : FREE_OP(free_op_data1);
14789 :
14790 0 : if (!RETURN_VALUE_UNUSED(result)) {
14791 0 : *retval = EG(uninitialized_zval_ptr);
14792 0 : PZVAL_LOCK(*retval);
14793 : }
14794 : } else {
14795 : /* here we are sure we are dealing with an object */
14796 : if (0) {
14797 : MAKE_REAL_ZVAL_PTR(property);
14798 : }
14799 :
14800 : /* here property is a string */
14801 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
14802 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
14803 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
14804 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
14805 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
14806 :
14807 0 : have_get_ptr = 1;
14808 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
14809 0 : if (!RETURN_VALUE_UNUSED(result)) {
14810 0 : *retval = *zptr;
14811 0 : PZVAL_LOCK(*retval);
14812 : }
14813 : }
14814 : }
14815 :
14816 0 : if (!have_get_ptr) {
14817 0 : zval *z = NULL;
14818 :
14819 0 : switch (opline->extended_value) {
14820 : case ZEND_ASSIGN_OBJ:
14821 0 : if (Z_OBJ_HT_P(object)->read_property) {
14822 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
14823 : }
14824 0 : break;
14825 : case ZEND_ASSIGN_DIM:
14826 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
14827 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
14828 : }
14829 : break;
14830 : }
14831 0 : if (z) {
14832 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
14833 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
14834 :
14835 0 : if (z->refcount == 0) {
14836 0 : zval_dtor(z);
14837 0 : FREE_ZVAL(z);
14838 : }
14839 0 : z = value;
14840 : }
14841 0 : z->refcount++;
14842 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
14843 0 : binary_op(z, z, value TSRMLS_CC);
14844 0 : switch (opline->extended_value) {
14845 : case ZEND_ASSIGN_OBJ:
14846 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
14847 0 : break;
14848 : case ZEND_ASSIGN_DIM:
14849 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
14850 : break;
14851 : }
14852 0 : if (!RETURN_VALUE_UNUSED(result)) {
14853 0 : *retval = z;
14854 0 : PZVAL_LOCK(*retval);
14855 : }
14856 0 : zval_ptr_dtor(&z);
14857 : } else {
14858 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
14859 0 : if (!RETURN_VALUE_UNUSED(result)) {
14860 0 : *retval = EG(uninitialized_zval_ptr);
14861 0 : PZVAL_LOCK(*retval);
14862 : }
14863 : }
14864 : }
14865 :
14866 : if (0) {
14867 : zval_ptr_dtor(&property);
14868 : } else {
14869 :
14870 : }
14871 0 : FREE_OP(free_op_data1);
14872 : }
14873 :
14874 : /* assign_obj has two opcodes! */
14875 0 : ZEND_VM_INC_OPCODE();
14876 0 : ZEND_VM_NEXT_OPCODE();
14877 : }
14878 :
14879 : static int zend_binary_assign_op_helper_SPEC_UNUSED_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
14880 0 : {
14881 0 : zend_op *opline = EX(opline);
14882 : zend_free_op free_op_data2, free_op_data1;
14883 : zval **var_ptr;
14884 : zval *value;
14885 0 : zend_bool increment_opline = 0;
14886 :
14887 0 : switch (opline->extended_value) {
14888 : case ZEND_ASSIGN_OBJ:
14889 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14890 : break;
14891 : case ZEND_ASSIGN_DIM: {
14892 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
14893 :
14894 0 : if (object_ptr && IS_UNUSED != IS_CV && !0) {
14895 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
14896 : }
14897 :
14898 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
14899 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14900 : } else {
14901 0 : zend_op *op_data = opline+1;
14902 0 : zval *dim = &opline->op2.u.constant;
14903 :
14904 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC);
14905 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
14906 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
14907 0 : increment_opline = 1;
14908 : }
14909 : }
14910 0 : break;
14911 : default:
14912 0 : value = &opline->op2.u.constant;
14913 0 : var_ptr = NULL;
14914 : /* do nothing */
14915 : break;
14916 : }
14917 :
14918 0 : if (!var_ptr) {
14919 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
14920 : }
14921 :
14922 0 : if (*var_ptr == EG(error_zval_ptr)) {
14923 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
14924 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
14925 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
14926 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
14927 : }
14928 :
14929 :
14930 0 : if (increment_opline) {
14931 0 : ZEND_VM_INC_OPCODE();
14932 : }
14933 0 : ZEND_VM_NEXT_OPCODE();
14934 : }
14935 :
14936 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
14937 :
14938 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
14939 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
14940 : /* proxy object */
14941 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
14942 0 : objval->refcount++;
14943 0 : binary_op(objval, objval, value TSRMLS_CC);
14944 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
14945 0 : zval_ptr_dtor(&objval);
14946 : } else {
14947 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
14948 : }
14949 :
14950 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
14951 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
14952 0 : PZVAL_LOCK(*var_ptr);
14953 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
14954 : }
14955 :
14956 0 : if (increment_opline) {
14957 0 : ZEND_VM_INC_OPCODE();
14958 0 : FREE_OP(free_op_data1);
14959 0 : FREE_OP_VAR_PTR(free_op_data2);
14960 : }
14961 :
14962 0 : ZEND_VM_NEXT_OPCODE();
14963 : }
14964 :
14965 : static int ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14966 0 : {
14967 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14968 : }
14969 :
14970 : static int ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14971 0 : {
14972 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14973 : }
14974 :
14975 : static int ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14976 0 : {
14977 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14978 : }
14979 :
14980 : static int ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14981 0 : {
14982 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14983 : }
14984 :
14985 : static int ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14986 0 : {
14987 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14988 : }
14989 :
14990 : static int ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14991 0 : {
14992 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14993 : }
14994 :
14995 : static int ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
14996 0 : {
14997 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
14998 : }
14999 :
15000 : static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15001 0 : {
15002 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15003 : }
15004 :
15005 : static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15006 0 : {
15007 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15008 : }
15009 :
15010 : static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15011 0 : {
15012 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15013 : }
15014 :
15015 : static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15016 0 : {
15017 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15018 : }
15019 :
15020 : static int zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
15021 0 : {
15022 0 : zend_op *opline = EX(opline);
15023 :
15024 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15025 : zval *object;
15026 0 : zval *property = &opline->op2.u.constant;
15027 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
15028 0 : int have_get_ptr = 0;
15029 :
15030 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
15031 0 : object = *object_ptr;
15032 :
15033 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
15034 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
15035 :
15036 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
15037 0 : *retval = EG(uninitialized_zval_ptr);
15038 0 : PZVAL_LOCK(*retval);
15039 : }
15040 :
15041 0 : ZEND_VM_NEXT_OPCODE();
15042 : }
15043 :
15044 : /* here we are sure we are dealing with an object */
15045 :
15046 : if (0) {
15047 : MAKE_REAL_ZVAL_PTR(property);
15048 : }
15049 :
15050 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
15051 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
15052 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
15053 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
15054 :
15055 0 : have_get_ptr = 1;
15056 0 : incdec_op(*zptr);
15057 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
15058 0 : *retval = *zptr;
15059 0 : PZVAL_LOCK(*retval);
15060 : }
15061 : }
15062 : }
15063 :
15064 0 : if (!have_get_ptr) {
15065 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
15066 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
15067 :
15068 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
15069 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
15070 :
15071 0 : if (z->refcount == 0) {
15072 0 : zval_dtor(z);
15073 0 : FREE_ZVAL(z);
15074 : }
15075 0 : z = value;
15076 : }
15077 0 : z->refcount++;
15078 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
15079 0 : incdec_op(z);
15080 0 : *retval = z;
15081 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
15082 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
15083 0 : zval_ptr_dtor(&z);
15084 : } else {
15085 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
15086 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
15087 0 : *retval = EG(uninitialized_zval_ptr);
15088 0 : PZVAL_LOCK(*retval);
15089 : }
15090 : }
15091 : }
15092 :
15093 : if (0) {
15094 : zval_ptr_dtor(&property);
15095 : } else {
15096 :
15097 : }
15098 :
15099 0 : ZEND_VM_NEXT_OPCODE();
15100 : }
15101 :
15102 : static int ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15103 0 : {
15104 0 : return zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15105 : }
15106 :
15107 : static int ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15108 0 : {
15109 0 : return zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15110 : }
15111 :
15112 : static int zend_post_incdec_property_helper_SPEC_UNUSED_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
15113 0 : {
15114 0 : zend_op *opline = EX(opline);
15115 :
15116 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15117 : zval *object;
15118 0 : zval *property = &opline->op2.u.constant;
15119 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
15120 0 : int have_get_ptr = 0;
15121 :
15122 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
15123 0 : object = *object_ptr;
15124 :
15125 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
15126 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
15127 :
15128 0 : *retval = *EG(uninitialized_zval_ptr);
15129 :
15130 0 : ZEND_VM_NEXT_OPCODE();
15131 : }
15132 :
15133 : /* here we are sure we are dealing with an object */
15134 :
15135 : if (0) {
15136 : MAKE_REAL_ZVAL_PTR(property);
15137 : }
15138 :
15139 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
15140 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
15141 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
15142 0 : have_get_ptr = 1;
15143 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
15144 :
15145 0 : *retval = **zptr;
15146 0 : zendi_zval_copy_ctor(*retval);
15147 :
15148 0 : incdec_op(*zptr);
15149 :
15150 : }
15151 : }
15152 :
15153 0 : if (!have_get_ptr) {
15154 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
15155 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
15156 : zval *z_copy;
15157 :
15158 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
15159 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
15160 :
15161 0 : if (z->refcount == 0) {
15162 0 : zval_dtor(z);
15163 0 : FREE_ZVAL(z);
15164 : }
15165 0 : z = value;
15166 : }
15167 0 : *retval = *z;
15168 0 : zendi_zval_copy_ctor(*retval);
15169 0 : ALLOC_ZVAL(z_copy);
15170 0 : *z_copy = *z;
15171 0 : zendi_zval_copy_ctor(*z_copy);
15172 0 : INIT_PZVAL(z_copy);
15173 0 : incdec_op(z_copy);
15174 0 : z->refcount++;
15175 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
15176 0 : zval_ptr_dtor(&z_copy);
15177 0 : zval_ptr_dtor(&z);
15178 : } else {
15179 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
15180 0 : *retval = *EG(uninitialized_zval_ptr);
15181 : }
15182 : }
15183 :
15184 : if (0) {
15185 : zval_ptr_dtor(&property);
15186 : } else {
15187 :
15188 : }
15189 :
15190 0 : ZEND_VM_NEXT_OPCODE();
15191 : }
15192 :
15193 : static int ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15194 0 : {
15195 0 : return zend_post_incdec_property_helper_SPEC_UNUSED_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15196 : }
15197 :
15198 : static int ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15199 0 : {
15200 0 : return zend_post_incdec_property_helper_SPEC_UNUSED_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15201 : }
15202 :
15203 : static int zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
15204 177 : {
15205 177 : zend_op *opline = EX(opline);
15206 : zval *container;
15207 : zval **retval;
15208 :
15209 :
15210 177 : retval = &EX_T(opline->result.u.var).var.ptr;
15211 177 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
15212 :
15213 177 : container = _get_obj_zval_ptr_unused(TSRMLS_C);
15214 :
15215 177 : if (container == EG(error_zval_ptr)) {
15216 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
15217 0 : *retval = EG(error_zval_ptr);
15218 0 : PZVAL_LOCK(*retval);
15219 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15220 : }
15221 :
15222 0 : ZEND_VM_NEXT_OPCODE();
15223 : }
15224 :
15225 :
15226 177 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
15227 0 : if (type != BP_VAR_IS) {
15228 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
15229 : }
15230 0 : *retval = EG(uninitialized_zval_ptr);
15231 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
15232 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15233 : } else {
15234 :
15235 177 : zval *offset = &opline->op2.u.constant;
15236 :
15237 : if (0) {
15238 : MAKE_REAL_ZVAL_PTR(offset);
15239 : }
15240 :
15241 : /* here we are sure we are dealing with an object */
15242 177 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
15243 :
15244 177 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
15245 0 : zval_dtor(*retval);
15246 0 : FREE_ZVAL(*retval);
15247 : } else {
15248 177 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
15249 177 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15250 : }
15251 :
15252 : if (0) {
15253 : zval_ptr_dtor(&offset);
15254 : } else {
15255 :
15256 : }
15257 : }
15258 :
15259 177 : ZEND_VM_NEXT_OPCODE();
15260 : }
15261 :
15262 : static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15263 177 : {
15264 177 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15265 : }
15266 :
15267 : static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15268 99 : {
15269 99 : zend_op *opline = EX(opline);
15270 : zend_free_op free_op1;
15271 99 : zval *property = &opline->op2.u.constant;
15272 :
15273 99 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) {
15274 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
15275 0 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
15276 : }
15277 :
15278 : if (0) {
15279 : MAKE_REAL_ZVAL_PTR(property);
15280 : }
15281 99 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
15282 : if (0) {
15283 : zval_ptr_dtor(&property);
15284 : } else {
15285 :
15286 : }
15287 : if (IS_UNUSED == IS_VAR && 0 &&
15288 : READY_TO_DESTROY(free_op1.var) &&
15289 : !RETURN_VALUE_UNUSED(&opline->result)) {
15290 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15291 : }
15292 :
15293 98 : ZEND_VM_NEXT_OPCODE();
15294 : }
15295 :
15296 : static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15297 0 : {
15298 0 : zend_op *opline = EX(opline);
15299 : zend_free_op free_op1;
15300 0 : zval *property = &opline->op2.u.constant;
15301 :
15302 : if (0) {
15303 : MAKE_REAL_ZVAL_PTR(property);
15304 : }
15305 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC);
15306 : if (0) {
15307 : zval_ptr_dtor(&property);
15308 : } else {
15309 :
15310 : }
15311 : if (IS_UNUSED == IS_VAR && 0 &&
15312 : READY_TO_DESTROY(free_op1.var) &&
15313 : !RETURN_VALUE_UNUSED(&opline->result)) {
15314 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15315 : }
15316 :
15317 0 : ZEND_VM_NEXT_OPCODE();
15318 : }
15319 :
15320 : static int ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15321 0 : {
15322 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15323 : }
15324 :
15325 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15326 0 : {
15327 0 : zend_op *opline = EX(opline);
15328 :
15329 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
15330 : /* Behave like FETCH_OBJ_W */
15331 : zend_free_op free_op1;
15332 0 : zval *property = &opline->op2.u.constant;
15333 :
15334 : if (0) {
15335 : MAKE_REAL_ZVAL_PTR(property);
15336 : }
15337 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
15338 : if (0) {
15339 : zval_ptr_dtor(&property);
15340 : } else {
15341 :
15342 : }
15343 : if (IS_UNUSED == IS_VAR && 0 &&
15344 : READY_TO_DESTROY(free_op1.var) &&
15345 : !RETURN_VALUE_UNUSED(&opline->result)) {
15346 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15347 : }
15348 :
15349 0 : ZEND_VM_NEXT_OPCODE();
15350 : } else {
15351 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15352 : }
15353 : }
15354 :
15355 : static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15356 0 : {
15357 0 : zend_op *opline = EX(opline);
15358 : zend_free_op free_op1, free_res;
15359 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15360 0 : zval *property = &opline->op2.u.constant;
15361 :
15362 : if (IS_UNUSED == IS_CV) {
15363 : if (container != &EG(uninitialized_zval_ptr)) {
15364 : SEPARATE_ZVAL_IF_NOT_REF(container);
15365 : }
15366 : }
15367 : if (0) {
15368 : MAKE_REAL_ZVAL_PTR(property);
15369 : }
15370 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
15371 : if (0) {
15372 : zval_ptr_dtor(&property);
15373 : } else {
15374 :
15375 : }
15376 : if (IS_UNUSED == IS_VAR && 0 &&
15377 : READY_TO_DESTROY(free_op1.var) &&
15378 : !RETURN_VALUE_UNUSED(&opline->result)) {
15379 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15380 : }
15381 :
15382 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
15383 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
15384 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
15385 : }
15386 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
15387 0 : FREE_OP_VAR_PTR(free_res);
15388 0 : ZEND_VM_NEXT_OPCODE();
15389 : }
15390 :
15391 : static int ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15392 2 : {
15393 2 : zend_op *opline = EX(opline);
15394 2 : zend_op *op_data = opline+1;
15395 :
15396 2 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15397 :
15398 2 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
15399 :
15400 : /* assign_obj has two opcodes! */
15401 2 : ZEND_VM_INC_OPCODE();
15402 2 : ZEND_VM_NEXT_OPCODE();
15403 : }
15404 :
15405 : static int ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15406 860 : {
15407 860 : zend_op *opline = EX(opline);
15408 : zval *function_name;
15409 : char *function_name_strval;
15410 : int function_name_strlen;
15411 :
15412 :
15413 860 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
15414 :
15415 860 : function_name = &opline->op2.u.constant;
15416 :
15417 860 : if (Z_TYPE_P(function_name)!=IS_STRING) {
15418 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
15419 : }
15420 :
15421 860 : function_name_strval = Z_STRVAL_P(function_name);
15422 860 : function_name_strlen = Z_STRLEN_P(function_name);
15423 :
15424 860 : EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C);
15425 :
15426 860 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
15427 860 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
15428 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
15429 : }
15430 :
15431 : /* First, locate the function. */
15432 860 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
15433 860 : if (!EX(fbc)) {
15434 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
15435 : }
15436 : } else {
15437 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
15438 : }
15439 :
15440 860 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
15441 0 : EX(object) = NULL;
15442 : } else {
15443 860 : if (!PZVAL_IS_REF(EX(object))) {
15444 860 : EX(object)->refcount++; /* For $this pointer */
15445 : } else {
15446 : zval *this_ptr;
15447 0 : ALLOC_ZVAL(this_ptr);
15448 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
15449 0 : zval_copy_ctor(this_ptr);
15450 0 : EX(object) = this_ptr;
15451 : }
15452 : }
15453 :
15454 :
15455 860 : ZEND_VM_NEXT_OPCODE();
15456 : }
15457 :
15458 : static int ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15459 2060 : {
15460 2060 : zend_op *opline = EX(opline);
15461 2060 : zend_class_entry *ce = NULL;
15462 : zval **value;
15463 :
15464 : if (IS_UNUSED == IS_UNUSED) {
15465 : /* This seems to be a reminant of namespaces
15466 : if (EG(scope)) {
15467 : ce = EG(scope);
15468 : if (zend_hash_find(&ce->constants_table, Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void **) &value) == SUCCESS) {
15469 : zval_update_constant(value, (void *) 1 TSRMLS_CC);
15470 : EX_T(opline->result.u.var).tmp_var = **value;
15471 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
15472 : ZEND_VM_NEXT_OPCODE();
15473 : }
15474 : }
15475 : */
15476 2060 : if (!zend_get_constant(opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len, &EX_T(opline->result.u.var).tmp_var TSRMLS_CC)) {
15477 0 : zend_error(E_NOTICE, "Use of undefined constant %s - assumed '%s'",
15478 : opline->op2.u.constant.value.str.val,
15479 : opline->op2.u.constant.value.str.val);
15480 0 : EX_T(opline->result.u.var).tmp_var = opline->op2.u.constant;
15481 0 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
15482 : }
15483 2060 : ZEND_VM_NEXT_OPCODE();
15484 : }
15485 :
15486 : ce = EX_T(opline->op1.u.var).class_entry;
15487 :
15488 : if (zend_hash_find(&ce->constants_table, opline->op2.u.constant.value.str.val, opline->op2.u.constant.value.str.len+1, (void **) &value) == SUCCESS) {
15489 : zval_update_constant(value, (void *) 1 TSRMLS_CC);
15490 : EX_T(opline->result.u.var).tmp_var = **value;
15491 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
15492 : } else {
15493 : zend_error_noreturn(E_ERROR, "Undefined class constant '%s'", opline->op2.u.constant.value.str.val);
15494 : }
15495 :
15496 : ZEND_VM_NEXT_OPCODE();
15497 : }
15498 :
15499 : static int ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15500 0 : {
15501 0 : zend_op *opline = EX(opline);
15502 :
15503 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
15504 : if (IS_UNUSED == IS_UNUSED) {
15505 0 : ZEND_VM_NEXT_OPCODE();
15506 : #if 0 || IS_UNUSED != IS_UNUSED
15507 : } else {
15508 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15509 : #endif
15510 : }
15511 : }
15512 :
15513 : static int ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15514 0 : {
15515 0 : zend_op *opline = EX(opline);
15516 :
15517 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15518 0 : zval *offset = &opline->op2.u.constant;
15519 : long index;
15520 :
15521 0 : if (container) {
15522 : if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
15523 : SEPARATE_ZVAL_IF_NOT_REF(container);
15524 : }
15525 0 : switch (Z_TYPE_PP(container)) {
15526 : case IS_ARRAY: {
15527 0 : HashTable *ht = Z_ARRVAL_PP(container);
15528 :
15529 0 : switch (Z_TYPE_P(offset)) {
15530 : case IS_DOUBLE:
15531 0 : index = (long) Z_DVAL_P(offset);
15532 0 : zend_hash_index_del(ht, index);
15533 0 : break;
15534 : case IS_RESOURCE:
15535 : case IS_BOOL:
15536 : case IS_LONG:
15537 0 : index = Z_LVAL_P(offset);
15538 0 : zend_hash_index_del(ht, index);
15539 0 : break;
15540 : case IS_STRING:
15541 : if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
15542 : offset->refcount++;
15543 : }
15544 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
15545 : ht == &EG(symbol_table)) {
15546 : zend_execute_data *ex;
15547 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
15548 :
15549 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
15550 0 : if (ex->op_array && ex->symbol_table == ht) {
15551 : int i;
15552 :
15553 0 : for (i = 0; i < ex->op_array->last_var; i++) {
15554 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
15555 : ex->op_array->vars[i].name_len == offset->value.str.len &&
15556 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
15557 0 : ex->CVs[i] = NULL;
15558 0 : break;
15559 : }
15560 : }
15561 : }
15562 : }
15563 : }
15564 : if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
15565 : zval_ptr_dtor(&offset);
15566 : }
15567 0 : break;
15568 : case IS_NULL:
15569 0 : zend_hash_del(ht, "", sizeof(""));
15570 0 : break;
15571 : default:
15572 0 : zend_error(E_WARNING, "Illegal offset type in unset");
15573 : break;
15574 : }
15575 :
15576 0 : break;
15577 : }
15578 : case IS_OBJECT:
15579 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
15580 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
15581 : }
15582 : if (0) {
15583 : MAKE_REAL_ZVAL_PTR(offset);
15584 : }
15585 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
15586 : if (0) {
15587 : zval_ptr_dtor(&offset);
15588 : } else {
15589 :
15590 : }
15591 0 : break;
15592 : case IS_STRING:
15593 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
15594 : ZEND_VM_CONTINUE(); /* bailed out before */
15595 : default:
15596 :
15597 : break;
15598 : }
15599 : } else {
15600 :
15601 : }
15602 :
15603 0 : ZEND_VM_NEXT_OPCODE();
15604 : }
15605 :
15606 : static int ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15607 0 : {
15608 0 : zend_op *opline = EX(opline);
15609 :
15610 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15611 0 : zval *offset = &opline->op2.u.constant;
15612 :
15613 0 : if (container) {
15614 : if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
15615 : SEPARATE_ZVAL_IF_NOT_REF(container);
15616 : }
15617 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
15618 : if (0) {
15619 : MAKE_REAL_ZVAL_PTR(offset);
15620 : }
15621 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
15622 : if (0) {
15623 : zval_ptr_dtor(&offset);
15624 : } else {
15625 :
15626 : }
15627 : } else {
15628 :
15629 : }
15630 : } else {
15631 :
15632 : }
15633 :
15634 0 : ZEND_VM_NEXT_OPCODE();
15635 : }
15636 :
15637 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
15638 0 : {
15639 0 : zend_op *opline = EX(opline);
15640 :
15641 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15642 0 : zval **value = NULL;
15643 0 : int result = 0;
15644 : long index;
15645 :
15646 0 : if (container) {
15647 :
15648 0 : zval *offset = &opline->op2.u.constant;
15649 :
15650 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
15651 : HashTable *ht;
15652 0 : int isset = 0;
15653 :
15654 0 : ht = Z_ARRVAL_PP(container);
15655 :
15656 0 : switch (Z_TYPE_P(offset)) {
15657 : case IS_DOUBLE:
15658 0 : index = (long) Z_DVAL_P(offset);
15659 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
15660 0 : isset = 1;
15661 : }
15662 0 : break;
15663 : case IS_RESOURCE:
15664 : case IS_BOOL:
15665 : case IS_LONG:
15666 0 : index = Z_LVAL_P(offset);
15667 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
15668 0 : isset = 1;
15669 : }
15670 0 : break;
15671 : case IS_STRING:
15672 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
15673 0 : isset = 1;
15674 : }
15675 0 : break;
15676 : case IS_NULL:
15677 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
15678 0 : isset = 1;
15679 : }
15680 0 : break;
15681 : default:
15682 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
15683 :
15684 : break;
15685 : }
15686 :
15687 0 : switch (opline->extended_value) {
15688 : case ZEND_ISSET:
15689 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
15690 0 : result = 0;
15691 : } else {
15692 0 : result = isset;
15693 : }
15694 0 : break;
15695 : case ZEND_ISEMPTY:
15696 0 : if (!isset || !i_zend_is_true(*value)) {
15697 0 : result = 0;
15698 : } else {
15699 0 : result = 1;
15700 : }
15701 : break;
15702 : }
15703 :
15704 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
15705 : if (0) {
15706 : MAKE_REAL_ZVAL_PTR(offset);
15707 : }
15708 0 : if (prop_dim) {
15709 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
15710 : } else {
15711 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
15712 : }
15713 : if (0) {
15714 : zval_ptr_dtor(&offset);
15715 : } else {
15716 :
15717 : }
15718 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
15719 : zval tmp;
15720 :
15721 0 : if (Z_TYPE_P(offset) != IS_LONG) {
15722 0 : tmp = *offset;
15723 0 : zval_copy_ctor(&tmp);
15724 0 : convert_to_long(&tmp);
15725 0 : offset = &tmp;
15726 : }
15727 0 : if (Z_TYPE_P(offset) == IS_LONG) {
15728 0 : switch (opline->extended_value) {
15729 : case ZEND_ISSET:
15730 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
15731 0 : result = 1;
15732 : }
15733 0 : break;
15734 : case ZEND_ISEMPTY:
15735 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
15736 0 : result = 1;
15737 : }
15738 : break;
15739 : }
15740 : }
15741 :
15742 : } else {
15743 :
15744 : }
15745 : }
15746 :
15747 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
15748 :
15749 0 : switch (opline->extended_value) {
15750 : case ZEND_ISSET:
15751 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
15752 0 : break;
15753 : case ZEND_ISEMPTY:
15754 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
15755 : break;
15756 : }
15757 :
15758 0 : ZEND_VM_NEXT_OPCODE();
15759 : }
15760 :
15761 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15762 0 : {
15763 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15764 : }
15765 :
15766 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15767 0 : {
15768 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15769 : }
15770 :
15771 : static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
15772 0 : {
15773 0 : zend_op *opline = EX(opline);
15774 0 : zend_op *op_data = opline+1;
15775 : zend_free_op free_op2, free_op_data1;
15776 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15777 : zval *object;
15778 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
15779 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
15780 0 : znode *result = &opline->result;
15781 0 : zval **retval = &EX_T(result->u.var).var.ptr;
15782 0 : int have_get_ptr = 0;
15783 :
15784 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
15785 0 : make_real_object(object_ptr TSRMLS_CC);
15786 0 : object = *object_ptr;
15787 :
15788 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
15789 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
15790 0 : zval_dtor(free_op2.var);
15791 0 : FREE_OP(free_op_data1);
15792 :
15793 0 : if (!RETURN_VALUE_UNUSED(result)) {
15794 0 : *retval = EG(uninitialized_zval_ptr);
15795 0 : PZVAL_LOCK(*retval);
15796 : }
15797 : } else {
15798 : /* here we are sure we are dealing with an object */
15799 : if (1) {
15800 0 : MAKE_REAL_ZVAL_PTR(property);
15801 : }
15802 :
15803 : /* here property is a string */
15804 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
15805 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
15806 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
15807 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
15808 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
15809 :
15810 0 : have_get_ptr = 1;
15811 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
15812 0 : if (!RETURN_VALUE_UNUSED(result)) {
15813 0 : *retval = *zptr;
15814 0 : PZVAL_LOCK(*retval);
15815 : }
15816 : }
15817 : }
15818 :
15819 0 : if (!have_get_ptr) {
15820 0 : zval *z = NULL;
15821 :
15822 0 : switch (opline->extended_value) {
15823 : case ZEND_ASSIGN_OBJ:
15824 0 : if (Z_OBJ_HT_P(object)->read_property) {
15825 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
15826 : }
15827 0 : break;
15828 : case ZEND_ASSIGN_DIM:
15829 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
15830 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
15831 : }
15832 : break;
15833 : }
15834 0 : if (z) {
15835 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
15836 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
15837 :
15838 0 : if (z->refcount == 0) {
15839 0 : zval_dtor(z);
15840 0 : FREE_ZVAL(z);
15841 : }
15842 0 : z = value;
15843 : }
15844 0 : z->refcount++;
15845 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
15846 0 : binary_op(z, z, value TSRMLS_CC);
15847 0 : switch (opline->extended_value) {
15848 : case ZEND_ASSIGN_OBJ:
15849 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
15850 0 : break;
15851 : case ZEND_ASSIGN_DIM:
15852 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
15853 : break;
15854 : }
15855 0 : if (!RETURN_VALUE_UNUSED(result)) {
15856 0 : *retval = z;
15857 0 : PZVAL_LOCK(*retval);
15858 : }
15859 0 : zval_ptr_dtor(&z);
15860 : } else {
15861 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
15862 0 : if (!RETURN_VALUE_UNUSED(result)) {
15863 0 : *retval = EG(uninitialized_zval_ptr);
15864 0 : PZVAL_LOCK(*retval);
15865 : }
15866 : }
15867 : }
15868 :
15869 : if (1) {
15870 0 : zval_ptr_dtor(&property);
15871 : } else {
15872 : zval_dtor(free_op2.var);
15873 : }
15874 0 : FREE_OP(free_op_data1);
15875 : }
15876 :
15877 : /* assign_obj has two opcodes! */
15878 0 : ZEND_VM_INC_OPCODE();
15879 0 : ZEND_VM_NEXT_OPCODE();
15880 : }
15881 :
15882 : static int zend_binary_assign_op_helper_SPEC_UNUSED_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
15883 0 : {
15884 0 : zend_op *opline = EX(opline);
15885 : zend_free_op free_op2, free_op_data2, free_op_data1;
15886 : zval **var_ptr;
15887 : zval *value;
15888 0 : zend_bool increment_opline = 0;
15889 :
15890 0 : switch (opline->extended_value) {
15891 : case ZEND_ASSIGN_OBJ:
15892 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15893 : break;
15894 : case ZEND_ASSIGN_DIM: {
15895 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
15896 :
15897 0 : if (object_ptr && IS_UNUSED != IS_CV && !0) {
15898 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
15899 : }
15900 :
15901 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
15902 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15903 : } else {
15904 0 : zend_op *op_data = opline+1;
15905 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
15906 :
15907 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 1, BP_VAR_RW TSRMLS_CC);
15908 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
15909 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
15910 0 : increment_opline = 1;
15911 : }
15912 : }
15913 0 : break;
15914 : default:
15915 0 : value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
15916 0 : var_ptr = NULL;
15917 : /* do nothing */
15918 : break;
15919 : }
15920 :
15921 0 : if (!var_ptr) {
15922 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
15923 : }
15924 :
15925 0 : if (*var_ptr == EG(error_zval_ptr)) {
15926 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
15927 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
15928 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
15929 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15930 : }
15931 0 : zval_dtor(free_op2.var);
15932 :
15933 0 : if (increment_opline) {
15934 0 : ZEND_VM_INC_OPCODE();
15935 : }
15936 0 : ZEND_VM_NEXT_OPCODE();
15937 : }
15938 :
15939 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
15940 :
15941 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
15942 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
15943 : /* proxy object */
15944 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
15945 0 : objval->refcount++;
15946 0 : binary_op(objval, objval, value TSRMLS_CC);
15947 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
15948 0 : zval_ptr_dtor(&objval);
15949 : } else {
15950 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
15951 : }
15952 :
15953 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
15954 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
15955 0 : PZVAL_LOCK(*var_ptr);
15956 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
15957 : }
15958 0 : zval_dtor(free_op2.var);
15959 :
15960 0 : if (increment_opline) {
15961 0 : ZEND_VM_INC_OPCODE();
15962 0 : FREE_OP(free_op_data1);
15963 0 : FREE_OP_VAR_PTR(free_op_data2);
15964 : }
15965 :
15966 0 : ZEND_VM_NEXT_OPCODE();
15967 : }
15968 :
15969 : static int ZEND_ASSIGN_ADD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15970 0 : {
15971 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15972 : }
15973 :
15974 : static int ZEND_ASSIGN_SUB_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15975 0 : {
15976 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15977 : }
15978 :
15979 : static int ZEND_ASSIGN_MUL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15980 0 : {
15981 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15982 : }
15983 :
15984 : static int ZEND_ASSIGN_DIV_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15985 0 : {
15986 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15987 : }
15988 :
15989 : static int ZEND_ASSIGN_MOD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15990 0 : {
15991 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15992 : }
15993 :
15994 : static int ZEND_ASSIGN_SL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
15995 0 : {
15996 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
15997 : }
15998 :
15999 : static int ZEND_ASSIGN_SR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16000 0 : {
16001 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16002 : }
16003 :
16004 : static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16005 0 : {
16006 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16007 : }
16008 :
16009 : static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16010 0 : {
16011 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16012 : }
16013 :
16014 : static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16015 0 : {
16016 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16017 : }
16018 :
16019 : static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16020 0 : {
16021 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16022 : }
16023 :
16024 : static int zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
16025 0 : {
16026 0 : zend_op *opline = EX(opline);
16027 : zend_free_op free_op2;
16028 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16029 : zval *object;
16030 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16031 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
16032 0 : int have_get_ptr = 0;
16033 :
16034 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
16035 0 : object = *object_ptr;
16036 :
16037 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
16038 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
16039 0 : zval_dtor(free_op2.var);
16040 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
16041 0 : *retval = EG(uninitialized_zval_ptr);
16042 0 : PZVAL_LOCK(*retval);
16043 : }
16044 :
16045 0 : ZEND_VM_NEXT_OPCODE();
16046 : }
16047 :
16048 : /* here we are sure we are dealing with an object */
16049 :
16050 : if (1) {
16051 0 : MAKE_REAL_ZVAL_PTR(property);
16052 : }
16053 :
16054 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
16055 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
16056 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
16057 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
16058 :
16059 0 : have_get_ptr = 1;
16060 0 : incdec_op(*zptr);
16061 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
16062 0 : *retval = *zptr;
16063 0 : PZVAL_LOCK(*retval);
16064 : }
16065 : }
16066 : }
16067 :
16068 0 : if (!have_get_ptr) {
16069 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
16070 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
16071 :
16072 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
16073 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
16074 :
16075 0 : if (z->refcount == 0) {
16076 0 : zval_dtor(z);
16077 0 : FREE_ZVAL(z);
16078 : }
16079 0 : z = value;
16080 : }
16081 0 : z->refcount++;
16082 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
16083 0 : incdec_op(z);
16084 0 : *retval = z;
16085 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
16086 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
16087 0 : zval_ptr_dtor(&z);
16088 : } else {
16089 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
16090 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
16091 0 : *retval = EG(uninitialized_zval_ptr);
16092 0 : PZVAL_LOCK(*retval);
16093 : }
16094 : }
16095 : }
16096 :
16097 : if (1) {
16098 0 : zval_ptr_dtor(&property);
16099 : } else {
16100 : zval_dtor(free_op2.var);
16101 : }
16102 :
16103 0 : ZEND_VM_NEXT_OPCODE();
16104 : }
16105 :
16106 : static int ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16107 0 : {
16108 0 : return zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16109 : }
16110 :
16111 : static int ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16112 0 : {
16113 0 : return zend_pre_incdec_property_helper_SPEC_UNUSED_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16114 : }
16115 :
16116 : static int zend_post_incdec_property_helper_SPEC_UNUSED_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
16117 0 : {
16118 0 : zend_op *opline = EX(opline);
16119 : zend_free_op free_op2;
16120 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16121 : zval *object;
16122 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16123 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
16124 0 : int have_get_ptr = 0;
16125 :
16126 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
16127 0 : object = *object_ptr;
16128 :
16129 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
16130 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
16131 0 : zval_dtor(free_op2.var);
16132 0 : *retval = *EG(uninitialized_zval_ptr);
16133 :
16134 0 : ZEND_VM_NEXT_OPCODE();
16135 : }
16136 :
16137 : /* here we are sure we are dealing with an object */
16138 :
16139 : if (1) {
16140 0 : MAKE_REAL_ZVAL_PTR(property);
16141 : }
16142 :
16143 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
16144 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
16145 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
16146 0 : have_get_ptr = 1;
16147 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
16148 :
16149 0 : *retval = **zptr;
16150 0 : zendi_zval_copy_ctor(*retval);
16151 :
16152 0 : incdec_op(*zptr);
16153 :
16154 : }
16155 : }
16156 :
16157 0 : if (!have_get_ptr) {
16158 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
16159 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
16160 : zval *z_copy;
16161 :
16162 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
16163 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
16164 :
16165 0 : if (z->refcount == 0) {
16166 0 : zval_dtor(z);
16167 0 : FREE_ZVAL(z);
16168 : }
16169 0 : z = value;
16170 : }
16171 0 : *retval = *z;
16172 0 : zendi_zval_copy_ctor(*retval);
16173 0 : ALLOC_ZVAL(z_copy);
16174 0 : *z_copy = *z;
16175 0 : zendi_zval_copy_ctor(*z_copy);
16176 0 : INIT_PZVAL(z_copy);
16177 0 : incdec_op(z_copy);
16178 0 : z->refcount++;
16179 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
16180 0 : zval_ptr_dtor(&z_copy);
16181 0 : zval_ptr_dtor(&z);
16182 : } else {
16183 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
16184 0 : *retval = *EG(uninitialized_zval_ptr);
16185 : }
16186 : }
16187 :
16188 : if (1) {
16189 0 : zval_ptr_dtor(&property);
16190 : } else {
16191 : zval_dtor(free_op2.var);
16192 : }
16193 :
16194 0 : ZEND_VM_NEXT_OPCODE();
16195 : }
16196 :
16197 : static int ZEND_POST_INC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16198 0 : {
16199 0 : return zend_post_incdec_property_helper_SPEC_UNUSED_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16200 : }
16201 :
16202 : static int ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16203 0 : {
16204 0 : return zend_post_incdec_property_helper_SPEC_UNUSED_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16205 : }
16206 :
16207 : static int zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(int type, ZEND_OPCODE_HANDLER_ARGS)
16208 0 : {
16209 0 : zend_op *opline = EX(opline);
16210 : zval *container;
16211 : zval **retval;
16212 :
16213 :
16214 0 : retval = &EX_T(opline->result.u.var).var.ptr;
16215 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
16216 :
16217 0 : container = _get_obj_zval_ptr_unused(TSRMLS_C);
16218 :
16219 0 : if (container == EG(error_zval_ptr)) {
16220 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
16221 0 : *retval = EG(error_zval_ptr);
16222 0 : PZVAL_LOCK(*retval);
16223 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16224 : }
16225 :
16226 0 : ZEND_VM_NEXT_OPCODE();
16227 : }
16228 :
16229 :
16230 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
16231 0 : if (type != BP_VAR_IS) {
16232 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
16233 : }
16234 0 : *retval = EG(uninitialized_zval_ptr);
16235 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
16236 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16237 : } else {
16238 : zend_free_op free_op2;
16239 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16240 :
16241 : if (1) {
16242 0 : MAKE_REAL_ZVAL_PTR(offset);
16243 : }
16244 :
16245 : /* here we are sure we are dealing with an object */
16246 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
16247 :
16248 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
16249 0 : zval_dtor(*retval);
16250 0 : FREE_ZVAL(*retval);
16251 : } else {
16252 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
16253 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16254 : }
16255 :
16256 : if (1) {
16257 0 : zval_ptr_dtor(&offset);
16258 : } else {
16259 : zval_dtor(free_op2.var);
16260 : }
16261 : }
16262 :
16263 0 : ZEND_VM_NEXT_OPCODE();
16264 : }
16265 :
16266 : static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16267 0 : {
16268 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16269 : }
16270 :
16271 : static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16272 0 : {
16273 0 : zend_op *opline = EX(opline);
16274 : zend_free_op free_op1, free_op2;
16275 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16276 :
16277 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) {
16278 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
16279 0 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
16280 : }
16281 :
16282 : if (1) {
16283 0 : MAKE_REAL_ZVAL_PTR(property);
16284 : }
16285 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
16286 : if (1) {
16287 0 : zval_ptr_dtor(&property);
16288 : } else {
16289 : zval_dtor(free_op2.var);
16290 : }
16291 : if (IS_UNUSED == IS_VAR && 0 &&
16292 : READY_TO_DESTROY(free_op1.var) &&
16293 : !RETURN_VALUE_UNUSED(&opline->result)) {
16294 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16295 : }
16296 :
16297 0 : ZEND_VM_NEXT_OPCODE();
16298 : }
16299 :
16300 : static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16301 0 : {
16302 0 : zend_op *opline = EX(opline);
16303 : zend_free_op free_op1, free_op2;
16304 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16305 :
16306 : if (1) {
16307 0 : MAKE_REAL_ZVAL_PTR(property);
16308 : }
16309 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC);
16310 : if (1) {
16311 0 : zval_ptr_dtor(&property);
16312 : } else {
16313 : zval_dtor(free_op2.var);
16314 : }
16315 : if (IS_UNUSED == IS_VAR && 0 &&
16316 : READY_TO_DESTROY(free_op1.var) &&
16317 : !RETURN_VALUE_UNUSED(&opline->result)) {
16318 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16319 : }
16320 :
16321 0 : ZEND_VM_NEXT_OPCODE();
16322 : }
16323 :
16324 : static int ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16325 0 : {
16326 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16327 : }
16328 :
16329 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16330 0 : {
16331 0 : zend_op *opline = EX(opline);
16332 :
16333 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
16334 : /* Behave like FETCH_OBJ_W */
16335 : zend_free_op free_op1, free_op2;
16336 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16337 :
16338 : if (1) {
16339 0 : MAKE_REAL_ZVAL_PTR(property);
16340 : }
16341 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
16342 : if (1) {
16343 0 : zval_ptr_dtor(&property);
16344 : } else {
16345 : zval_dtor(free_op2.var);
16346 : }
16347 : if (IS_UNUSED == IS_VAR && 0 &&
16348 : READY_TO_DESTROY(free_op1.var) &&
16349 : !RETURN_VALUE_UNUSED(&opline->result)) {
16350 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16351 : }
16352 :
16353 0 : ZEND_VM_NEXT_OPCODE();
16354 : } else {
16355 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16356 : }
16357 : }
16358 :
16359 : static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16360 0 : {
16361 0 : zend_op *opline = EX(opline);
16362 : zend_free_op free_op1, free_op2, free_res;
16363 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16364 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16365 :
16366 : if (IS_UNUSED == IS_CV) {
16367 : if (container != &EG(uninitialized_zval_ptr)) {
16368 : SEPARATE_ZVAL_IF_NOT_REF(container);
16369 : }
16370 : }
16371 : if (1) {
16372 0 : MAKE_REAL_ZVAL_PTR(property);
16373 : }
16374 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
16375 : if (1) {
16376 0 : zval_ptr_dtor(&property);
16377 : } else {
16378 : zval_dtor(free_op2.var);
16379 : }
16380 : if (IS_UNUSED == IS_VAR && 0 &&
16381 : READY_TO_DESTROY(free_op1.var) &&
16382 : !RETURN_VALUE_UNUSED(&opline->result)) {
16383 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16384 : }
16385 :
16386 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
16387 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
16388 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
16389 : }
16390 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
16391 0 : FREE_OP_VAR_PTR(free_res);
16392 0 : ZEND_VM_NEXT_OPCODE();
16393 : }
16394 :
16395 : static int ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16396 0 : {
16397 0 : zend_op *opline = EX(opline);
16398 0 : zend_op *op_data = opline+1;
16399 :
16400 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16401 :
16402 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
16403 :
16404 : /* assign_obj has two opcodes! */
16405 0 : ZEND_VM_INC_OPCODE();
16406 0 : ZEND_VM_NEXT_OPCODE();
16407 : }
16408 :
16409 : static int ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16410 0 : {
16411 0 : zend_op *opline = EX(opline);
16412 : zval *function_name;
16413 : char *function_name_strval;
16414 : int function_name_strlen;
16415 : zend_free_op free_op2;
16416 :
16417 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
16418 :
16419 0 : function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16420 :
16421 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
16422 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
16423 : }
16424 :
16425 0 : function_name_strval = Z_STRVAL_P(function_name);
16426 0 : function_name_strlen = Z_STRLEN_P(function_name);
16427 :
16428 0 : EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C);
16429 :
16430 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
16431 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
16432 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
16433 : }
16434 :
16435 : /* First, locate the function. */
16436 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
16437 0 : if (!EX(fbc)) {
16438 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
16439 : }
16440 : } else {
16441 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
16442 : }
16443 :
16444 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
16445 0 : EX(object) = NULL;
16446 : } else {
16447 0 : if (!PZVAL_IS_REF(EX(object))) {
16448 0 : EX(object)->refcount++; /* For $this pointer */
16449 : } else {
16450 : zval *this_ptr;
16451 0 : ALLOC_ZVAL(this_ptr);
16452 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
16453 0 : zval_copy_ctor(this_ptr);
16454 0 : EX(object) = this_ptr;
16455 : }
16456 : }
16457 :
16458 0 : zval_dtor(free_op2.var);
16459 :
16460 0 : ZEND_VM_NEXT_OPCODE();
16461 : }
16462 :
16463 : static int ZEND_INIT_ARRAY_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16464 0 : {
16465 0 : zend_op *opline = EX(opline);
16466 :
16467 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
16468 : if (IS_UNUSED == IS_UNUSED) {
16469 0 : ZEND_VM_NEXT_OPCODE();
16470 : #if 0 || IS_UNUSED != IS_UNUSED
16471 : } else {
16472 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16473 : #endif
16474 : }
16475 : }
16476 :
16477 : static int ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16478 0 : {
16479 0 : zend_op *opline = EX(opline);
16480 : zend_free_op free_op2;
16481 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16482 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16483 : long index;
16484 :
16485 0 : if (container) {
16486 : if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
16487 : SEPARATE_ZVAL_IF_NOT_REF(container);
16488 : }
16489 0 : switch (Z_TYPE_PP(container)) {
16490 : case IS_ARRAY: {
16491 0 : HashTable *ht = Z_ARRVAL_PP(container);
16492 :
16493 0 : switch (Z_TYPE_P(offset)) {
16494 : case IS_DOUBLE:
16495 0 : index = (long) Z_DVAL_P(offset);
16496 0 : zend_hash_index_del(ht, index);
16497 0 : break;
16498 : case IS_RESOURCE:
16499 : case IS_BOOL:
16500 : case IS_LONG:
16501 0 : index = Z_LVAL_P(offset);
16502 0 : zend_hash_index_del(ht, index);
16503 0 : break;
16504 : case IS_STRING:
16505 : if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
16506 : offset->refcount++;
16507 : }
16508 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
16509 : ht == &EG(symbol_table)) {
16510 : zend_execute_data *ex;
16511 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
16512 :
16513 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
16514 0 : if (ex->op_array && ex->symbol_table == ht) {
16515 : int i;
16516 :
16517 0 : for (i = 0; i < ex->op_array->last_var; i++) {
16518 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
16519 : ex->op_array->vars[i].name_len == offset->value.str.len &&
16520 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
16521 0 : ex->CVs[i] = NULL;
16522 0 : break;
16523 : }
16524 : }
16525 : }
16526 : }
16527 : }
16528 : if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
16529 : zval_ptr_dtor(&offset);
16530 : }
16531 0 : break;
16532 : case IS_NULL:
16533 0 : zend_hash_del(ht, "", sizeof(""));
16534 0 : break;
16535 : default:
16536 0 : zend_error(E_WARNING, "Illegal offset type in unset");
16537 : break;
16538 : }
16539 0 : zval_dtor(free_op2.var);
16540 0 : break;
16541 : }
16542 : case IS_OBJECT:
16543 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
16544 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
16545 : }
16546 : if (1) {
16547 0 : MAKE_REAL_ZVAL_PTR(offset);
16548 : }
16549 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
16550 : if (1) {
16551 0 : zval_ptr_dtor(&offset);
16552 : } else {
16553 : zval_dtor(free_op2.var);
16554 : }
16555 0 : break;
16556 : case IS_STRING:
16557 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
16558 : ZEND_VM_CONTINUE(); /* bailed out before */
16559 : default:
16560 0 : zval_dtor(free_op2.var);
16561 : break;
16562 : }
16563 : } else {
16564 0 : zval_dtor(free_op2.var);
16565 : }
16566 :
16567 0 : ZEND_VM_NEXT_OPCODE();
16568 : }
16569 :
16570 : static int ZEND_UNSET_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16571 0 : {
16572 0 : zend_op *opline = EX(opline);
16573 : zend_free_op free_op2;
16574 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16575 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16576 :
16577 0 : if (container) {
16578 : if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
16579 : SEPARATE_ZVAL_IF_NOT_REF(container);
16580 : }
16581 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
16582 : if (1) {
16583 0 : MAKE_REAL_ZVAL_PTR(offset);
16584 : }
16585 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
16586 : if (1) {
16587 0 : zval_ptr_dtor(&offset);
16588 : } else {
16589 : zval_dtor(free_op2.var);
16590 : }
16591 : } else {
16592 0 : zval_dtor(free_op2.var);
16593 : }
16594 : } else {
16595 0 : zval_dtor(free_op2.var);
16596 : }
16597 :
16598 0 : ZEND_VM_NEXT_OPCODE();
16599 : }
16600 :
16601 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
16602 0 : {
16603 0 : zend_op *opline = EX(opline);
16604 :
16605 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16606 0 : zval **value = NULL;
16607 0 : int result = 0;
16608 : long index;
16609 :
16610 0 : if (container) {
16611 : zend_free_op free_op2;
16612 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16613 :
16614 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
16615 : HashTable *ht;
16616 0 : int isset = 0;
16617 :
16618 0 : ht = Z_ARRVAL_PP(container);
16619 :
16620 0 : switch (Z_TYPE_P(offset)) {
16621 : case IS_DOUBLE:
16622 0 : index = (long) Z_DVAL_P(offset);
16623 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
16624 0 : isset = 1;
16625 : }
16626 0 : break;
16627 : case IS_RESOURCE:
16628 : case IS_BOOL:
16629 : case IS_LONG:
16630 0 : index = Z_LVAL_P(offset);
16631 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
16632 0 : isset = 1;
16633 : }
16634 0 : break;
16635 : case IS_STRING:
16636 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
16637 0 : isset = 1;
16638 : }
16639 0 : break;
16640 : case IS_NULL:
16641 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
16642 0 : isset = 1;
16643 : }
16644 0 : break;
16645 : default:
16646 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
16647 :
16648 : break;
16649 : }
16650 :
16651 0 : switch (opline->extended_value) {
16652 : case ZEND_ISSET:
16653 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
16654 0 : result = 0;
16655 : } else {
16656 0 : result = isset;
16657 : }
16658 0 : break;
16659 : case ZEND_ISEMPTY:
16660 0 : if (!isset || !i_zend_is_true(*value)) {
16661 0 : result = 0;
16662 : } else {
16663 0 : result = 1;
16664 : }
16665 : break;
16666 : }
16667 0 : zval_dtor(free_op2.var);
16668 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
16669 : if (1) {
16670 0 : MAKE_REAL_ZVAL_PTR(offset);
16671 : }
16672 0 : if (prop_dim) {
16673 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
16674 : } else {
16675 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
16676 : }
16677 : if (1) {
16678 0 : zval_ptr_dtor(&offset);
16679 : } else {
16680 : zval_dtor(free_op2.var);
16681 : }
16682 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
16683 : zval tmp;
16684 :
16685 0 : if (Z_TYPE_P(offset) != IS_LONG) {
16686 0 : tmp = *offset;
16687 0 : zval_copy_ctor(&tmp);
16688 0 : convert_to_long(&tmp);
16689 0 : offset = &tmp;
16690 : }
16691 0 : if (Z_TYPE_P(offset) == IS_LONG) {
16692 0 : switch (opline->extended_value) {
16693 : case ZEND_ISSET:
16694 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
16695 0 : result = 1;
16696 : }
16697 0 : break;
16698 : case ZEND_ISEMPTY:
16699 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
16700 0 : result = 1;
16701 : }
16702 : break;
16703 : }
16704 : }
16705 0 : zval_dtor(free_op2.var);
16706 : } else {
16707 0 : zval_dtor(free_op2.var);
16708 : }
16709 : }
16710 :
16711 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
16712 :
16713 0 : switch (opline->extended_value) {
16714 : case ZEND_ISSET:
16715 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
16716 0 : break;
16717 : case ZEND_ISEMPTY:
16718 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
16719 : break;
16720 : }
16721 :
16722 0 : ZEND_VM_NEXT_OPCODE();
16723 : }
16724 :
16725 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16726 0 : {
16727 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16728 : }
16729 :
16730 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16731 0 : {
16732 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16733 : }
16734 :
16735 : static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
16736 0 : {
16737 0 : zend_op *opline = EX(opline);
16738 0 : zend_op *op_data = opline+1;
16739 : zend_free_op free_op2, free_op_data1;
16740 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16741 : zval *object;
16742 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16743 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
16744 0 : znode *result = &opline->result;
16745 0 : zval **retval = &EX_T(result->u.var).var.ptr;
16746 0 : int have_get_ptr = 0;
16747 :
16748 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
16749 0 : make_real_object(object_ptr TSRMLS_CC);
16750 0 : object = *object_ptr;
16751 :
16752 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
16753 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
16754 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
16755 0 : FREE_OP(free_op_data1);
16756 :
16757 0 : if (!RETURN_VALUE_UNUSED(result)) {
16758 0 : *retval = EG(uninitialized_zval_ptr);
16759 0 : PZVAL_LOCK(*retval);
16760 : }
16761 : } else {
16762 : /* here we are sure we are dealing with an object */
16763 : if (0) {
16764 : MAKE_REAL_ZVAL_PTR(property);
16765 : }
16766 :
16767 : /* here property is a string */
16768 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
16769 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
16770 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
16771 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
16772 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
16773 :
16774 0 : have_get_ptr = 1;
16775 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
16776 0 : if (!RETURN_VALUE_UNUSED(result)) {
16777 0 : *retval = *zptr;
16778 0 : PZVAL_LOCK(*retval);
16779 : }
16780 : }
16781 : }
16782 :
16783 0 : if (!have_get_ptr) {
16784 0 : zval *z = NULL;
16785 :
16786 0 : switch (opline->extended_value) {
16787 : case ZEND_ASSIGN_OBJ:
16788 0 : if (Z_OBJ_HT_P(object)->read_property) {
16789 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
16790 : }
16791 0 : break;
16792 : case ZEND_ASSIGN_DIM:
16793 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
16794 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
16795 : }
16796 : break;
16797 : }
16798 0 : if (z) {
16799 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
16800 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
16801 :
16802 0 : if (z->refcount == 0) {
16803 0 : zval_dtor(z);
16804 0 : FREE_ZVAL(z);
16805 : }
16806 0 : z = value;
16807 : }
16808 0 : z->refcount++;
16809 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
16810 0 : binary_op(z, z, value TSRMLS_CC);
16811 0 : switch (opline->extended_value) {
16812 : case ZEND_ASSIGN_OBJ:
16813 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
16814 0 : break;
16815 : case ZEND_ASSIGN_DIM:
16816 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
16817 : break;
16818 : }
16819 0 : if (!RETURN_VALUE_UNUSED(result)) {
16820 0 : *retval = z;
16821 0 : PZVAL_LOCK(*retval);
16822 : }
16823 0 : zval_ptr_dtor(&z);
16824 : } else {
16825 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
16826 0 : if (!RETURN_VALUE_UNUSED(result)) {
16827 0 : *retval = EG(uninitialized_zval_ptr);
16828 0 : PZVAL_LOCK(*retval);
16829 : }
16830 : }
16831 : }
16832 :
16833 : if (0) {
16834 : zval_ptr_dtor(&property);
16835 : } else {
16836 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
16837 : }
16838 0 : FREE_OP(free_op_data1);
16839 : }
16840 :
16841 : /* assign_obj has two opcodes! */
16842 0 : ZEND_VM_INC_OPCODE();
16843 0 : ZEND_VM_NEXT_OPCODE();
16844 : }
16845 :
16846 : static int zend_binary_assign_op_helper_SPEC_UNUSED_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
16847 0 : {
16848 0 : zend_op *opline = EX(opline);
16849 : zend_free_op free_op2, free_op_data2, free_op_data1;
16850 : zval **var_ptr;
16851 : zval *value;
16852 0 : zend_bool increment_opline = 0;
16853 :
16854 0 : switch (opline->extended_value) {
16855 : case ZEND_ASSIGN_OBJ:
16856 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16857 : break;
16858 : case ZEND_ASSIGN_DIM: {
16859 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16860 :
16861 0 : if (object_ptr && IS_UNUSED != IS_CV && !0) {
16862 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
16863 : }
16864 :
16865 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
16866 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16867 : } else {
16868 0 : zend_op *op_data = opline+1;
16869 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16870 :
16871 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC);
16872 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
16873 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
16874 0 : increment_opline = 1;
16875 : }
16876 : }
16877 0 : break;
16878 : default:
16879 0 : value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16880 0 : var_ptr = NULL;
16881 : /* do nothing */
16882 : break;
16883 : }
16884 :
16885 0 : if (!var_ptr) {
16886 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
16887 : }
16888 :
16889 0 : if (*var_ptr == EG(error_zval_ptr)) {
16890 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
16891 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
16892 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
16893 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16894 : }
16895 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
16896 :
16897 0 : if (increment_opline) {
16898 0 : ZEND_VM_INC_OPCODE();
16899 : }
16900 0 : ZEND_VM_NEXT_OPCODE();
16901 : }
16902 :
16903 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
16904 :
16905 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
16906 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
16907 : /* proxy object */
16908 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
16909 0 : objval->refcount++;
16910 0 : binary_op(objval, objval, value TSRMLS_CC);
16911 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
16912 0 : zval_ptr_dtor(&objval);
16913 : } else {
16914 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
16915 : }
16916 :
16917 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
16918 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
16919 0 : PZVAL_LOCK(*var_ptr);
16920 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
16921 : }
16922 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
16923 :
16924 0 : if (increment_opline) {
16925 0 : ZEND_VM_INC_OPCODE();
16926 0 : FREE_OP(free_op_data1);
16927 0 : FREE_OP_VAR_PTR(free_op_data2);
16928 : }
16929 :
16930 0 : ZEND_VM_NEXT_OPCODE();
16931 : }
16932 :
16933 : static int ZEND_ASSIGN_ADD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16934 0 : {
16935 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16936 : }
16937 :
16938 : static int ZEND_ASSIGN_SUB_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16939 0 : {
16940 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16941 : }
16942 :
16943 : static int ZEND_ASSIGN_MUL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16944 0 : {
16945 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16946 : }
16947 :
16948 : static int ZEND_ASSIGN_DIV_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16949 0 : {
16950 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16951 : }
16952 :
16953 : static int ZEND_ASSIGN_MOD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16954 0 : {
16955 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16956 : }
16957 :
16958 : static int ZEND_ASSIGN_SL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16959 0 : {
16960 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16961 : }
16962 :
16963 : static int ZEND_ASSIGN_SR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16964 0 : {
16965 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16966 : }
16967 :
16968 : static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16969 0 : {
16970 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16971 : }
16972 :
16973 : static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16974 0 : {
16975 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16976 : }
16977 :
16978 : static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16979 0 : {
16980 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16981 : }
16982 :
16983 : static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
16984 0 : {
16985 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
16986 : }
16987 :
16988 : static int zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
16989 0 : {
16990 0 : zend_op *opline = EX(opline);
16991 : zend_free_op free_op2;
16992 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
16993 : zval *object;
16994 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
16995 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
16996 0 : int have_get_ptr = 0;
16997 :
16998 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
16999 0 : object = *object_ptr;
17000 :
17001 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
17002 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
17003 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17004 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
17005 0 : *retval = EG(uninitialized_zval_ptr);
17006 0 : PZVAL_LOCK(*retval);
17007 : }
17008 :
17009 0 : ZEND_VM_NEXT_OPCODE();
17010 : }
17011 :
17012 : /* here we are sure we are dealing with an object */
17013 :
17014 : if (0) {
17015 : MAKE_REAL_ZVAL_PTR(property);
17016 : }
17017 :
17018 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
17019 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
17020 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
17021 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
17022 :
17023 0 : have_get_ptr = 1;
17024 0 : incdec_op(*zptr);
17025 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
17026 0 : *retval = *zptr;
17027 0 : PZVAL_LOCK(*retval);
17028 : }
17029 : }
17030 : }
17031 :
17032 0 : if (!have_get_ptr) {
17033 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
17034 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
17035 :
17036 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
17037 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
17038 :
17039 0 : if (z->refcount == 0) {
17040 0 : zval_dtor(z);
17041 0 : FREE_ZVAL(z);
17042 : }
17043 0 : z = value;
17044 : }
17045 0 : z->refcount++;
17046 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
17047 0 : incdec_op(z);
17048 0 : *retval = z;
17049 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
17050 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
17051 0 : zval_ptr_dtor(&z);
17052 : } else {
17053 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
17054 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
17055 0 : *retval = EG(uninitialized_zval_ptr);
17056 0 : PZVAL_LOCK(*retval);
17057 : }
17058 : }
17059 : }
17060 :
17061 : if (0) {
17062 : zval_ptr_dtor(&property);
17063 : } else {
17064 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17065 : }
17066 :
17067 0 : ZEND_VM_NEXT_OPCODE();
17068 : }
17069 :
17070 : static int ZEND_PRE_INC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17071 0 : {
17072 0 : return zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17073 : }
17074 :
17075 : static int ZEND_PRE_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17076 0 : {
17077 0 : return zend_pre_incdec_property_helper_SPEC_UNUSED_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17078 : }
17079 :
17080 : static int zend_post_incdec_property_helper_SPEC_UNUSED_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
17081 0 : {
17082 0 : zend_op *opline = EX(opline);
17083 : zend_free_op free_op2;
17084 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17085 : zval *object;
17086 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17087 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
17088 0 : int have_get_ptr = 0;
17089 :
17090 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
17091 0 : object = *object_ptr;
17092 :
17093 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
17094 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
17095 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17096 0 : *retval = *EG(uninitialized_zval_ptr);
17097 :
17098 0 : ZEND_VM_NEXT_OPCODE();
17099 : }
17100 :
17101 : /* here we are sure we are dealing with an object */
17102 :
17103 : if (0) {
17104 : MAKE_REAL_ZVAL_PTR(property);
17105 : }
17106 :
17107 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
17108 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
17109 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
17110 0 : have_get_ptr = 1;
17111 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
17112 :
17113 0 : *retval = **zptr;
17114 0 : zendi_zval_copy_ctor(*retval);
17115 :
17116 0 : incdec_op(*zptr);
17117 :
17118 : }
17119 : }
17120 :
17121 0 : if (!have_get_ptr) {
17122 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
17123 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
17124 : zval *z_copy;
17125 :
17126 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
17127 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
17128 :
17129 0 : if (z->refcount == 0) {
17130 0 : zval_dtor(z);
17131 0 : FREE_ZVAL(z);
17132 : }
17133 0 : z = value;
17134 : }
17135 0 : *retval = *z;
17136 0 : zendi_zval_copy_ctor(*retval);
17137 0 : ALLOC_ZVAL(z_copy);
17138 0 : *z_copy = *z;
17139 0 : zendi_zval_copy_ctor(*z_copy);
17140 0 : INIT_PZVAL(z_copy);
17141 0 : incdec_op(z_copy);
17142 0 : z->refcount++;
17143 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
17144 0 : zval_ptr_dtor(&z_copy);
17145 0 : zval_ptr_dtor(&z);
17146 : } else {
17147 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
17148 0 : *retval = *EG(uninitialized_zval_ptr);
17149 : }
17150 : }
17151 :
17152 : if (0) {
17153 : zval_ptr_dtor(&property);
17154 : } else {
17155 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17156 : }
17157 :
17158 0 : ZEND_VM_NEXT_OPCODE();
17159 : }
17160 :
17161 : static int ZEND_POST_INC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17162 0 : {
17163 0 : return zend_post_incdec_property_helper_SPEC_UNUSED_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17164 : }
17165 :
17166 : static int ZEND_POST_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17167 0 : {
17168 0 : return zend_post_incdec_property_helper_SPEC_UNUSED_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17169 : }
17170 :
17171 : static int zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
17172 0 : {
17173 0 : zend_op *opline = EX(opline);
17174 : zval *container;
17175 : zval **retval;
17176 :
17177 :
17178 0 : retval = &EX_T(opline->result.u.var).var.ptr;
17179 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
17180 :
17181 0 : container = _get_obj_zval_ptr_unused(TSRMLS_C);
17182 :
17183 0 : if (container == EG(error_zval_ptr)) {
17184 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
17185 0 : *retval = EG(error_zval_ptr);
17186 0 : PZVAL_LOCK(*retval);
17187 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17188 : }
17189 :
17190 0 : ZEND_VM_NEXT_OPCODE();
17191 : }
17192 :
17193 :
17194 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
17195 0 : if (type != BP_VAR_IS) {
17196 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
17197 : }
17198 0 : *retval = EG(uninitialized_zval_ptr);
17199 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
17200 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17201 : } else {
17202 : zend_free_op free_op2;
17203 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17204 :
17205 : if (0) {
17206 : MAKE_REAL_ZVAL_PTR(offset);
17207 : }
17208 :
17209 : /* here we are sure we are dealing with an object */
17210 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
17211 :
17212 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
17213 0 : zval_dtor(*retval);
17214 0 : FREE_ZVAL(*retval);
17215 : } else {
17216 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
17217 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17218 : }
17219 :
17220 : if (0) {
17221 : zval_ptr_dtor(&offset);
17222 : } else {
17223 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17224 : }
17225 : }
17226 :
17227 0 : ZEND_VM_NEXT_OPCODE();
17228 : }
17229 :
17230 : static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17231 0 : {
17232 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17233 : }
17234 :
17235 : static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17236 0 : {
17237 0 : zend_op *opline = EX(opline);
17238 : zend_free_op free_op1, free_op2;
17239 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17240 :
17241 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) {
17242 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
17243 0 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
17244 : }
17245 :
17246 : if (0) {
17247 : MAKE_REAL_ZVAL_PTR(property);
17248 : }
17249 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
17250 : if (0) {
17251 : zval_ptr_dtor(&property);
17252 : } else {
17253 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17254 : }
17255 : if (IS_UNUSED == IS_VAR && 0 &&
17256 : READY_TO_DESTROY(free_op1.var) &&
17257 : !RETURN_VALUE_UNUSED(&opline->result)) {
17258 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17259 : }
17260 :
17261 0 : ZEND_VM_NEXT_OPCODE();
17262 : }
17263 :
17264 : static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17265 0 : {
17266 0 : zend_op *opline = EX(opline);
17267 : zend_free_op free_op1, free_op2;
17268 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17269 :
17270 : if (0) {
17271 : MAKE_REAL_ZVAL_PTR(property);
17272 : }
17273 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC);
17274 : if (0) {
17275 : zval_ptr_dtor(&property);
17276 : } else {
17277 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17278 : }
17279 : if (IS_UNUSED == IS_VAR && 0 &&
17280 : READY_TO_DESTROY(free_op1.var) &&
17281 : !RETURN_VALUE_UNUSED(&opline->result)) {
17282 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17283 : }
17284 :
17285 0 : ZEND_VM_NEXT_OPCODE();
17286 : }
17287 :
17288 : static int ZEND_FETCH_OBJ_IS_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17289 0 : {
17290 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17291 : }
17292 :
17293 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17294 0 : {
17295 0 : zend_op *opline = EX(opline);
17296 :
17297 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
17298 : /* Behave like FETCH_OBJ_W */
17299 : zend_free_op free_op1, free_op2;
17300 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17301 :
17302 : if (0) {
17303 : MAKE_REAL_ZVAL_PTR(property);
17304 : }
17305 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
17306 : if (0) {
17307 : zval_ptr_dtor(&property);
17308 : } else {
17309 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17310 : }
17311 : if (IS_UNUSED == IS_VAR && 0 &&
17312 : READY_TO_DESTROY(free_op1.var) &&
17313 : !RETURN_VALUE_UNUSED(&opline->result)) {
17314 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17315 : }
17316 :
17317 0 : ZEND_VM_NEXT_OPCODE();
17318 : } else {
17319 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17320 : }
17321 : }
17322 :
17323 : static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17324 0 : {
17325 0 : zend_op *opline = EX(opline);
17326 : zend_free_op free_op1, free_op2, free_res;
17327 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17328 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17329 :
17330 : if (IS_UNUSED == IS_CV) {
17331 : if (container != &EG(uninitialized_zval_ptr)) {
17332 : SEPARATE_ZVAL_IF_NOT_REF(container);
17333 : }
17334 : }
17335 : if (0) {
17336 : MAKE_REAL_ZVAL_PTR(property);
17337 : }
17338 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
17339 : if (0) {
17340 : zval_ptr_dtor(&property);
17341 : } else {
17342 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17343 : }
17344 : if (IS_UNUSED == IS_VAR && 0 &&
17345 : READY_TO_DESTROY(free_op1.var) &&
17346 : !RETURN_VALUE_UNUSED(&opline->result)) {
17347 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17348 : }
17349 :
17350 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
17351 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
17352 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
17353 : }
17354 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
17355 0 : FREE_OP_VAR_PTR(free_res);
17356 0 : ZEND_VM_NEXT_OPCODE();
17357 : }
17358 :
17359 : static int ZEND_ASSIGN_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17360 0 : {
17361 0 : zend_op *opline = EX(opline);
17362 0 : zend_op *op_data = opline+1;
17363 :
17364 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17365 :
17366 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
17367 :
17368 : /* assign_obj has two opcodes! */
17369 0 : ZEND_VM_INC_OPCODE();
17370 0 : ZEND_VM_NEXT_OPCODE();
17371 : }
17372 :
17373 : static int ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17374 0 : {
17375 0 : zend_op *opline = EX(opline);
17376 : zval *function_name;
17377 : char *function_name_strval;
17378 : int function_name_strlen;
17379 : zend_free_op free_op2;
17380 :
17381 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
17382 :
17383 0 : function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17384 :
17385 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
17386 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
17387 : }
17388 :
17389 0 : function_name_strval = Z_STRVAL_P(function_name);
17390 0 : function_name_strlen = Z_STRLEN_P(function_name);
17391 :
17392 0 : EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C);
17393 :
17394 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
17395 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
17396 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
17397 : }
17398 :
17399 : /* First, locate the function. */
17400 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
17401 0 : if (!EX(fbc)) {
17402 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
17403 : }
17404 : } else {
17405 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
17406 : }
17407 :
17408 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
17409 0 : EX(object) = NULL;
17410 : } else {
17411 0 : if (!PZVAL_IS_REF(EX(object))) {
17412 0 : EX(object)->refcount++; /* For $this pointer */
17413 : } else {
17414 : zval *this_ptr;
17415 0 : ALLOC_ZVAL(this_ptr);
17416 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
17417 0 : zval_copy_ctor(this_ptr);
17418 0 : EX(object) = this_ptr;
17419 : }
17420 : }
17421 :
17422 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17423 :
17424 0 : ZEND_VM_NEXT_OPCODE();
17425 : }
17426 :
17427 : static int ZEND_INIT_ARRAY_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17428 0 : {
17429 0 : zend_op *opline = EX(opline);
17430 :
17431 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
17432 : if (IS_UNUSED == IS_UNUSED) {
17433 0 : ZEND_VM_NEXT_OPCODE();
17434 : #if 0 || IS_UNUSED != IS_UNUSED
17435 : } else {
17436 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17437 : #endif
17438 : }
17439 : }
17440 :
17441 : static int ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17442 0 : {
17443 0 : zend_op *opline = EX(opline);
17444 : zend_free_op free_op2;
17445 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17446 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17447 : long index;
17448 :
17449 0 : if (container) {
17450 : if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
17451 : SEPARATE_ZVAL_IF_NOT_REF(container);
17452 : }
17453 0 : switch (Z_TYPE_PP(container)) {
17454 : case IS_ARRAY: {
17455 0 : HashTable *ht = Z_ARRVAL_PP(container);
17456 :
17457 0 : switch (Z_TYPE_P(offset)) {
17458 : case IS_DOUBLE:
17459 0 : index = (long) Z_DVAL_P(offset);
17460 0 : zend_hash_index_del(ht, index);
17461 0 : break;
17462 : case IS_RESOURCE:
17463 : case IS_BOOL:
17464 : case IS_LONG:
17465 0 : index = Z_LVAL_P(offset);
17466 0 : zend_hash_index_del(ht, index);
17467 0 : break;
17468 : case IS_STRING:
17469 : if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
17470 0 : offset->refcount++;
17471 : }
17472 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
17473 : ht == &EG(symbol_table)) {
17474 : zend_execute_data *ex;
17475 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
17476 :
17477 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
17478 0 : if (ex->op_array && ex->symbol_table == ht) {
17479 : int i;
17480 :
17481 0 : for (i = 0; i < ex->op_array->last_var; i++) {
17482 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
17483 : ex->op_array->vars[i].name_len == offset->value.str.len &&
17484 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
17485 0 : ex->CVs[i] = NULL;
17486 0 : break;
17487 : }
17488 : }
17489 : }
17490 : }
17491 : }
17492 : if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
17493 0 : zval_ptr_dtor(&offset);
17494 : }
17495 0 : break;
17496 : case IS_NULL:
17497 0 : zend_hash_del(ht, "", sizeof(""));
17498 0 : break;
17499 : default:
17500 0 : zend_error(E_WARNING, "Illegal offset type in unset");
17501 : break;
17502 : }
17503 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17504 0 : break;
17505 : }
17506 : case IS_OBJECT:
17507 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
17508 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
17509 : }
17510 : if (0) {
17511 : MAKE_REAL_ZVAL_PTR(offset);
17512 : }
17513 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
17514 : if (0) {
17515 : zval_ptr_dtor(&offset);
17516 : } else {
17517 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17518 : }
17519 0 : break;
17520 : case IS_STRING:
17521 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
17522 : ZEND_VM_CONTINUE(); /* bailed out before */
17523 : default:
17524 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17525 : break;
17526 : }
17527 : } else {
17528 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17529 : }
17530 :
17531 0 : ZEND_VM_NEXT_OPCODE();
17532 : }
17533 :
17534 : static int ZEND_UNSET_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17535 0 : {
17536 0 : zend_op *opline = EX(opline);
17537 : zend_free_op free_op2;
17538 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17539 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17540 :
17541 0 : if (container) {
17542 : if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
17543 : SEPARATE_ZVAL_IF_NOT_REF(container);
17544 : }
17545 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
17546 : if (0) {
17547 : MAKE_REAL_ZVAL_PTR(offset);
17548 : }
17549 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
17550 : if (0) {
17551 : zval_ptr_dtor(&offset);
17552 : } else {
17553 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17554 : }
17555 : } else {
17556 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17557 : }
17558 : } else {
17559 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17560 : }
17561 :
17562 0 : ZEND_VM_NEXT_OPCODE();
17563 : }
17564 :
17565 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
17566 0 : {
17567 0 : zend_op *opline = EX(opline);
17568 :
17569 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17570 0 : zval **value = NULL;
17571 0 : int result = 0;
17572 : long index;
17573 :
17574 0 : if (container) {
17575 : zend_free_op free_op2;
17576 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
17577 :
17578 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
17579 : HashTable *ht;
17580 0 : int isset = 0;
17581 :
17582 0 : ht = Z_ARRVAL_PP(container);
17583 :
17584 0 : switch (Z_TYPE_P(offset)) {
17585 : case IS_DOUBLE:
17586 0 : index = (long) Z_DVAL_P(offset);
17587 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
17588 0 : isset = 1;
17589 : }
17590 0 : break;
17591 : case IS_RESOURCE:
17592 : case IS_BOOL:
17593 : case IS_LONG:
17594 0 : index = Z_LVAL_P(offset);
17595 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
17596 0 : isset = 1;
17597 : }
17598 0 : break;
17599 : case IS_STRING:
17600 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
17601 0 : isset = 1;
17602 : }
17603 0 : break;
17604 : case IS_NULL:
17605 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
17606 0 : isset = 1;
17607 : }
17608 0 : break;
17609 : default:
17610 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
17611 :
17612 : break;
17613 : }
17614 :
17615 0 : switch (opline->extended_value) {
17616 : case ZEND_ISSET:
17617 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
17618 0 : result = 0;
17619 : } else {
17620 0 : result = isset;
17621 : }
17622 0 : break;
17623 : case ZEND_ISEMPTY:
17624 0 : if (!isset || !i_zend_is_true(*value)) {
17625 0 : result = 0;
17626 : } else {
17627 0 : result = 1;
17628 : }
17629 : break;
17630 : }
17631 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17632 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
17633 : if (0) {
17634 : MAKE_REAL_ZVAL_PTR(offset);
17635 : }
17636 0 : if (prop_dim) {
17637 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
17638 : } else {
17639 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
17640 : }
17641 : if (0) {
17642 : zval_ptr_dtor(&offset);
17643 : } else {
17644 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17645 : }
17646 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
17647 : zval tmp;
17648 :
17649 0 : if (Z_TYPE_P(offset) != IS_LONG) {
17650 0 : tmp = *offset;
17651 0 : zval_copy_ctor(&tmp);
17652 0 : convert_to_long(&tmp);
17653 0 : offset = &tmp;
17654 : }
17655 0 : if (Z_TYPE_P(offset) == IS_LONG) {
17656 0 : switch (opline->extended_value) {
17657 : case ZEND_ISSET:
17658 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
17659 0 : result = 1;
17660 : }
17661 0 : break;
17662 : case ZEND_ISEMPTY:
17663 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
17664 0 : result = 1;
17665 : }
17666 : break;
17667 : }
17668 : }
17669 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17670 : } else {
17671 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
17672 : }
17673 : }
17674 :
17675 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
17676 :
17677 0 : switch (opline->extended_value) {
17678 : case ZEND_ISSET:
17679 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
17680 0 : break;
17681 : case ZEND_ISEMPTY:
17682 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
17683 : break;
17684 : }
17685 :
17686 0 : ZEND_VM_NEXT_OPCODE();
17687 : }
17688 :
17689 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17690 0 : {
17691 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17692 : }
17693 :
17694 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17695 0 : {
17696 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17697 : }
17698 :
17699 : static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
17700 0 : {
17701 0 : zend_op *opline = EX(opline);
17702 0 : zend_op *op_data = opline+1;
17703 : zend_free_op free_op_data1;
17704 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17705 : zval *object;
17706 0 : zval *property = NULL;
17707 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
17708 0 : znode *result = &opline->result;
17709 0 : zval **retval = &EX_T(result->u.var).var.ptr;
17710 0 : int have_get_ptr = 0;
17711 :
17712 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
17713 0 : make_real_object(object_ptr TSRMLS_CC);
17714 0 : object = *object_ptr;
17715 :
17716 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
17717 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
17718 :
17719 0 : FREE_OP(free_op_data1);
17720 :
17721 0 : if (!RETURN_VALUE_UNUSED(result)) {
17722 0 : *retval = EG(uninitialized_zval_ptr);
17723 0 : PZVAL_LOCK(*retval);
17724 : }
17725 : } else {
17726 : /* here we are sure we are dealing with an object */
17727 : if (0) {
17728 : MAKE_REAL_ZVAL_PTR(property);
17729 : }
17730 :
17731 : /* here property is a string */
17732 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
17733 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
17734 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
17735 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
17736 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
17737 :
17738 0 : have_get_ptr = 1;
17739 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
17740 0 : if (!RETURN_VALUE_UNUSED(result)) {
17741 0 : *retval = *zptr;
17742 0 : PZVAL_LOCK(*retval);
17743 : }
17744 : }
17745 : }
17746 :
17747 0 : if (!have_get_ptr) {
17748 0 : zval *z = NULL;
17749 :
17750 0 : switch (opline->extended_value) {
17751 : case ZEND_ASSIGN_OBJ:
17752 0 : if (Z_OBJ_HT_P(object)->read_property) {
17753 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
17754 : }
17755 0 : break;
17756 : case ZEND_ASSIGN_DIM:
17757 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
17758 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
17759 : }
17760 : break;
17761 : }
17762 0 : if (z) {
17763 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
17764 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
17765 :
17766 0 : if (z->refcount == 0) {
17767 0 : zval_dtor(z);
17768 0 : FREE_ZVAL(z);
17769 : }
17770 0 : z = value;
17771 : }
17772 0 : z->refcount++;
17773 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
17774 0 : binary_op(z, z, value TSRMLS_CC);
17775 0 : switch (opline->extended_value) {
17776 : case ZEND_ASSIGN_OBJ:
17777 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
17778 0 : break;
17779 : case ZEND_ASSIGN_DIM:
17780 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
17781 : break;
17782 : }
17783 0 : if (!RETURN_VALUE_UNUSED(result)) {
17784 0 : *retval = z;
17785 0 : PZVAL_LOCK(*retval);
17786 : }
17787 0 : zval_ptr_dtor(&z);
17788 : } else {
17789 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
17790 0 : if (!RETURN_VALUE_UNUSED(result)) {
17791 0 : *retval = EG(uninitialized_zval_ptr);
17792 0 : PZVAL_LOCK(*retval);
17793 : }
17794 : }
17795 : }
17796 :
17797 : if (0) {
17798 : zval_ptr_dtor(&property);
17799 : } else {
17800 :
17801 : }
17802 0 : FREE_OP(free_op_data1);
17803 : }
17804 :
17805 : /* assign_obj has two opcodes! */
17806 0 : ZEND_VM_INC_OPCODE();
17807 0 : ZEND_VM_NEXT_OPCODE();
17808 : }
17809 :
17810 : static int zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
17811 0 : {
17812 0 : zend_op *opline = EX(opline);
17813 : zend_free_op free_op_data2, free_op_data1;
17814 : zval **var_ptr;
17815 : zval *value;
17816 0 : zend_bool increment_opline = 0;
17817 :
17818 0 : switch (opline->extended_value) {
17819 : case ZEND_ASSIGN_OBJ:
17820 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17821 : break;
17822 : case ZEND_ASSIGN_DIM: {
17823 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17824 :
17825 0 : if (object_ptr && IS_UNUSED != IS_CV && !0) {
17826 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
17827 : }
17828 :
17829 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
17830 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17831 : } else {
17832 0 : zend_op *op_data = opline+1;
17833 0 : zval *dim = NULL;
17834 :
17835 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC);
17836 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
17837 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
17838 0 : increment_opline = 1;
17839 : }
17840 : }
17841 0 : break;
17842 : default:
17843 0 : value = NULL;
17844 0 : var_ptr = NULL;
17845 : /* do nothing */
17846 : break;
17847 : }
17848 :
17849 0 : if (!var_ptr) {
17850 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
17851 : }
17852 :
17853 0 : if (*var_ptr == EG(error_zval_ptr)) {
17854 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
17855 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
17856 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
17857 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17858 : }
17859 :
17860 :
17861 0 : if (increment_opline) {
17862 0 : ZEND_VM_INC_OPCODE();
17863 : }
17864 0 : ZEND_VM_NEXT_OPCODE();
17865 : }
17866 :
17867 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
17868 :
17869 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
17870 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
17871 : /* proxy object */
17872 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
17873 0 : objval->refcount++;
17874 0 : binary_op(objval, objval, value TSRMLS_CC);
17875 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
17876 0 : zval_ptr_dtor(&objval);
17877 : } else {
17878 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
17879 : }
17880 :
17881 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
17882 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
17883 0 : PZVAL_LOCK(*var_ptr);
17884 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
17885 : }
17886 :
17887 0 : if (increment_opline) {
17888 0 : ZEND_VM_INC_OPCODE();
17889 0 : FREE_OP(free_op_data1);
17890 0 : FREE_OP_VAR_PTR(free_op_data2);
17891 : }
17892 :
17893 0 : ZEND_VM_NEXT_OPCODE();
17894 : }
17895 :
17896 : static int ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17897 0 : {
17898 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17899 : }
17900 :
17901 : static int ZEND_ASSIGN_SUB_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17902 0 : {
17903 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17904 : }
17905 :
17906 : static int ZEND_ASSIGN_MUL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17907 0 : {
17908 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17909 : }
17910 :
17911 : static int ZEND_ASSIGN_DIV_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17912 0 : {
17913 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17914 : }
17915 :
17916 : static int ZEND_ASSIGN_MOD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17917 0 : {
17918 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17919 : }
17920 :
17921 : static int ZEND_ASSIGN_SL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17922 0 : {
17923 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17924 : }
17925 :
17926 : static int ZEND_ASSIGN_SR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17927 0 : {
17928 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17929 : }
17930 :
17931 : static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17932 0 : {
17933 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17934 : }
17935 :
17936 : static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17937 0 : {
17938 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17939 : }
17940 :
17941 : static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17942 0 : {
17943 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17944 : }
17945 :
17946 : static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17947 0 : {
17948 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17949 : }
17950 :
17951 : static int ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
17952 136 : {
17953 136 : zend_op *opline = EX(opline);
17954 :
17955 136 : array_init(&EX_T(opline->result.u.var).tmp_var);
17956 : if (IS_UNUSED == IS_UNUSED) {
17957 136 : ZEND_VM_NEXT_OPCODE();
17958 : #if 0 || IS_UNUSED != IS_UNUSED
17959 : } else {
17960 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
17961 : #endif
17962 : }
17963 : }
17964 :
17965 : static int zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
17966 0 : {
17967 0 : zend_op *opline = EX(opline);
17968 0 : zend_op *op_data = opline+1;
17969 : zend_free_op free_op_data1;
17970 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
17971 : zval *object;
17972 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
17973 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
17974 0 : znode *result = &opline->result;
17975 0 : zval **retval = &EX_T(result->u.var).var.ptr;
17976 0 : int have_get_ptr = 0;
17977 :
17978 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
17979 0 : make_real_object(object_ptr TSRMLS_CC);
17980 0 : object = *object_ptr;
17981 :
17982 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
17983 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
17984 :
17985 0 : FREE_OP(free_op_data1);
17986 :
17987 0 : if (!RETURN_VALUE_UNUSED(result)) {
17988 0 : *retval = EG(uninitialized_zval_ptr);
17989 0 : PZVAL_LOCK(*retval);
17990 : }
17991 : } else {
17992 : /* here we are sure we are dealing with an object */
17993 : if (0) {
17994 : MAKE_REAL_ZVAL_PTR(property);
17995 : }
17996 :
17997 : /* here property is a string */
17998 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
17999 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
18000 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
18001 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
18002 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
18003 :
18004 0 : have_get_ptr = 1;
18005 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
18006 0 : if (!RETURN_VALUE_UNUSED(result)) {
18007 0 : *retval = *zptr;
18008 0 : PZVAL_LOCK(*retval);
18009 : }
18010 : }
18011 : }
18012 :
18013 0 : if (!have_get_ptr) {
18014 0 : zval *z = NULL;
18015 :
18016 0 : switch (opline->extended_value) {
18017 : case ZEND_ASSIGN_OBJ:
18018 0 : if (Z_OBJ_HT_P(object)->read_property) {
18019 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
18020 : }
18021 0 : break;
18022 : case ZEND_ASSIGN_DIM:
18023 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
18024 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
18025 : }
18026 : break;
18027 : }
18028 0 : if (z) {
18029 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
18030 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
18031 :
18032 0 : if (z->refcount == 0) {
18033 0 : zval_dtor(z);
18034 0 : FREE_ZVAL(z);
18035 : }
18036 0 : z = value;
18037 : }
18038 0 : z->refcount++;
18039 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
18040 0 : binary_op(z, z, value TSRMLS_CC);
18041 0 : switch (opline->extended_value) {
18042 : case ZEND_ASSIGN_OBJ:
18043 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
18044 0 : break;
18045 : case ZEND_ASSIGN_DIM:
18046 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
18047 : break;
18048 : }
18049 0 : if (!RETURN_VALUE_UNUSED(result)) {
18050 0 : *retval = z;
18051 0 : PZVAL_LOCK(*retval);
18052 : }
18053 0 : zval_ptr_dtor(&z);
18054 : } else {
18055 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
18056 0 : if (!RETURN_VALUE_UNUSED(result)) {
18057 0 : *retval = EG(uninitialized_zval_ptr);
18058 0 : PZVAL_LOCK(*retval);
18059 : }
18060 : }
18061 : }
18062 :
18063 : if (0) {
18064 : zval_ptr_dtor(&property);
18065 : } else {
18066 :
18067 : }
18068 0 : FREE_OP(free_op_data1);
18069 : }
18070 :
18071 : /* assign_obj has two opcodes! */
18072 0 : ZEND_VM_INC_OPCODE();
18073 0 : ZEND_VM_NEXT_OPCODE();
18074 : }
18075 :
18076 : static int zend_binary_assign_op_helper_SPEC_UNUSED_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
18077 0 : {
18078 0 : zend_op *opline = EX(opline);
18079 : zend_free_op free_op_data2, free_op_data1;
18080 : zval **var_ptr;
18081 : zval *value;
18082 0 : zend_bool increment_opline = 0;
18083 :
18084 0 : switch (opline->extended_value) {
18085 : case ZEND_ASSIGN_OBJ:
18086 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18087 : break;
18088 : case ZEND_ASSIGN_DIM: {
18089 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
18090 :
18091 0 : if (object_ptr && IS_UNUSED != IS_CV && !0) {
18092 0 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
18093 : }
18094 :
18095 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
18096 0 : return zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18097 : } else {
18098 0 : zend_op *op_data = opline+1;
18099 0 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18100 :
18101 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), NULL, dim, 0, BP_VAR_RW TSRMLS_CC);
18102 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
18103 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
18104 0 : increment_opline = 1;
18105 : }
18106 : }
18107 0 : break;
18108 : default:
18109 0 : value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18110 0 : var_ptr = NULL;
18111 : /* do nothing */
18112 : break;
18113 : }
18114 :
18115 0 : if (!var_ptr) {
18116 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
18117 : }
18118 :
18119 0 : if (*var_ptr == EG(error_zval_ptr)) {
18120 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
18121 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
18122 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
18123 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18124 : }
18125 :
18126 :
18127 0 : if (increment_opline) {
18128 0 : ZEND_VM_INC_OPCODE();
18129 : }
18130 0 : ZEND_VM_NEXT_OPCODE();
18131 : }
18132 :
18133 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
18134 :
18135 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
18136 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
18137 : /* proxy object */
18138 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
18139 0 : objval->refcount++;
18140 0 : binary_op(objval, objval, value TSRMLS_CC);
18141 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
18142 0 : zval_ptr_dtor(&objval);
18143 : } else {
18144 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
18145 : }
18146 :
18147 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
18148 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
18149 0 : PZVAL_LOCK(*var_ptr);
18150 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18151 : }
18152 :
18153 0 : if (increment_opline) {
18154 0 : ZEND_VM_INC_OPCODE();
18155 0 : FREE_OP(free_op_data1);
18156 0 : FREE_OP_VAR_PTR(free_op_data2);
18157 : }
18158 :
18159 0 : ZEND_VM_NEXT_OPCODE();
18160 : }
18161 :
18162 : static int ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18163 0 : {
18164 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18165 : }
18166 :
18167 : static int ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18168 0 : {
18169 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18170 : }
18171 :
18172 : static int ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18173 0 : {
18174 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18175 : }
18176 :
18177 : static int ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18178 0 : {
18179 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18180 : }
18181 :
18182 : static int ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18183 0 : {
18184 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18185 : }
18186 :
18187 : static int ZEND_ASSIGN_SL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18188 0 : {
18189 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18190 : }
18191 :
18192 : static int ZEND_ASSIGN_SR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18193 0 : {
18194 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18195 : }
18196 :
18197 : static int ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18198 0 : {
18199 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18200 : }
18201 :
18202 : static int ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18203 0 : {
18204 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18205 : }
18206 :
18207 : static int ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18208 0 : {
18209 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18210 : }
18211 :
18212 : static int ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18213 0 : {
18214 0 : return zend_binary_assign_op_helper_SPEC_UNUSED_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18215 : }
18216 :
18217 : static int zend_pre_incdec_property_helper_SPEC_UNUSED_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
18218 0 : {
18219 0 : zend_op *opline = EX(opline);
18220 :
18221 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
18222 : zval *object;
18223 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18224 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
18225 0 : int have_get_ptr = 0;
18226 :
18227 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
18228 0 : object = *object_ptr;
18229 :
18230 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
18231 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
18232 :
18233 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
18234 0 : *retval = EG(uninitialized_zval_ptr);
18235 0 : PZVAL_LOCK(*retval);
18236 : }
18237 :
18238 0 : ZEND_VM_NEXT_OPCODE();
18239 : }
18240 :
18241 : /* here we are sure we are dealing with an object */
18242 :
18243 : if (0) {
18244 : MAKE_REAL_ZVAL_PTR(property);
18245 : }
18246 :
18247 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
18248 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
18249 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
18250 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
18251 :
18252 0 : have_get_ptr = 1;
18253 0 : incdec_op(*zptr);
18254 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
18255 0 : *retval = *zptr;
18256 0 : PZVAL_LOCK(*retval);
18257 : }
18258 : }
18259 : }
18260 :
18261 0 : if (!have_get_ptr) {
18262 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
18263 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
18264 :
18265 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
18266 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
18267 :
18268 0 : if (z->refcount == 0) {
18269 0 : zval_dtor(z);
18270 0 : FREE_ZVAL(z);
18271 : }
18272 0 : z = value;
18273 : }
18274 0 : z->refcount++;
18275 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
18276 0 : incdec_op(z);
18277 0 : *retval = z;
18278 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
18279 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
18280 0 : zval_ptr_dtor(&z);
18281 : } else {
18282 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
18283 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
18284 0 : *retval = EG(uninitialized_zval_ptr);
18285 0 : PZVAL_LOCK(*retval);
18286 : }
18287 : }
18288 : }
18289 :
18290 : if (0) {
18291 : zval_ptr_dtor(&property);
18292 : } else {
18293 :
18294 : }
18295 :
18296 0 : ZEND_VM_NEXT_OPCODE();
18297 : }
18298 :
18299 : static int ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18300 0 : {
18301 0 : return zend_pre_incdec_property_helper_SPEC_UNUSED_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18302 : }
18303 :
18304 : static int ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18305 0 : {
18306 0 : return zend_pre_incdec_property_helper_SPEC_UNUSED_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18307 : }
18308 :
18309 : static int zend_post_incdec_property_helper_SPEC_UNUSED_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
18310 0 : {
18311 0 : zend_op *opline = EX(opline);
18312 :
18313 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
18314 : zval *object;
18315 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18316 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
18317 0 : int have_get_ptr = 0;
18318 :
18319 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
18320 0 : object = *object_ptr;
18321 :
18322 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
18323 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
18324 :
18325 0 : *retval = *EG(uninitialized_zval_ptr);
18326 :
18327 0 : ZEND_VM_NEXT_OPCODE();
18328 : }
18329 :
18330 : /* here we are sure we are dealing with an object */
18331 :
18332 : if (0) {
18333 : MAKE_REAL_ZVAL_PTR(property);
18334 : }
18335 :
18336 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
18337 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
18338 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
18339 0 : have_get_ptr = 1;
18340 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
18341 :
18342 0 : *retval = **zptr;
18343 0 : zendi_zval_copy_ctor(*retval);
18344 :
18345 0 : incdec_op(*zptr);
18346 :
18347 : }
18348 : }
18349 :
18350 0 : if (!have_get_ptr) {
18351 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
18352 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
18353 : zval *z_copy;
18354 :
18355 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
18356 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
18357 :
18358 0 : if (z->refcount == 0) {
18359 0 : zval_dtor(z);
18360 0 : FREE_ZVAL(z);
18361 : }
18362 0 : z = value;
18363 : }
18364 0 : *retval = *z;
18365 0 : zendi_zval_copy_ctor(*retval);
18366 0 : ALLOC_ZVAL(z_copy);
18367 0 : *z_copy = *z;
18368 0 : zendi_zval_copy_ctor(*z_copy);
18369 0 : INIT_PZVAL(z_copy);
18370 0 : incdec_op(z_copy);
18371 0 : z->refcount++;
18372 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
18373 0 : zval_ptr_dtor(&z_copy);
18374 0 : zval_ptr_dtor(&z);
18375 : } else {
18376 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
18377 0 : *retval = *EG(uninitialized_zval_ptr);
18378 : }
18379 : }
18380 :
18381 : if (0) {
18382 : zval_ptr_dtor(&property);
18383 : } else {
18384 :
18385 : }
18386 :
18387 0 : ZEND_VM_NEXT_OPCODE();
18388 : }
18389 :
18390 : static int ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18391 0 : {
18392 0 : return zend_post_incdec_property_helper_SPEC_UNUSED_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18393 : }
18394 :
18395 : static int ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18396 0 : {
18397 0 : return zend_post_incdec_property_helper_SPEC_UNUSED_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18398 : }
18399 :
18400 : static int zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(int type, ZEND_OPCODE_HANDLER_ARGS)
18401 0 : {
18402 0 : zend_op *opline = EX(opline);
18403 : zval *container;
18404 : zval **retval;
18405 :
18406 :
18407 0 : retval = &EX_T(opline->result.u.var).var.ptr;
18408 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
18409 :
18410 0 : container = _get_obj_zval_ptr_unused(TSRMLS_C);
18411 :
18412 0 : if (container == EG(error_zval_ptr)) {
18413 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
18414 0 : *retval = EG(error_zval_ptr);
18415 0 : PZVAL_LOCK(*retval);
18416 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18417 : }
18418 :
18419 0 : ZEND_VM_NEXT_OPCODE();
18420 : }
18421 :
18422 :
18423 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
18424 0 : if (type != BP_VAR_IS) {
18425 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
18426 : }
18427 0 : *retval = EG(uninitialized_zval_ptr);
18428 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
18429 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18430 : } else {
18431 :
18432 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18433 :
18434 : if (0) {
18435 : MAKE_REAL_ZVAL_PTR(offset);
18436 : }
18437 :
18438 : /* here we are sure we are dealing with an object */
18439 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
18440 :
18441 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
18442 0 : zval_dtor(*retval);
18443 0 : FREE_ZVAL(*retval);
18444 : } else {
18445 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
18446 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18447 : }
18448 :
18449 : if (0) {
18450 : zval_ptr_dtor(&offset);
18451 : } else {
18452 :
18453 : }
18454 : }
18455 :
18456 0 : ZEND_VM_NEXT_OPCODE();
18457 : }
18458 :
18459 : static int ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18460 0 : {
18461 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18462 : }
18463 :
18464 : static int ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18465 0 : {
18466 0 : zend_op *opline = EX(opline);
18467 : zend_free_op free_op1;
18468 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18469 :
18470 0 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_UNUSED != IS_CV) {
18471 0 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
18472 0 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
18473 : }
18474 :
18475 : if (0) {
18476 : MAKE_REAL_ZVAL_PTR(property);
18477 : }
18478 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
18479 : if (0) {
18480 : zval_ptr_dtor(&property);
18481 : } else {
18482 :
18483 : }
18484 : if (IS_UNUSED == IS_VAR && 0 &&
18485 : READY_TO_DESTROY(free_op1.var) &&
18486 : !RETURN_VALUE_UNUSED(&opline->result)) {
18487 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18488 : }
18489 :
18490 0 : ZEND_VM_NEXT_OPCODE();
18491 : }
18492 :
18493 : static int ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18494 0 : {
18495 0 : zend_op *opline = EX(opline);
18496 : zend_free_op free_op1;
18497 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18498 :
18499 : if (0) {
18500 : MAKE_REAL_ZVAL_PTR(property);
18501 : }
18502 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_RW TSRMLS_CC);
18503 : if (0) {
18504 : zval_ptr_dtor(&property);
18505 : } else {
18506 :
18507 : }
18508 : if (IS_UNUSED == IS_VAR && 0 &&
18509 : READY_TO_DESTROY(free_op1.var) &&
18510 : !RETURN_VALUE_UNUSED(&opline->result)) {
18511 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18512 : }
18513 :
18514 0 : ZEND_VM_NEXT_OPCODE();
18515 : }
18516 :
18517 : static int ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18518 0 : {
18519 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18520 : }
18521 :
18522 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18523 0 : {
18524 0 : zend_op *opline = EX(opline);
18525 :
18526 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
18527 : /* Behave like FETCH_OBJ_W */
18528 : zend_free_op free_op1;
18529 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18530 :
18531 : if (0) {
18532 : MAKE_REAL_ZVAL_PTR(property);
18533 : }
18534 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_obj_zval_ptr_ptr_unused(TSRMLS_C), property, BP_VAR_W TSRMLS_CC);
18535 : if (0) {
18536 : zval_ptr_dtor(&property);
18537 : } else {
18538 :
18539 : }
18540 : if (IS_UNUSED == IS_VAR && 0 &&
18541 : READY_TO_DESTROY(free_op1.var) &&
18542 : !RETURN_VALUE_UNUSED(&opline->result)) {
18543 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18544 : }
18545 :
18546 0 : ZEND_VM_NEXT_OPCODE();
18547 : } else {
18548 0 : return zend_fetch_property_address_read_helper_SPEC_UNUSED_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18549 : }
18550 : }
18551 :
18552 : static int ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18553 0 : {
18554 0 : zend_op *opline = EX(opline);
18555 : zend_free_op free_op1, free_res;
18556 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
18557 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18558 :
18559 : if (IS_UNUSED == IS_CV) {
18560 : if (container != &EG(uninitialized_zval_ptr)) {
18561 : SEPARATE_ZVAL_IF_NOT_REF(container);
18562 : }
18563 : }
18564 : if (0) {
18565 : MAKE_REAL_ZVAL_PTR(property);
18566 : }
18567 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
18568 : if (0) {
18569 : zval_ptr_dtor(&property);
18570 : } else {
18571 :
18572 : }
18573 : if (IS_UNUSED == IS_VAR && 0 &&
18574 : READY_TO_DESTROY(free_op1.var) &&
18575 : !RETURN_VALUE_UNUSED(&opline->result)) {
18576 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18577 : }
18578 :
18579 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
18580 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
18581 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
18582 : }
18583 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
18584 0 : FREE_OP_VAR_PTR(free_res);
18585 0 : ZEND_VM_NEXT_OPCODE();
18586 : }
18587 :
18588 : static int ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18589 0 : {
18590 0 : zend_op *opline = EX(opline);
18591 0 : zend_op *op_data = opline+1;
18592 :
18593 0 : zval **object_ptr = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
18594 :
18595 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
18596 :
18597 : /* assign_obj has two opcodes! */
18598 0 : ZEND_VM_INC_OPCODE();
18599 0 : ZEND_VM_NEXT_OPCODE();
18600 : }
18601 :
18602 : static int ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18603 0 : {
18604 0 : zend_op *opline = EX(opline);
18605 : zval *function_name;
18606 : char *function_name_strval;
18607 : int function_name_strlen;
18608 :
18609 :
18610 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
18611 :
18612 0 : function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18613 :
18614 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
18615 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
18616 : }
18617 :
18618 0 : function_name_strval = Z_STRVAL_P(function_name);
18619 0 : function_name_strlen = Z_STRLEN_P(function_name);
18620 :
18621 0 : EX(object) = _get_obj_zval_ptr_unused(TSRMLS_C);
18622 :
18623 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
18624 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
18625 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
18626 : }
18627 :
18628 : /* First, locate the function. */
18629 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
18630 0 : if (!EX(fbc)) {
18631 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
18632 : }
18633 : } else {
18634 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
18635 : }
18636 :
18637 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
18638 0 : EX(object) = NULL;
18639 : } else {
18640 0 : if (!PZVAL_IS_REF(EX(object))) {
18641 0 : EX(object)->refcount++; /* For $this pointer */
18642 : } else {
18643 : zval *this_ptr;
18644 0 : ALLOC_ZVAL(this_ptr);
18645 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
18646 0 : zval_copy_ctor(this_ptr);
18647 0 : EX(object) = this_ptr;
18648 : }
18649 : }
18650 :
18651 :
18652 0 : ZEND_VM_NEXT_OPCODE();
18653 : }
18654 :
18655 : static int ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18656 0 : {
18657 0 : zend_op *opline = EX(opline);
18658 :
18659 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
18660 : if (IS_UNUSED == IS_UNUSED) {
18661 0 : ZEND_VM_NEXT_OPCODE();
18662 : #if 0 || IS_UNUSED != IS_UNUSED
18663 : } else {
18664 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18665 : #endif
18666 : }
18667 : }
18668 :
18669 : static int ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18670 0 : {
18671 0 : zend_op *opline = EX(opline);
18672 :
18673 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
18674 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18675 : long index;
18676 :
18677 0 : if (container) {
18678 : if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
18679 : SEPARATE_ZVAL_IF_NOT_REF(container);
18680 : }
18681 0 : switch (Z_TYPE_PP(container)) {
18682 : case IS_ARRAY: {
18683 0 : HashTable *ht = Z_ARRVAL_PP(container);
18684 :
18685 0 : switch (Z_TYPE_P(offset)) {
18686 : case IS_DOUBLE:
18687 0 : index = (long) Z_DVAL_P(offset);
18688 0 : zend_hash_index_del(ht, index);
18689 0 : break;
18690 : case IS_RESOURCE:
18691 : case IS_BOOL:
18692 : case IS_LONG:
18693 0 : index = Z_LVAL_P(offset);
18694 0 : zend_hash_index_del(ht, index);
18695 0 : break;
18696 : case IS_STRING:
18697 : if (IS_CV == IS_CV || IS_CV == IS_VAR) {
18698 0 : offset->refcount++;
18699 : }
18700 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
18701 : ht == &EG(symbol_table)) {
18702 : zend_execute_data *ex;
18703 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
18704 :
18705 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
18706 0 : if (ex->op_array && ex->symbol_table == ht) {
18707 : int i;
18708 :
18709 0 : for (i = 0; i < ex->op_array->last_var; i++) {
18710 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
18711 : ex->op_array->vars[i].name_len == offset->value.str.len &&
18712 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
18713 0 : ex->CVs[i] = NULL;
18714 0 : break;
18715 : }
18716 : }
18717 : }
18718 : }
18719 : }
18720 : if (IS_CV == IS_CV || IS_CV == IS_VAR) {
18721 0 : zval_ptr_dtor(&offset);
18722 : }
18723 0 : break;
18724 : case IS_NULL:
18725 0 : zend_hash_del(ht, "", sizeof(""));
18726 0 : break;
18727 : default:
18728 0 : zend_error(E_WARNING, "Illegal offset type in unset");
18729 : break;
18730 : }
18731 :
18732 0 : break;
18733 : }
18734 : case IS_OBJECT:
18735 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
18736 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
18737 : }
18738 : if (0) {
18739 : MAKE_REAL_ZVAL_PTR(offset);
18740 : }
18741 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
18742 : if (0) {
18743 : zval_ptr_dtor(&offset);
18744 : } else {
18745 :
18746 : }
18747 0 : break;
18748 : case IS_STRING:
18749 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
18750 : ZEND_VM_CONTINUE(); /* bailed out before */
18751 : default:
18752 :
18753 : break;
18754 : }
18755 : } else {
18756 :
18757 : }
18758 :
18759 0 : ZEND_VM_NEXT_OPCODE();
18760 : }
18761 :
18762 : static int ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18763 0 : {
18764 0 : zend_op *opline = EX(opline);
18765 :
18766 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
18767 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18768 :
18769 0 : if (container) {
18770 : if (IS_UNUSED == IS_CV && container != &EG(uninitialized_zval_ptr)) {
18771 : SEPARATE_ZVAL_IF_NOT_REF(container);
18772 : }
18773 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
18774 : if (0) {
18775 : MAKE_REAL_ZVAL_PTR(offset);
18776 : }
18777 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
18778 : if (0) {
18779 : zval_ptr_dtor(&offset);
18780 : } else {
18781 :
18782 : }
18783 : } else {
18784 :
18785 : }
18786 : } else {
18787 :
18788 : }
18789 :
18790 0 : ZEND_VM_NEXT_OPCODE();
18791 : }
18792 :
18793 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
18794 0 : {
18795 0 : zend_op *opline = EX(opline);
18796 :
18797 0 : zval **container = _get_obj_zval_ptr_ptr_unused(TSRMLS_C);
18798 0 : zval **value = NULL;
18799 0 : int result = 0;
18800 : long index;
18801 :
18802 0 : if (container) {
18803 :
18804 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
18805 :
18806 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
18807 : HashTable *ht;
18808 0 : int isset = 0;
18809 :
18810 0 : ht = Z_ARRVAL_PP(container);
18811 :
18812 0 : switch (Z_TYPE_P(offset)) {
18813 : case IS_DOUBLE:
18814 0 : index = (long) Z_DVAL_P(offset);
18815 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
18816 0 : isset = 1;
18817 : }
18818 0 : break;
18819 : case IS_RESOURCE:
18820 : case IS_BOOL:
18821 : case IS_LONG:
18822 0 : index = Z_LVAL_P(offset);
18823 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
18824 0 : isset = 1;
18825 : }
18826 0 : break;
18827 : case IS_STRING:
18828 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
18829 0 : isset = 1;
18830 : }
18831 0 : break;
18832 : case IS_NULL:
18833 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
18834 0 : isset = 1;
18835 : }
18836 0 : break;
18837 : default:
18838 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
18839 :
18840 : break;
18841 : }
18842 :
18843 0 : switch (opline->extended_value) {
18844 : case ZEND_ISSET:
18845 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
18846 0 : result = 0;
18847 : } else {
18848 0 : result = isset;
18849 : }
18850 0 : break;
18851 : case ZEND_ISEMPTY:
18852 0 : if (!isset || !i_zend_is_true(*value)) {
18853 0 : result = 0;
18854 : } else {
18855 0 : result = 1;
18856 : }
18857 : break;
18858 : }
18859 :
18860 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
18861 : if (0) {
18862 : MAKE_REAL_ZVAL_PTR(offset);
18863 : }
18864 0 : if (prop_dim) {
18865 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
18866 : } else {
18867 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
18868 : }
18869 : if (0) {
18870 : zval_ptr_dtor(&offset);
18871 : } else {
18872 :
18873 : }
18874 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
18875 : zval tmp;
18876 :
18877 0 : if (Z_TYPE_P(offset) != IS_LONG) {
18878 0 : tmp = *offset;
18879 0 : zval_copy_ctor(&tmp);
18880 0 : convert_to_long(&tmp);
18881 0 : offset = &tmp;
18882 : }
18883 0 : if (Z_TYPE_P(offset) == IS_LONG) {
18884 0 : switch (opline->extended_value) {
18885 : case ZEND_ISSET:
18886 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
18887 0 : result = 1;
18888 : }
18889 0 : break;
18890 : case ZEND_ISEMPTY:
18891 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
18892 0 : result = 1;
18893 : }
18894 : break;
18895 : }
18896 : }
18897 :
18898 : } else {
18899 :
18900 : }
18901 : }
18902 :
18903 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
18904 :
18905 0 : switch (opline->extended_value) {
18906 : case ZEND_ISSET:
18907 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
18908 0 : break;
18909 : case ZEND_ISEMPTY:
18910 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
18911 : break;
18912 : }
18913 :
18914 0 : ZEND_VM_NEXT_OPCODE();
18915 : }
18916 :
18917 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18918 0 : {
18919 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18920 : }
18921 :
18922 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18923 0 : {
18924 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_UNUSED_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
18925 : }
18926 :
18927 : static int ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18928 0 : {
18929 0 : zend_op *opline = EX(opline);
18930 :
18931 :
18932 0 : bitwise_not_function(&EX_T(opline->result.u.var).tmp_var,
18933 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
18934 :
18935 0 : ZEND_VM_NEXT_OPCODE();
18936 : }
18937 :
18938 : static int ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18939 4569 : {
18940 4569 : zend_op *opline = EX(opline);
18941 :
18942 :
18943 4569 : boolean_not_function(&EX_T(opline->result.u.var).tmp_var,
18944 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
18945 :
18946 4569 : ZEND_VM_NEXT_OPCODE();
18947 : }
18948 :
18949 : static int ZEND_PRE_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18950 5047 : {
18951 5047 : zend_op *opline = EX(opline);
18952 :
18953 5047 : zval **var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
18954 :
18955 5047 : if (!var_ptr) {
18956 0 : zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
18957 : }
18958 5047 : if (*var_ptr == EG(error_zval_ptr)) {
18959 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
18960 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
18961 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
18962 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18963 : }
18964 :
18965 0 : ZEND_VM_NEXT_OPCODE();
18966 : }
18967 :
18968 5047 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
18969 :
18970 5047 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
18971 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
18972 : /* proxy object */
18973 0 : zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
18974 0 : val->refcount++;
18975 0 : increment_function(val);
18976 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
18977 0 : zval_ptr_dtor(&val);
18978 : } else {
18979 5047 : increment_function(*var_ptr);
18980 : }
18981 :
18982 5047 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
18983 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
18984 0 : PZVAL_LOCK(*var_ptr);
18985 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
18986 : }
18987 :
18988 5047 : ZEND_VM_NEXT_OPCODE();
18989 : }
18990 :
18991 : static int ZEND_PRE_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18992 10850 : {
18993 10850 : zend_op *opline = EX(opline);
18994 :
18995 10850 : zval **var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
18996 :
18997 10850 : if (!var_ptr) {
18998 0 : zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
18999 : }
19000 10850 : if (*var_ptr == EG(error_zval_ptr)) {
19001 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
19002 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
19003 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
19004 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
19005 : }
19006 :
19007 0 : ZEND_VM_NEXT_OPCODE();
19008 : }
19009 :
19010 10850 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
19011 :
19012 10850 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
19013 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
19014 : /* proxy object */
19015 0 : zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
19016 0 : val->refcount++;
19017 0 : decrement_function(val);
19018 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
19019 0 : zval_ptr_dtor(&val);
19020 : } else {
19021 10850 : decrement_function(*var_ptr);
19022 : }
19023 :
19024 10850 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
19025 10850 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
19026 10850 : PZVAL_LOCK(*var_ptr);
19027 10850 : AI_USE_PTR(EX_T(opline->result.u.var).var);
19028 : }
19029 :
19030 10850 : ZEND_VM_NEXT_OPCODE();
19031 : }
19032 :
19033 : static int ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19034 23771 : {
19035 23771 : zend_op *opline = EX(opline);
19036 :
19037 23771 : zval **var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
19038 :
19039 23771 : if (!var_ptr) {
19040 0 : zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
19041 : }
19042 23771 : if (*var_ptr == EG(error_zval_ptr)) {
19043 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
19044 0 : EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr);
19045 : }
19046 :
19047 0 : ZEND_VM_NEXT_OPCODE();
19048 : }
19049 :
19050 23771 : EX_T(opline->result.u.var).tmp_var = **var_ptr;
19051 23771 : zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var);
19052 :
19053 23771 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
19054 :
19055 23771 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
19056 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
19057 : /* proxy object */
19058 0 : zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
19059 0 : val->refcount++;
19060 0 : increment_function(val);
19061 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
19062 0 : zval_ptr_dtor(&val);
19063 : } else {
19064 23771 : increment_function(*var_ptr);
19065 : }
19066 :
19067 23771 : ZEND_VM_NEXT_OPCODE();
19068 : }
19069 :
19070 : static int ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19071 20164 : {
19072 20164 : zend_op *opline = EX(opline);
19073 :
19074 20164 : zval **var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
19075 :
19076 20164 : if (!var_ptr) {
19077 0 : zend_error_noreturn(E_ERROR, "Cannot increment/decrement overloaded objects nor string offsets");
19078 : }
19079 20164 : if (*var_ptr == EG(error_zval_ptr)) {
19080 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
19081 0 : EX_T(opline->result.u.var).tmp_var = *EG(uninitialized_zval_ptr);
19082 : }
19083 :
19084 0 : ZEND_VM_NEXT_OPCODE();
19085 : }
19086 :
19087 20164 : EX_T(opline->result.u.var).tmp_var = **var_ptr;
19088 20164 : zendi_zval_copy_ctor(EX_T(opline->result.u.var).tmp_var);
19089 :
19090 20164 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
19091 :
19092 20164 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
19093 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
19094 : /* proxy object */
19095 0 : zval *val = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
19096 0 : val->refcount++;
19097 0 : decrement_function(val);
19098 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, val TSRMLS_CC);
19099 0 : zval_ptr_dtor(&val);
19100 : } else {
19101 20164 : decrement_function(*var_ptr);
19102 : }
19103 :
19104 20164 : ZEND_VM_NEXT_OPCODE();
19105 : }
19106 :
19107 : static int ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19108 6 : {
19109 6 : zend_op *opline = EX(opline);
19110 :
19111 : zval z_copy;
19112 6 : zval *z = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19113 :
19114 12 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get_method != NULL &&
19115 : zend_std_cast_object_tostring(z, &z_copy, IS_STRING TSRMLS_CC) == SUCCESS) {
19116 6 : zend_print_variable(&z_copy);
19117 6 : zval_dtor(&z_copy);
19118 : } else {
19119 0 : zend_print_variable(z);
19120 : }
19121 :
19122 6 : ZEND_VM_NEXT_OPCODE();
19123 : }
19124 :
19125 : static int ZEND_PRINT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19126 0 : {
19127 0 : zend_op *opline = EX(opline);
19128 :
19129 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1;
19130 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_LONG;
19131 :
19132 0 : return ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19133 : }
19134 :
19135 : static int zend_fetch_var_address_helper_SPEC_CV(int type, ZEND_OPCODE_HANDLER_ARGS)
19136 0 : {
19137 0 : zend_op *opline = EX(opline);
19138 : zend_free_op free_op1;
19139 0 : zval *varname = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19140 : zval **retval;
19141 : zval tmp_varname;
19142 : HashTable *target_symbol_table;
19143 :
19144 0 : if (Z_TYPE_P(varname) != IS_STRING) {
19145 0 : tmp_varname = *varname;
19146 0 : zval_copy_ctor(&tmp_varname);
19147 0 : convert_to_string(&tmp_varname);
19148 0 : varname = &tmp_varname;
19149 : }
19150 :
19151 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
19152 0 : retval = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 0 TSRMLS_CC);
19153 : } else {
19154 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), type, varname TSRMLS_CC);
19155 : /*
19156 : if (!target_symbol_table) {
19157 : ZEND_VM_NEXT_OPCODE();
19158 : }
19159 : */
19160 0 : if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &retval) == FAILURE) {
19161 0 : switch (type) {
19162 : case BP_VAR_R:
19163 : case BP_VAR_UNSET:
19164 0 : zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
19165 : /* break missing intentionally */
19166 : case BP_VAR_IS:
19167 0 : retval = &EG(uninitialized_zval_ptr);
19168 0 : break;
19169 : case BP_VAR_RW:
19170 0 : zend_error(E_NOTICE,"Undefined variable: %s", Z_STRVAL_P(varname));
19171 : /* break missing intentionally */
19172 : case BP_VAR_W: {
19173 0 : zval *new_zval = &EG(uninitialized_zval);
19174 :
19175 0 : new_zval->refcount++;
19176 0 : zend_hash_update(target_symbol_table, varname->value.str.val, varname->value.str.len+1, &new_zval, sizeof(zval *), (void **) &retval);
19177 : }
19178 : break;
19179 : EMPTY_SWITCH_DEFAULT_CASE()
19180 : }
19181 : }
19182 0 : switch (opline->op2.u.EA.type) {
19183 : case ZEND_FETCH_GLOBAL:
19184 : if (IS_CV != IS_TMP_VAR) {
19185 :
19186 : }
19187 0 : break;
19188 : case ZEND_FETCH_LOCAL:
19189 :
19190 0 : break;
19191 : case ZEND_FETCH_STATIC:
19192 0 : zval_update_constant(retval, (void*) 1 TSRMLS_CC);
19193 : break;
19194 : case ZEND_FETCH_GLOBAL_LOCK:
19195 : if (IS_CV == IS_VAR && !free_op1.var) {
19196 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
19197 : }
19198 : break;
19199 : }
19200 : }
19201 :
19202 :
19203 0 : if (varname == &tmp_varname) {
19204 0 : zval_dtor(varname);
19205 : }
19206 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
19207 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
19208 0 : PZVAL_LOCK(*retval);
19209 0 : switch (type) {
19210 : case BP_VAR_R:
19211 : case BP_VAR_IS:
19212 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
19213 0 : break;
19214 : case BP_VAR_UNSET: {
19215 : zend_free_op free_res;
19216 :
19217 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
19218 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
19219 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
19220 : }
19221 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
19222 0 : FREE_OP_VAR_PTR(free_res);
19223 : break;
19224 : }
19225 : }
19226 : }
19227 0 : ZEND_VM_NEXT_OPCODE();
19228 : }
19229 :
19230 : static int ZEND_FETCH_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19231 0 : {
19232 0 : return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19233 : }
19234 :
19235 : static int ZEND_FETCH_W_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19236 0 : {
19237 0 : return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_W, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19238 : }
19239 :
19240 : static int ZEND_FETCH_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19241 0 : {
19242 0 : return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_RW, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19243 : }
19244 :
19245 : static int ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19246 0 : {
19247 0 : return zend_fetch_var_address_helper_SPEC_CV(ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), EX(opline)->extended_value)?BP_VAR_W:BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19248 : }
19249 :
19250 : static int ZEND_FETCH_UNSET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19251 0 : {
19252 0 : return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_UNSET, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19253 : }
19254 :
19255 : static int ZEND_FETCH_IS_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19256 0 : {
19257 0 : return zend_fetch_var_address_helper_SPEC_CV(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19258 : }
19259 :
19260 : static int ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19261 18015 : {
19262 18015 : zend_op *opline = EX(opline);
19263 :
19264 18015 : int ret = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC));
19265 :
19266 18015 : if (!ret) {
19267 : #if DEBUG_ZEND>=2
19268 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
19269 : #endif
19270 2968 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
19271 : }
19272 :
19273 15047 : ZEND_VM_NEXT_OPCODE();
19274 : }
19275 :
19276 : static int ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19277 0 : {
19278 0 : zend_op *opline = EX(opline);
19279 :
19280 0 : int ret = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC));
19281 :
19282 0 : if (ret) {
19283 : #if DEBUG_ZEND>=2
19284 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
19285 : #endif
19286 0 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
19287 : }
19288 :
19289 0 : ZEND_VM_NEXT_OPCODE();
19290 : }
19291 :
19292 : static int ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19293 10 : {
19294 10 : zend_op *opline = EX(opline);
19295 :
19296 10 : int retval = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC));
19297 :
19298 10 : if (retval) {
19299 : #if DEBUG_ZEND>=2
19300 : printf("Conditional jmp on true to %d\n", opline->extended_value);
19301 : #endif
19302 8 : ZEND_VM_JMP(&EX(op_array)->opcodes[opline->extended_value]);
19303 : } else {
19304 : #if DEBUG_ZEND>=2
19305 : printf("Conditional jmp on false to %d\n", opline->op2.u.opline_num);
19306 : #endif
19307 2 : ZEND_VM_JMP(&EX(op_array)->opcodes[opline->op2.u.opline_num]);
19308 : }
19309 : }
19310 :
19311 : static int ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19312 4695 : {
19313 4695 : zend_op *opline = EX(opline);
19314 :
19315 4695 : int retval = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC));
19316 :
19317 4695 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval;
19318 4695 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
19319 4695 : if (!retval) {
19320 : #if DEBUG_ZEND>=2
19321 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
19322 : #endif
19323 2987 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
19324 : }
19325 1708 : ZEND_VM_NEXT_OPCODE();
19326 : }
19327 :
19328 : static int ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19329 13 : {
19330 13 : zend_op *opline = EX(opline);
19331 :
19332 13 : int retval = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC));
19333 :
19334 13 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = retval;
19335 13 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
19336 13 : if (retval) {
19337 : #if DEBUG_ZEND>=2
19338 : printf("Conditional jmp to %d\n", opline->op2.u.opline_num);
19339 : #endif
19340 0 : ZEND_VM_JMP(opline->op2.u.jmp_addr);
19341 : }
19342 13 : ZEND_VM_NEXT_OPCODE();
19343 : }
19344 :
19345 : static int ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19346 12837 : {
19347 12837 : zend_op *opline = EX(opline);
19348 : zval *retval_ptr;
19349 : zval **retval_ptr_ptr;
19350 :
19351 :
19352 12837 : if (EG(active_op_array)->return_reference == ZEND_RETURN_REF) {
19353 :
19354 : if (IS_CV == IS_CONST || IS_CV == IS_TMP_VAR) {
19355 : /* Not supposed to happen, but we'll allow it */
19356 : zend_error(E_NOTICE, "Only variable references should be returned by reference");
19357 : goto return_by_value;
19358 : }
19359 :
19360 0 : retval_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
19361 :
19362 0 : if (!retval_ptr_ptr) {
19363 0 : zend_error_noreturn(E_ERROR, "Cannot return string offsets by reference");
19364 : }
19365 :
19366 : if (IS_CV == IS_VAR && !(*retval_ptr_ptr)->is_ref) {
19367 : if (opline->extended_value == ZEND_RETURNS_FUNCTION &&
19368 : EX_T(opline->op1.u.var).var.fcall_returned_reference) {
19369 : } else if (EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) {
19370 : if (IS_CV == IS_VAR && !0) {
19371 : PZVAL_LOCK(*retval_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
19372 : }
19373 : zend_error(E_NOTICE, "Only variable references should be returned by reference");
19374 : goto return_by_value;
19375 : }
19376 : }
19377 :
19378 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(retval_ptr_ptr);
19379 0 : (*retval_ptr_ptr)->refcount++;
19380 :
19381 0 : (*EG(return_value_ptr_ptr)) = (*retval_ptr_ptr);
19382 : } else {
19383 12837 : return_by_value:
19384 :
19385 12837 : retval_ptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19386 :
19387 12837 : if (EG(ze1_compatibility_mode) && Z_TYPE_P(retval_ptr) == IS_OBJECT) {
19388 : zval *ret;
19389 : char *class_name;
19390 : zend_uint class_name_len;
19391 : int dup;
19392 :
19393 0 : ALLOC_ZVAL(ret);
19394 0 : INIT_PZVAL_COPY(ret, retval_ptr);
19395 0 : dup = zend_get_object_classname(retval_ptr, &class_name, &class_name_len TSRMLS_CC);
19396 0 : if (Z_OBJ_HT_P(retval_ptr)->clone_obj == NULL) {
19397 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", class_name);
19398 : }
19399 0 : zend_error(E_STRICT, "Implicit cloning object of class '%s' because of 'zend.ze1_compatibility_mode'", class_name);
19400 0 : ret->value.obj = Z_OBJ_HT_P(retval_ptr)->clone_obj(retval_ptr TSRMLS_CC);
19401 0 : *EG(return_value_ptr_ptr) = ret;
19402 0 : if (!dup) {
19403 0 : efree(class_name);
19404 : }
19405 : } else if (!0) { /* Not a temp var */
19406 12837 : if (EG(active_op_array)->return_reference == ZEND_RETURN_REF ||
19407 : (PZVAL_IS_REF(retval_ptr) && retval_ptr->refcount > 0)) {
19408 : zval *ret;
19409 :
19410 0 : ALLOC_ZVAL(ret);
19411 0 : INIT_PZVAL_COPY(ret, retval_ptr);
19412 0 : zval_copy_ctor(ret);
19413 0 : *EG(return_value_ptr_ptr) = ret;
19414 : } else {
19415 12837 : *EG(return_value_ptr_ptr) = retval_ptr;
19416 12837 : retval_ptr->refcount++;
19417 : }
19418 : } else {
19419 : zval *ret;
19420 :
19421 : ALLOC_ZVAL(ret);
19422 : INIT_PZVAL_COPY(ret, retval_ptr);
19423 : *EG(return_value_ptr_ptr) = ret;
19424 : }
19425 : }
19426 :
19427 12837 : ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
19428 : }
19429 :
19430 : static int ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19431 0 : {
19432 0 : zend_op *opline = EX(opline);
19433 : zval *value;
19434 : zval *exception;
19435 :
19436 :
19437 0 : value = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19438 :
19439 0 : if (Z_TYPE_P(value) != IS_OBJECT) {
19440 0 : zend_error_noreturn(E_ERROR, "Can only throw objects");
19441 : }
19442 : /* Not sure if a complete copy is what we want here */
19443 0 : ALLOC_ZVAL(exception);
19444 0 : INIT_PZVAL_COPY(exception, value);
19445 : if (!0) {
19446 0 : zval_copy_ctor(exception);
19447 : }
19448 :
19449 0 : zend_throw_exception_object(exception TSRMLS_CC);
19450 :
19451 0 : ZEND_VM_NEXT_OPCODE();
19452 : }
19453 :
19454 : static int ZEND_SEND_VAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19455 0 : {
19456 0 : zend_op *opline = EX(opline);
19457 0 : if (opline->extended_value==ZEND_DO_FCALL_BY_NAME
19458 : && ARG_MUST_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
19459 0 : zend_error_noreturn(E_ERROR, "Cannot pass parameter %d by reference", opline->op2.u.opline_num);
19460 : }
19461 : {
19462 : zval *valptr;
19463 : zval *value;
19464 :
19465 :
19466 0 : value = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19467 :
19468 0 : ALLOC_ZVAL(valptr);
19469 0 : INIT_PZVAL_COPY(valptr, value);
19470 : if (!0) {
19471 0 : zval_copy_ctor(valptr);
19472 : }
19473 0 : zend_ptr_stack_push(&EG(argument_stack), valptr);
19474 :
19475 : }
19476 0 : ZEND_VM_NEXT_OPCODE();
19477 : }
19478 :
19479 : static int zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS)
19480 169964 : {
19481 169964 : zend_op *opline = EX(opline);
19482 : zval *varptr;
19483 :
19484 169964 : varptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19485 :
19486 169964 : if (varptr == &EG(uninitialized_zval)) {
19487 0 : ALLOC_ZVAL(varptr);
19488 0 : INIT_ZVAL(*varptr);
19489 0 : varptr->refcount = 0;
19490 169964 : } else if (PZVAL_IS_REF(varptr)) {
19491 575 : zval *original_var = varptr;
19492 :
19493 575 : ALLOC_ZVAL(varptr);
19494 575 : *varptr = *original_var;
19495 575 : varptr->is_ref = 0;
19496 575 : varptr->refcount = 0;
19497 575 : zval_copy_ctor(varptr);
19498 : }
19499 169964 : varptr->refcount++;
19500 169964 : zend_ptr_stack_push(&EG(argument_stack), varptr);
19501 : ; /* for string offsets */
19502 :
19503 169964 : ZEND_VM_NEXT_OPCODE();
19504 : }
19505 :
19506 : static int ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19507 0 : {
19508 0 : zend_op *opline = EX(opline);
19509 : zend_free_op free_op1;
19510 : zval *varptr;
19511 :
19512 0 : if (opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) { /* Had function_ptr at compile_time */
19513 0 : if (!(opline->extended_value & ZEND_ARG_SEND_BY_REF)) {
19514 0 : return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19515 : }
19516 0 : } else if (!ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
19517 0 : return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19518 : }
19519 :
19520 : if (IS_CV == IS_VAR &&
19521 : (opline->extended_value & ZEND_ARG_SEND_FUNCTION) &&
19522 : EX_T(opline->op1.u.var).var.fcall_returned_reference &&
19523 : EX_T(opline->op1.u.var).var.ptr) {
19524 : varptr = EX_T(opline->op1.u.var).var.ptr;
19525 : PZVAL_UNLOCK_EX(varptr, &free_op1, 0);
19526 : } else {
19527 0 : varptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19528 : }
19529 0 : if ((!(opline->extended_value & ZEND_ARG_SEND_FUNCTION) ||
19530 : EX_T(opline->op1.u.var).var.fcall_returned_reference) &&
19531 : varptr != &EG(uninitialized_zval) &&
19532 : (PZVAL_IS_REF(varptr) ||
19533 : (varptr->refcount == 1 && (IS_CV == IS_CV || free_op1.var)))) {
19534 0 : varptr->is_ref = 1;
19535 0 : varptr->refcount++;
19536 0 : zend_ptr_stack_push(&EG(argument_stack), varptr);
19537 : } else {
19538 : zval *valptr;
19539 :
19540 0 : zend_error(E_STRICT, "Only variables should be passed by reference");
19541 0 : ALLOC_ZVAL(valptr);
19542 0 : INIT_PZVAL_COPY(valptr, varptr);
19543 : if (!0) {
19544 0 : zval_copy_ctor(valptr);
19545 : }
19546 0 : zend_ptr_stack_push(&EG(argument_stack), valptr);
19547 : }
19548 :
19549 0 : ZEND_VM_NEXT_OPCODE();
19550 : }
19551 :
19552 : static int ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19553 8743 : {
19554 8743 : zend_op *opline = EX(opline);
19555 :
19556 : zval **varptr_ptr;
19557 : zval *varptr;
19558 8743 : varptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
19559 :
19560 8743 : if (!varptr_ptr) {
19561 0 : zend_error_noreturn(E_ERROR, "Only variables can be passed by reference");
19562 : }
19563 :
19564 8743 : SEPARATE_ZVAL_TO_MAKE_IS_REF(varptr_ptr);
19565 8743 : varptr = *varptr_ptr;
19566 8743 : varptr->refcount++;
19567 8743 : zend_ptr_stack_push(&EG(argument_stack), varptr);
19568 :
19569 8743 : ZEND_VM_NEXT_OPCODE();
19570 : }
19571 :
19572 : static int ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19573 170185 : {
19574 170185 : zend_op *opline = EX(opline);
19575 :
19576 170185 : if ((opline->extended_value == ZEND_DO_FCALL_BY_NAME)
19577 : && ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
19578 221 : return ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19579 : }
19580 169964 : return zend_send_by_var_helper_SPEC_CV(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
19581 : }
19582 :
19583 : static int ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19584 13 : {
19585 13 : zend_op *opline = EX(opline);
19586 :
19587 :
19588 : /* PHP 3.0 returned "" for false and 1 for true, here we use 0 and 1 for now */
19589 13 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = i_zend_is_true(_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC));
19590 13 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
19591 :
19592 13 : ZEND_VM_NEXT_OPCODE();
19593 : }
19594 :
19595 : static int ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19596 1 : {
19597 1 : zend_op *opline = EX(opline);
19598 :
19599 1 : zval *obj = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19600 : zend_class_entry *ce;
19601 : zend_function *clone;
19602 : zend_object_clone_obj_t clone_call;
19603 :
19604 1 : if (!obj || Z_TYPE_P(obj) != IS_OBJECT) {
19605 0 : zend_error(E_WARNING, "__clone method called on non-object");
19606 0 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
19607 0 : EX_T(opline->result.u.var).var.ptr->refcount++;
19608 :
19609 0 : ZEND_VM_NEXT_OPCODE();
19610 : }
19611 :
19612 1 : ce = Z_OBJCE_P(obj);
19613 1 : clone = ce ? ce->clone : NULL;
19614 1 : clone_call = Z_OBJ_HT_P(obj)->clone_obj;
19615 1 : if (!clone_call) {
19616 0 : if (ce) {
19617 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object of class %s", ce->name);
19618 : } else {
19619 0 : zend_error_noreturn(E_ERROR, "Trying to clone an uncloneable object");
19620 : }
19621 : EX_T(opline->result.u.var).var.ptr = EG(error_zval_ptr);
19622 : EX_T(opline->result.u.var).var.ptr->refcount++;
19623 : }
19624 :
19625 1 : if (ce && clone) {
19626 0 : if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) {
19627 : /* Ensure that if we're calling a private function, we're allowed to do so.
19628 : */
19629 0 : if (ce != EG(scope)) {
19630 0 : zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
19631 : }
19632 0 : } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) {
19633 : /* Ensure that if we're calling a protected function, we're allowed to do so.
19634 : */
19635 0 : if (!zend_check_protected(clone->common.scope, EG(scope))) {
19636 0 : zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name, EG(scope) ? EG(scope)->name : "");
19637 : }
19638 : }
19639 : }
19640 :
19641 1 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
19642 1 : if (!EG(exception)) {
19643 1 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
19644 1 : Z_OBJVAL_P(EX_T(opline->result.u.var).var.ptr) = clone_call(obj TSRMLS_CC);
19645 1 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_OBJECT;
19646 1 : EX_T(opline->result.u.var).var.ptr->refcount=1;
19647 1 : EX_T(opline->result.u.var).var.ptr->is_ref=1;
19648 1 : if (!RETURN_VALUE_USED(opline) || EG(exception)) {
19649 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
19650 : }
19651 : }
19652 :
19653 1 : ZEND_VM_NEXT_OPCODE();
19654 : }
19655 :
19656 : static int ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19657 3 : {
19658 3 : zend_op *opline = EX(opline);
19659 :
19660 3 : zval *expr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19661 3 : zval *result = &EX_T(opline->result.u.var).tmp_var;
19662 :
19663 3 : *result = *expr;
19664 : if (!0) {
19665 3 : zendi_zval_copy_ctor(*result);
19666 : }
19667 3 : switch (opline->extended_value) {
19668 : case IS_NULL:
19669 0 : convert_to_null(result);
19670 0 : break;
19671 : case IS_BOOL:
19672 0 : convert_to_boolean(result);
19673 0 : break;
19674 : case IS_LONG:
19675 0 : convert_to_long(result);
19676 0 : break;
19677 : case IS_DOUBLE:
19678 0 : convert_to_double(result);
19679 0 : break;
19680 : case IS_STRING: {
19681 : zval var_copy;
19682 : int use_copy;
19683 :
19684 0 : zend_make_printable_zval(result, &var_copy, &use_copy);
19685 0 : if (use_copy) {
19686 0 : zval_dtor(result);
19687 0 : *result = var_copy;
19688 : }
19689 0 : break;
19690 : }
19691 : case IS_ARRAY:
19692 3 : convert_to_array(result);
19693 3 : break;
19694 : case IS_OBJECT:
19695 0 : convert_to_object(result);
19696 : break;
19697 : }
19698 :
19699 3 : ZEND_VM_NEXT_OPCODE();
19700 : }
19701 :
19702 : static int ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19703 0 : {
19704 0 : zend_op *opline = EX(opline);
19705 0 : zend_op_array *new_op_array=NULL;
19706 0 : zval **original_return_value = EG(return_value_ptr_ptr);
19707 : int return_value_used;
19708 :
19709 0 : zval *inc_filename = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19710 : zval tmp_inc_filename;
19711 0 : zend_bool failure_retval=0;
19712 :
19713 0 : if (inc_filename->type!=IS_STRING) {
19714 0 : tmp_inc_filename = *inc_filename;
19715 0 : zval_copy_ctor(&tmp_inc_filename);
19716 0 : convert_to_string(&tmp_inc_filename);
19717 0 : inc_filename = &tmp_inc_filename;
19718 : }
19719 :
19720 0 : return_value_used = RETURN_VALUE_USED(opline);
19721 :
19722 0 : switch (Z_LVAL(opline->op2.u.constant)) {
19723 : case ZEND_INCLUDE_ONCE:
19724 : case ZEND_REQUIRE_ONCE: {
19725 : zend_file_handle file_handle;
19726 : char cwd[MAXPATHLEN];
19727 : cwd_state state;
19728 :
19729 0 : if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
19730 0 : cwd[0] = '\0';
19731 0 : } else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
19732 0 : cwd[0] = '\0';
19733 : }
19734 :
19735 0 : state.cwd_length = strlen(cwd);
19736 0 : state.cwd = zend_strndup(cwd, state.cwd_length);
19737 :
19738 0 : failure_retval = (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
19739 : zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1));
19740 :
19741 0 : free(state.cwd);
19742 :
19743 0 : if (failure_retval) {
19744 : /* do nothing */
19745 0 : } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
19746 :
19747 0 : if (!file_handle.opened_path) {
19748 0 : file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
19749 : }
19750 :
19751 0 : if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
19752 0 : new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
19753 0 : zend_destroy_file_handle(&file_handle TSRMLS_CC);
19754 : } else {
19755 0 : zend_file_handle_dtor(&file_handle);
19756 0 : failure_retval=1;
19757 : }
19758 : } else {
19759 0 : if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
19760 0 : zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename));
19761 : } else {
19762 0 : zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename));
19763 : }
19764 : }
19765 : }
19766 0 : break;
19767 : case ZEND_INCLUDE:
19768 : case ZEND_REQUIRE:
19769 0 : new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
19770 0 : break;
19771 : case ZEND_EVAL: {
19772 0 : char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
19773 :
19774 0 : new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
19775 0 : efree(eval_desc);
19776 : }
19777 : break;
19778 : EMPTY_SWITCH_DEFAULT_CASE()
19779 : }
19780 0 : if (inc_filename==&tmp_inc_filename) {
19781 0 : zval_dtor(&tmp_inc_filename);
19782 : }
19783 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
19784 0 : if (new_op_array) {
19785 : zval *saved_object;
19786 : zend_function *saved_function;
19787 :
19788 0 : EG(return_value_ptr_ptr) = EX_T(opline->result.u.var).var.ptr_ptr;
19789 0 : EG(active_op_array) = new_op_array;
19790 0 : EX_T(opline->result.u.var).var.ptr = NULL;
19791 :
19792 0 : saved_object = EX(object);
19793 0 : saved_function = EX(function_state).function;
19794 :
19795 0 : EX(function_state).function = (zend_function *) new_op_array;
19796 0 : EX(object) = NULL;
19797 :
19798 0 : zend_execute(new_op_array TSRMLS_CC);
19799 :
19800 0 : EX(function_state).function = saved_function;
19801 0 : EX(object) = saved_object;
19802 :
19803 0 : if (!return_value_used) {
19804 0 : if (EX_T(opline->result.u.var).var.ptr) {
19805 0 : zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
19806 : }
19807 : } else { /* return value is used */
19808 0 : if (!EX_T(opline->result.u.var).var.ptr) { /* there was no return statement */
19809 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
19810 0 : INIT_PZVAL(EX_T(opline->result.u.var).var.ptr);
19811 0 : Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = 1;
19812 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL;
19813 : }
19814 : }
19815 :
19816 0 : EG(opline_ptr) = &EX(opline);
19817 0 : EG(active_op_array) = EX(op_array);
19818 0 : EG(function_state_ptr) = &EX(function_state);
19819 0 : destroy_op_array(new_op_array TSRMLS_CC);
19820 0 : efree(new_op_array);
19821 0 : if (EG(exception)) {
19822 0 : zend_throw_exception_internal(NULL TSRMLS_CC);
19823 : }
19824 : } else {
19825 0 : if (return_value_used) {
19826 0 : ALLOC_ZVAL(EX_T(opline->result.u.var).var.ptr);
19827 0 : INIT_ZVAL(*EX_T(opline->result.u.var).var.ptr);
19828 0 : Z_LVAL_P(EX_T(opline->result.u.var).var.ptr) = failure_retval;
19829 0 : Z_TYPE_P(EX_T(opline->result.u.var).var.ptr) = IS_BOOL;
19830 : }
19831 : }
19832 :
19833 0 : EG(return_value_ptr_ptr) = original_return_value;
19834 0 : ZEND_VM_NEXT_OPCODE();
19835 : }
19836 :
19837 : static int ZEND_UNSET_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19838 0 : {
19839 0 : zend_op *opline = EX(opline);
19840 : zval tmp, *varname;
19841 : HashTable *target_symbol_table;
19842 :
19843 :
19844 0 : varname = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19845 :
19846 0 : if (Z_TYPE_P(varname) != IS_STRING) {
19847 0 : tmp = *varname;
19848 0 : zval_copy_ctor(&tmp);
19849 0 : convert_to_string(&tmp);
19850 0 : varname = &tmp;
19851 : } else if (IS_CV == IS_CV || IS_CV == IS_VAR) {
19852 0 : varname->refcount++;
19853 : }
19854 :
19855 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
19856 0 : zend_std_unset_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname) TSRMLS_CC);
19857 : } else {
19858 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC);
19859 0 : if (zend_hash_del(target_symbol_table, varname->value.str.val, varname->value.str.len+1) == SUCCESS) {
19860 0 : zend_execute_data *ex = execute_data;
19861 0 : ulong hash_value = zend_inline_hash_func(varname->value.str.val, varname->value.str.len+1);
19862 :
19863 : do {
19864 : int i;
19865 :
19866 0 : if (ex->op_array) {
19867 0 : for (i = 0; i < ex->op_array->last_var; i++) {
19868 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
19869 : ex->op_array->vars[i].name_len == varname->value.str.len &&
19870 : !memcmp(ex->op_array->vars[i].name, varname->value.str.val, varname->value.str.len)) {
19871 0 : ex->CVs[i] = NULL;
19872 0 : break;
19873 : }
19874 : }
19875 : }
19876 0 : ex = ex->prev_execute_data;
19877 0 : } while (ex && ex->symbol_table == target_symbol_table);
19878 : }
19879 : }
19880 :
19881 0 : if (varname == &tmp) {
19882 0 : zval_dtor(&tmp);
19883 : } else if (IS_CV == IS_CV || IS_CV == IS_VAR) {
19884 0 : zval_ptr_dtor(&varname);
19885 : }
19886 :
19887 0 : ZEND_VM_NEXT_OPCODE();
19888 : }
19889 :
19890 : static int ZEND_FE_RESET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
19891 238 : {
19892 238 : zend_op *opline = EX(opline);
19893 : zend_free_op free_op1;
19894 : zval *array_ptr, **array_ptr_ptr;
19895 : HashTable *fe_ht;
19896 238 : zend_object_iterator *iter = NULL;
19897 238 : zend_class_entry *ce = NULL;
19898 238 : zend_bool is_empty = 0;
19899 :
19900 238 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
19901 0 : array_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19902 0 : if (array_ptr_ptr == NULL || array_ptr_ptr == &EG(uninitialized_zval_ptr)) {
19903 0 : ALLOC_INIT_ZVAL(array_ptr);
19904 0 : } else if (Z_TYPE_PP(array_ptr_ptr) == IS_OBJECT) {
19905 0 : if(Z_OBJ_HT_PP(array_ptr_ptr)->get_class_entry == NULL) {
19906 0 : zend_error(E_WARNING, "foreach() can not iterate over objects without PHP class");
19907 0 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
19908 : }
19909 :
19910 0 : ce = Z_OBJCE_PP(array_ptr_ptr);
19911 0 : if (!ce || ce->get_iterator == NULL) {
19912 0 : SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
19913 0 : (*array_ptr_ptr)->refcount++;
19914 : }
19915 0 : array_ptr = *array_ptr_ptr;
19916 : } else {
19917 0 : if (Z_TYPE_PP(array_ptr_ptr) == IS_ARRAY) {
19918 0 : SEPARATE_ZVAL_IF_NOT_REF(array_ptr_ptr);
19919 0 : if (opline->extended_value & ZEND_FE_FETCH_BYREF) {
19920 0 : (*array_ptr_ptr)->is_ref = 1;
19921 : }
19922 : }
19923 0 : array_ptr = *array_ptr_ptr;
19924 0 : array_ptr->refcount++;
19925 : }
19926 : } else {
19927 238 : array_ptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
19928 : if (0) { /* IS_TMP_VAR */
19929 : zval *tmp;
19930 :
19931 : ALLOC_ZVAL(tmp);
19932 : INIT_PZVAL_COPY(tmp, array_ptr);
19933 : array_ptr = tmp;
19934 238 : } else if (Z_TYPE_P(array_ptr) == IS_OBJECT) {
19935 4 : ce = Z_OBJCE_P(array_ptr);
19936 4 : if (!ce || !ce->get_iterator) {
19937 0 : array_ptr->refcount++;
19938 : }
19939 : } else {
19940 : if (IS_CV == IS_VAR &&
19941 : free_op1.var == NULL &&
19942 : !array_ptr->is_ref &&
19943 : array_ptr->refcount > 1) {
19944 : /* non-separated return value from function */
19945 : zval *tmp;
19946 :
19947 : ALLOC_ZVAL(tmp);
19948 : INIT_PZVAL_COPY(tmp, array_ptr);
19949 : zval_copy_ctor(tmp);
19950 : array_ptr = tmp;
19951 : } else {
19952 234 : array_ptr->refcount++;
19953 : }
19954 : }
19955 : }
19956 :
19957 238 : if (IS_CV != IS_TMP_VAR && ce && ce->get_iterator) {
19958 4 : iter = ce->get_iterator(ce, array_ptr, opline->extended_value & ZEND_FE_RESET_REFERENCE TSRMLS_CC);
19959 :
19960 8 : if (iter && !EG(exception)) {
19961 4 : array_ptr = zend_iterator_wrap(iter TSRMLS_CC);
19962 : } else {
19963 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
19964 :
19965 : } else {
19966 :
19967 : }
19968 0 : if (!EG(exception)) {
19969 0 : zend_throw_exception_ex(NULL, 0 TSRMLS_CC, "Object of type %s did not create an Iterator", ce->name);
19970 : }
19971 0 : zend_throw_exception_internal(NULL TSRMLS_CC);
19972 0 : ZEND_VM_NEXT_OPCODE();
19973 : }
19974 : }
19975 :
19976 238 : PZVAL_LOCK(array_ptr);
19977 238 : EX_T(opline->result.u.var).var.ptr = array_ptr;
19978 238 : EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
19979 :
19980 238 : if (iter) {
19981 4 : iter->index = 0;
19982 4 : if (iter->funcs->rewind) {
19983 4 : iter->funcs->rewind(iter TSRMLS_CC);
19984 4 : if (EG(exception)) {
19985 0 : array_ptr->refcount--;
19986 0 : zval_ptr_dtor(&array_ptr);
19987 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
19988 :
19989 : } else {
19990 :
19991 : }
19992 0 : ZEND_VM_NEXT_OPCODE();
19993 : }
19994 : }
19995 4 : is_empty = iter->funcs->valid(iter TSRMLS_CC) != SUCCESS;
19996 4 : if (EG(exception)) {
19997 0 : array_ptr->refcount--;
19998 0 : zval_ptr_dtor(&array_ptr);
19999 0 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
20000 :
20001 : } else {
20002 :
20003 : }
20004 0 : ZEND_VM_NEXT_OPCODE();
20005 : }
20006 4 : iter->index = -1; /* will be set to 0 before using next handler */
20007 234 : } else if ((fe_ht = HASH_OF(array_ptr)) != NULL) {
20008 234 : zend_hash_internal_pointer_reset(fe_ht);
20009 234 : if (ce) {
20010 0 : zend_object *zobj = zend_objects_get_address(array_ptr TSRMLS_CC);
20011 0 : while (zend_hash_has_more_elements(fe_ht) == SUCCESS) {
20012 : char *str_key;
20013 : uint str_key_len;
20014 : ulong int_key;
20015 : zend_uchar key_type;
20016 :
20017 0 : key_type = zend_hash_get_current_key_ex(fe_ht, &str_key, &str_key_len, &int_key, 0, NULL);
20018 0 : if (key_type != HASH_KEY_NON_EXISTANT &&
20019 : (key_type == HASH_KEY_IS_LONG ||
20020 : zend_check_property_access(zobj, str_key, str_key_len-1 TSRMLS_CC) == SUCCESS)) {
20021 : break;
20022 : }
20023 0 : zend_hash_move_forward(fe_ht);
20024 : }
20025 : }
20026 234 : is_empty = zend_hash_has_more_elements(fe_ht) != SUCCESS;
20027 234 : zend_hash_get_pointer(fe_ht, &EX_T(opline->result.u.var).fe.fe_pos);
20028 : } else {
20029 0 : zend_error(E_WARNING, "Invalid argument supplied for foreach()");
20030 0 : is_empty = 1;
20031 : }
20032 :
20033 238 : if (opline->extended_value & ZEND_FE_RESET_VARIABLE) {
20034 :
20035 : } else {
20036 :
20037 : }
20038 238 : if (is_empty) {
20039 1 : ZEND_VM_JMP(EX(op_array)->opcodes+opline->op2.u.opline_num);
20040 : } else {
20041 237 : ZEND_VM_NEXT_OPCODE();
20042 : }
20043 : }
20044 :
20045 : static int ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20046 0 : {
20047 0 : zend_op *opline = EX(opline);
20048 :
20049 0 : zval tmp, *varname = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
20050 : zval **value;
20051 0 : zend_bool isset = 1;
20052 : HashTable *target_symbol_table;
20053 :
20054 0 : if (Z_TYPE_P(varname) != IS_STRING) {
20055 0 : tmp = *varname;
20056 0 : zval_copy_ctor(&tmp);
20057 0 : convert_to_string(&tmp);
20058 0 : varname = &tmp;
20059 : }
20060 :
20061 0 : if (opline->op2.u.EA.type == ZEND_FETCH_STATIC_MEMBER) {
20062 0 : value = zend_std_get_static_property(EX_T(opline->op2.u.var).class_entry, Z_STRVAL_P(varname), Z_STRLEN_P(varname), 1 TSRMLS_CC);
20063 0 : if (!value) {
20064 0 : isset = 0;
20065 : }
20066 : } else {
20067 0 : target_symbol_table = zend_get_target_symbol_table(opline, EX(Ts), BP_VAR_IS, varname TSRMLS_CC);
20068 0 : if (zend_hash_find(target_symbol_table, varname->value.str.val, varname->value.str.len+1, (void **) &value) == FAILURE) {
20069 0 : isset = 0;
20070 : }
20071 : }
20072 :
20073 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
20074 :
20075 0 : switch (opline->extended_value) {
20076 : case ZEND_ISSET:
20077 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
20078 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
20079 : } else {
20080 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = isset;
20081 : }
20082 0 : break;
20083 : case ZEND_ISEMPTY:
20084 0 : if (!isset || !i_zend_is_true(*value)) {
20085 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 1;
20086 : } else {
20087 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = 0;
20088 : }
20089 : break;
20090 : }
20091 :
20092 0 : if (varname == &tmp) {
20093 0 : zval_dtor(&tmp);
20094 : }
20095 :
20096 0 : ZEND_VM_NEXT_OPCODE();
20097 : }
20098 :
20099 : static int ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20100 0 : {
20101 : #if 0 || (IS_CV != IS_UNUSED)
20102 0 : zend_op *opline = EX(opline);
20103 : if (IS_CV != IS_UNUSED) {
20104 :
20105 0 : zval *ptr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
20106 :
20107 0 : if (Z_TYPE_P(ptr) == IS_LONG) {
20108 0 : EG(exit_status) = Z_LVAL_P(ptr);
20109 : } else {
20110 0 : zend_print_variable(ptr);
20111 : }
20112 :
20113 : }
20114 : #endif
20115 0 : zend_bailout();
20116 0 : ZEND_VM_NEXT_OPCODE();
20117 : }
20118 :
20119 : static int ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20120 1 : {
20121 1 : zend_op *opline = EX(opline);
20122 :
20123 1 : zval *value = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
20124 :
20125 1 : EX_T(opline->result.u.var).tmp_var = *value;
20126 : if (!0) {
20127 1 : zval_copy_ctor(&EX_T(opline->result.u.var).tmp_var);
20128 : }
20129 :
20130 1 : ZEND_VM_NEXT_OPCODE();
20131 : }
20132 :
20133 : static int ZEND_INSTANCEOF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20134 0 : {
20135 0 : zend_op *opline = EX(opline);
20136 :
20137 0 : zval *expr = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
20138 : zend_bool result;
20139 :
20140 0 : if (Z_TYPE_P(expr) == IS_OBJECT && Z_OBJ_HT_P(expr)->get_class_entry) {
20141 0 : result = instanceof_function(Z_OBJCE_P(expr), EX_T(opline->op2.u.var).class_entry TSRMLS_CC);
20142 : } else {
20143 0 : result = 0;
20144 : }
20145 0 : ZVAL_BOOL(&EX_T(opline->result.u.var).tmp_var, result);
20146 :
20147 0 : ZEND_VM_NEXT_OPCODE();
20148 : }
20149 :
20150 : static int ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20151 6061 : {
20152 6061 : zend_op *opline = EX(opline);
20153 :
20154 :
20155 6061 : add_function(&EX_T(opline->result.u.var).tmp_var,
20156 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20157 : &opline->op2.u.constant TSRMLS_CC);
20158 :
20159 :
20160 6061 : ZEND_VM_NEXT_OPCODE();
20161 : }
20162 :
20163 : static int ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20164 0 : {
20165 0 : zend_op *opline = EX(opline);
20166 :
20167 :
20168 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
20169 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20170 : &opline->op2.u.constant TSRMLS_CC);
20171 :
20172 :
20173 0 : ZEND_VM_NEXT_OPCODE();
20174 : }
20175 :
20176 : static int ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20177 0 : {
20178 0 : zend_op *opline = EX(opline);
20179 :
20180 :
20181 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
20182 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20183 : &opline->op2.u.constant TSRMLS_CC);
20184 :
20185 :
20186 0 : ZEND_VM_NEXT_OPCODE();
20187 : }
20188 :
20189 : static int ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20190 2888 : {
20191 2888 : zend_op *opline = EX(opline);
20192 :
20193 :
20194 2888 : div_function(&EX_T(opline->result.u.var).tmp_var,
20195 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20196 : &opline->op2.u.constant TSRMLS_CC);
20197 :
20198 :
20199 2888 : ZEND_VM_NEXT_OPCODE();
20200 : }
20201 :
20202 : static int ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20203 0 : {
20204 0 : zend_op *opline = EX(opline);
20205 :
20206 :
20207 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
20208 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20209 : &opline->op2.u.constant TSRMLS_CC);
20210 :
20211 :
20212 0 : ZEND_VM_NEXT_OPCODE();
20213 : }
20214 :
20215 : static int ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20216 0 : {
20217 0 : zend_op *opline = EX(opline);
20218 :
20219 :
20220 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
20221 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20222 : &opline->op2.u.constant TSRMLS_CC);
20223 :
20224 :
20225 0 : ZEND_VM_NEXT_OPCODE();
20226 : }
20227 :
20228 : static int ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20229 0 : {
20230 0 : zend_op *opline = EX(opline);
20231 :
20232 :
20233 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
20234 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20235 : &opline->op2.u.constant TSRMLS_CC);
20236 :
20237 :
20238 0 : ZEND_VM_NEXT_OPCODE();
20239 : }
20240 :
20241 : static int ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20242 115 : {
20243 115 : zend_op *opline = EX(opline);
20244 :
20245 :
20246 115 : concat_function(&EX_T(opline->result.u.var).tmp_var,
20247 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20248 : &opline->op2.u.constant TSRMLS_CC);
20249 :
20250 :
20251 115 : ZEND_VM_NEXT_OPCODE();
20252 : }
20253 :
20254 : static int ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20255 1868 : {
20256 1868 : zend_op *opline = EX(opline);
20257 :
20258 :
20259 1868 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
20260 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20261 : &opline->op2.u.constant TSRMLS_CC);
20262 :
20263 :
20264 1868 : ZEND_VM_NEXT_OPCODE();
20265 : }
20266 :
20267 : static int ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20268 88 : {
20269 88 : zend_op *opline = EX(opline);
20270 :
20271 :
20272 88 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
20273 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20274 : &opline->op2.u.constant TSRMLS_CC);
20275 :
20276 :
20277 88 : ZEND_VM_NEXT_OPCODE();
20278 : }
20279 :
20280 : static int ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20281 2871 : {
20282 2871 : zend_op *opline = EX(opline);
20283 :
20284 :
20285 2871 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
20286 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20287 : &opline->op2.u.constant TSRMLS_CC);
20288 :
20289 :
20290 2871 : ZEND_VM_NEXT_OPCODE();
20291 : }
20292 :
20293 : static int ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20294 112 : {
20295 112 : zend_op *opline = EX(opline);
20296 :
20297 :
20298 112 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
20299 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20300 : &opline->op2.u.constant TSRMLS_CC);
20301 :
20302 :
20303 112 : ZEND_VM_NEXT_OPCODE();
20304 : }
20305 :
20306 : static int ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20307 5013 : {
20308 5013 : zend_op *opline = EX(opline);
20309 :
20310 :
20311 5013 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
20312 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20313 : &opline->op2.u.constant TSRMLS_CC);
20314 :
20315 :
20316 5013 : ZEND_VM_NEXT_OPCODE();
20317 : }
20318 :
20319 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20320 0 : {
20321 0 : zend_op *opline = EX(opline);
20322 :
20323 :
20324 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
20325 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20326 : &opline->op2.u.constant TSRMLS_CC);
20327 :
20328 :
20329 0 : ZEND_VM_NEXT_OPCODE();
20330 : }
20331 :
20332 : static int ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20333 0 : {
20334 0 : zend_op *opline = EX(opline);
20335 :
20336 :
20337 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
20338 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20339 : &opline->op2.u.constant TSRMLS_CC);
20340 :
20341 :
20342 0 : ZEND_VM_NEXT_OPCODE();
20343 : }
20344 :
20345 : static int ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20346 0 : {
20347 0 : zend_op *opline = EX(opline);
20348 :
20349 :
20350 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
20351 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20352 : &opline->op2.u.constant TSRMLS_CC);
20353 :
20354 :
20355 0 : ZEND_VM_NEXT_OPCODE();
20356 : }
20357 :
20358 : static int ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20359 0 : {
20360 0 : zend_op *opline = EX(opline);
20361 :
20362 :
20363 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
20364 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20365 : &opline->op2.u.constant TSRMLS_CC);
20366 :
20367 :
20368 0 : ZEND_VM_NEXT_OPCODE();
20369 : }
20370 :
20371 : static int ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20372 0 : {
20373 0 : zend_op *opline = EX(opline);
20374 :
20375 :
20376 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
20377 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
20378 : &opline->op2.u.constant TSRMLS_CC);
20379 :
20380 :
20381 0 : ZEND_VM_NEXT_OPCODE();
20382 : }
20383 :
20384 : static int zend_binary_assign_op_obj_helper_SPEC_CV_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
20385 0 : {
20386 0 : zend_op *opline = EX(opline);
20387 0 : zend_op *op_data = opline+1;
20388 : zend_free_op free_op_data1;
20389 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
20390 : zval *object;
20391 0 : zval *property = &opline->op2.u.constant;
20392 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
20393 0 : znode *result = &opline->result;
20394 0 : zval **retval = &EX_T(result->u.var).var.ptr;
20395 0 : int have_get_ptr = 0;
20396 :
20397 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
20398 0 : make_real_object(object_ptr TSRMLS_CC);
20399 0 : object = *object_ptr;
20400 :
20401 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
20402 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
20403 :
20404 0 : FREE_OP(free_op_data1);
20405 :
20406 0 : if (!RETURN_VALUE_UNUSED(result)) {
20407 0 : *retval = EG(uninitialized_zval_ptr);
20408 0 : PZVAL_LOCK(*retval);
20409 : }
20410 : } else {
20411 : /* here we are sure we are dealing with an object */
20412 : if (0) {
20413 : MAKE_REAL_ZVAL_PTR(property);
20414 : }
20415 :
20416 : /* here property is a string */
20417 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
20418 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
20419 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
20420 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
20421 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
20422 :
20423 0 : have_get_ptr = 1;
20424 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
20425 0 : if (!RETURN_VALUE_UNUSED(result)) {
20426 0 : *retval = *zptr;
20427 0 : PZVAL_LOCK(*retval);
20428 : }
20429 : }
20430 : }
20431 :
20432 0 : if (!have_get_ptr) {
20433 0 : zval *z = NULL;
20434 :
20435 0 : switch (opline->extended_value) {
20436 : case ZEND_ASSIGN_OBJ:
20437 0 : if (Z_OBJ_HT_P(object)->read_property) {
20438 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
20439 : }
20440 0 : break;
20441 : case ZEND_ASSIGN_DIM:
20442 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
20443 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
20444 : }
20445 : break;
20446 : }
20447 0 : if (z) {
20448 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
20449 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
20450 :
20451 0 : if (z->refcount == 0) {
20452 0 : zval_dtor(z);
20453 0 : FREE_ZVAL(z);
20454 : }
20455 0 : z = value;
20456 : }
20457 0 : z->refcount++;
20458 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
20459 0 : binary_op(z, z, value TSRMLS_CC);
20460 0 : switch (opline->extended_value) {
20461 : case ZEND_ASSIGN_OBJ:
20462 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
20463 0 : break;
20464 : case ZEND_ASSIGN_DIM:
20465 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
20466 : break;
20467 : }
20468 0 : if (!RETURN_VALUE_UNUSED(result)) {
20469 0 : *retval = z;
20470 0 : PZVAL_LOCK(*retval);
20471 : }
20472 0 : zval_ptr_dtor(&z);
20473 : } else {
20474 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
20475 0 : if (!RETURN_VALUE_UNUSED(result)) {
20476 0 : *retval = EG(uninitialized_zval_ptr);
20477 0 : PZVAL_LOCK(*retval);
20478 : }
20479 : }
20480 : }
20481 :
20482 : if (0) {
20483 : zval_ptr_dtor(&property);
20484 : } else {
20485 :
20486 : }
20487 0 : FREE_OP(free_op_data1);
20488 : }
20489 :
20490 : /* assign_obj has two opcodes! */
20491 0 : ZEND_VM_INC_OPCODE();
20492 0 : ZEND_VM_NEXT_OPCODE();
20493 : }
20494 :
20495 : static int zend_binary_assign_op_helper_SPEC_CV_CONST(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
20496 3 : {
20497 3 : zend_op *opline = EX(opline);
20498 : zend_free_op free_op_data2, free_op_data1;
20499 : zval **var_ptr;
20500 : zval *value;
20501 3 : zend_bool increment_opline = 0;
20502 :
20503 3 : switch (opline->extended_value) {
20504 : case ZEND_ASSIGN_OBJ:
20505 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20506 : break;
20507 : case ZEND_ASSIGN_DIM: {
20508 1 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
20509 :
20510 : if (object_ptr && IS_CV != IS_CV && !0) {
20511 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
20512 : }
20513 :
20514 1 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
20515 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20516 : } else {
20517 1 : zend_op *op_data = opline+1;
20518 1 : zval *dim = &opline->op2.u.constant;
20519 :
20520 1 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
20521 1 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
20522 1 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
20523 1 : increment_opline = 1;
20524 : }
20525 : }
20526 1 : break;
20527 : default:
20528 2 : value = &opline->op2.u.constant;
20529 2 : var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
20530 : /* do nothing */
20531 : break;
20532 : }
20533 :
20534 3 : if (!var_ptr) {
20535 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
20536 : }
20537 :
20538 3 : if (*var_ptr == EG(error_zval_ptr)) {
20539 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
20540 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
20541 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
20542 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20543 : }
20544 :
20545 :
20546 0 : if (increment_opline) {
20547 0 : ZEND_VM_INC_OPCODE();
20548 : }
20549 0 : ZEND_VM_NEXT_OPCODE();
20550 : }
20551 :
20552 3 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
20553 :
20554 3 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
20555 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
20556 : /* proxy object */
20557 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
20558 0 : objval->refcount++;
20559 0 : binary_op(objval, objval, value TSRMLS_CC);
20560 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
20561 0 : zval_ptr_dtor(&objval);
20562 : } else {
20563 3 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
20564 : }
20565 :
20566 3 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
20567 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
20568 0 : PZVAL_LOCK(*var_ptr);
20569 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20570 : }
20571 :
20572 3 : if (increment_opline) {
20573 1 : ZEND_VM_INC_OPCODE();
20574 1 : FREE_OP(free_op_data1);
20575 1 : FREE_OP_VAR_PTR(free_op_data2);
20576 : }
20577 :
20578 3 : ZEND_VM_NEXT_OPCODE();
20579 : }
20580 :
20581 : static int ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20582 1 : {
20583 1 : return zend_binary_assign_op_helper_SPEC_CV_CONST(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20584 : }
20585 :
20586 : static int ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20587 0 : {
20588 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20589 : }
20590 :
20591 : static int ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20592 0 : {
20593 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20594 : }
20595 :
20596 : static int ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20597 0 : {
20598 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20599 : }
20600 :
20601 : static int ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20602 0 : {
20603 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20604 : }
20605 :
20606 : static int ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20607 0 : {
20608 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20609 : }
20610 :
20611 : static int ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20612 0 : {
20613 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20614 : }
20615 :
20616 : static int ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20617 2 : {
20618 2 : return zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20619 : }
20620 :
20621 : static int ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20622 0 : {
20623 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20624 : }
20625 :
20626 : static int ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20627 0 : {
20628 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20629 : }
20630 :
20631 : static int ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20632 0 : {
20633 0 : return zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20634 : }
20635 :
20636 : static int zend_pre_incdec_property_helper_SPEC_CV_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
20637 0 : {
20638 0 : zend_op *opline = EX(opline);
20639 :
20640 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
20641 : zval *object;
20642 0 : zval *property = &opline->op2.u.constant;
20643 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
20644 0 : int have_get_ptr = 0;
20645 :
20646 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
20647 0 : object = *object_ptr;
20648 :
20649 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
20650 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
20651 :
20652 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
20653 0 : *retval = EG(uninitialized_zval_ptr);
20654 0 : PZVAL_LOCK(*retval);
20655 : }
20656 :
20657 0 : ZEND_VM_NEXT_OPCODE();
20658 : }
20659 :
20660 : /* here we are sure we are dealing with an object */
20661 :
20662 : if (0) {
20663 : MAKE_REAL_ZVAL_PTR(property);
20664 : }
20665 :
20666 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
20667 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
20668 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
20669 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
20670 :
20671 0 : have_get_ptr = 1;
20672 0 : incdec_op(*zptr);
20673 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
20674 0 : *retval = *zptr;
20675 0 : PZVAL_LOCK(*retval);
20676 : }
20677 : }
20678 : }
20679 :
20680 0 : if (!have_get_ptr) {
20681 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
20682 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
20683 :
20684 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
20685 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
20686 :
20687 0 : if (z->refcount == 0) {
20688 0 : zval_dtor(z);
20689 0 : FREE_ZVAL(z);
20690 : }
20691 0 : z = value;
20692 : }
20693 0 : z->refcount++;
20694 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
20695 0 : incdec_op(z);
20696 0 : *retval = z;
20697 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
20698 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
20699 0 : zval_ptr_dtor(&z);
20700 : } else {
20701 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
20702 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
20703 0 : *retval = EG(uninitialized_zval_ptr);
20704 0 : PZVAL_LOCK(*retval);
20705 : }
20706 : }
20707 : }
20708 :
20709 : if (0) {
20710 : zval_ptr_dtor(&property);
20711 : } else {
20712 :
20713 : }
20714 :
20715 0 : ZEND_VM_NEXT_OPCODE();
20716 : }
20717 :
20718 : static int ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20719 0 : {
20720 0 : return zend_pre_incdec_property_helper_SPEC_CV_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20721 : }
20722 :
20723 : static int ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20724 0 : {
20725 0 : return zend_pre_incdec_property_helper_SPEC_CV_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20726 : }
20727 :
20728 : static int zend_post_incdec_property_helper_SPEC_CV_CONST(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
20729 0 : {
20730 0 : zend_op *opline = EX(opline);
20731 :
20732 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
20733 : zval *object;
20734 0 : zval *property = &opline->op2.u.constant;
20735 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
20736 0 : int have_get_ptr = 0;
20737 :
20738 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
20739 0 : object = *object_ptr;
20740 :
20741 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
20742 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
20743 :
20744 0 : *retval = *EG(uninitialized_zval_ptr);
20745 :
20746 0 : ZEND_VM_NEXT_OPCODE();
20747 : }
20748 :
20749 : /* here we are sure we are dealing with an object */
20750 :
20751 : if (0) {
20752 : MAKE_REAL_ZVAL_PTR(property);
20753 : }
20754 :
20755 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
20756 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
20757 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
20758 0 : have_get_ptr = 1;
20759 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
20760 :
20761 0 : *retval = **zptr;
20762 0 : zendi_zval_copy_ctor(*retval);
20763 :
20764 0 : incdec_op(*zptr);
20765 :
20766 : }
20767 : }
20768 :
20769 0 : if (!have_get_ptr) {
20770 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
20771 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
20772 : zval *z_copy;
20773 :
20774 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
20775 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
20776 :
20777 0 : if (z->refcount == 0) {
20778 0 : zval_dtor(z);
20779 0 : FREE_ZVAL(z);
20780 : }
20781 0 : z = value;
20782 : }
20783 0 : *retval = *z;
20784 0 : zendi_zval_copy_ctor(*retval);
20785 0 : ALLOC_ZVAL(z_copy);
20786 0 : *z_copy = *z;
20787 0 : zendi_zval_copy_ctor(*z_copy);
20788 0 : INIT_PZVAL(z_copy);
20789 0 : incdec_op(z_copy);
20790 0 : z->refcount++;
20791 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
20792 0 : zval_ptr_dtor(&z_copy);
20793 0 : zval_ptr_dtor(&z);
20794 : } else {
20795 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
20796 0 : *retval = *EG(uninitialized_zval_ptr);
20797 : }
20798 : }
20799 :
20800 : if (0) {
20801 : zval_ptr_dtor(&property);
20802 : } else {
20803 :
20804 : }
20805 :
20806 0 : ZEND_VM_NEXT_OPCODE();
20807 : }
20808 :
20809 : static int ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20810 0 : {
20811 0 : return zend_post_incdec_property_helper_SPEC_CV_CONST(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20812 : }
20813 :
20814 : static int ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20815 0 : {
20816 0 : return zend_post_incdec_property_helper_SPEC_CV_CONST(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
20817 : }
20818 :
20819 : static int ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20820 8532 : {
20821 8532 : zend_op *opline = EX(opline);
20822 :
20823 8532 : zval *dim = &opline->op2.u.constant;
20824 :
20825 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
20826 : IS_CV != IS_CV &&
20827 : EX_T(opline->op1.u.var).var.ptr_ptr) {
20828 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
20829 : }
20830 8532 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
20831 :
20832 :
20833 8532 : ZEND_VM_NEXT_OPCODE();
20834 : }
20835 :
20836 : static int ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20837 0 : {
20838 0 : zend_op *opline = EX(opline);
20839 : zend_free_op free_op1;
20840 0 : zval *dim = &opline->op2.u.constant;
20841 :
20842 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
20843 :
20844 : if (IS_CV == IS_VAR && 0 &&
20845 : READY_TO_DESTROY(free_op1.var) &&
20846 : !RETURN_VALUE_UNUSED(&opline->result)) {
20847 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20848 : }
20849 :
20850 0 : ZEND_VM_NEXT_OPCODE();
20851 : }
20852 :
20853 : static int ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20854 0 : {
20855 0 : zend_op *opline = EX(opline);
20856 : zend_free_op free_op1;
20857 0 : zval *dim = &opline->op2.u.constant;
20858 :
20859 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
20860 :
20861 : if (IS_CV == IS_VAR && 0 &&
20862 : READY_TO_DESTROY(free_op1.var) &&
20863 : !RETURN_VALUE_UNUSED(&opline->result)) {
20864 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20865 : }
20866 :
20867 0 : ZEND_VM_NEXT_OPCODE();
20868 : }
20869 :
20870 : static int ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20871 0 : {
20872 0 : zend_op *opline = EX(opline);
20873 :
20874 0 : zval *dim = &opline->op2.u.constant;
20875 :
20876 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
20877 :
20878 :
20879 0 : ZEND_VM_NEXT_OPCODE();
20880 : }
20881 :
20882 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20883 2 : {
20884 2 : zend_op *opline = EX(opline);
20885 : zend_free_op free_op1;
20886 2 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
20887 : zval *dim;
20888 :
20889 : if (IS_CONST == IS_UNUSED && type == BP_VAR_R) {
20890 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
20891 : }
20892 2 : dim = &opline->op2.u.constant;
20893 2 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC);
20894 :
20895 : if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
20896 : READY_TO_DESTROY(free_op1.var) &&
20897 : !RETURN_VALUE_UNUSED(&opline->result)) {
20898 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20899 : }
20900 :
20901 2 : ZEND_VM_NEXT_OPCODE();
20902 : }
20903 :
20904 : static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
20905 0 : {
20906 0 : zend_op *opline = EX(opline);
20907 : zend_free_op free_op1;
20908 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
20909 0 : zval *dim = &opline->op2.u.constant;
20910 :
20911 : /* Not needed in DIM_UNSET
20912 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK) {
20913 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
20914 : }
20915 : */
20916 : if (IS_CV == IS_CV) {
20917 0 : if (container != &EG(uninitialized_zval_ptr)) {
20918 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
20919 : }
20920 : }
20921 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
20922 :
20923 : if (IS_CV == IS_VAR && 0 &&
20924 : READY_TO_DESTROY(free_op1.var) &&
20925 : !RETURN_VALUE_UNUSED(&opline->result)) {
20926 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20927 : }
20928 :
20929 0 : if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) {
20930 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
20931 : } else {
20932 : zend_free_op free_res;
20933 :
20934 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
20935 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
20936 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
20937 : }
20938 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
20939 0 : FREE_OP_VAR_PTR(free_res);
20940 : }
20941 0 : ZEND_VM_NEXT_OPCODE();
20942 : }
20943 :
20944 : static int zend_fetch_property_address_read_helper_SPEC_CV_CONST(int type, ZEND_OPCODE_HANDLER_ARGS)
20945 1 : {
20946 1 : zend_op *opline = EX(opline);
20947 : zval *container;
20948 : zval **retval;
20949 :
20950 :
20951 1 : retval = &EX_T(opline->result.u.var).var.ptr;
20952 1 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
20953 :
20954 1 : container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC);
20955 :
20956 1 : if (container == EG(error_zval_ptr)) {
20957 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
20958 0 : *retval = EG(error_zval_ptr);
20959 0 : PZVAL_LOCK(*retval);
20960 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20961 : }
20962 :
20963 0 : ZEND_VM_NEXT_OPCODE();
20964 : }
20965 :
20966 :
20967 1 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
20968 0 : if (type != BP_VAR_IS) {
20969 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
20970 : }
20971 0 : *retval = EG(uninitialized_zval_ptr);
20972 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
20973 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20974 : } else {
20975 :
20976 1 : zval *offset = &opline->op2.u.constant;
20977 :
20978 : if (0) {
20979 : MAKE_REAL_ZVAL_PTR(offset);
20980 : }
20981 :
20982 : /* here we are sure we are dealing with an object */
20983 1 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
20984 :
20985 1 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
20986 0 : zval_dtor(*retval);
20987 0 : FREE_ZVAL(*retval);
20988 : } else {
20989 1 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
20990 1 : AI_USE_PTR(EX_T(opline->result.u.var).var);
20991 : }
20992 :
20993 : if (0) {
20994 : zval_ptr_dtor(&offset);
20995 : } else {
20996 :
20997 : }
20998 : }
20999 :
21000 1 : ZEND_VM_NEXT_OPCODE();
21001 : }
21002 :
21003 : static int ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21004 1 : {
21005 1 : return zend_fetch_property_address_read_helper_SPEC_CV_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
21006 : }
21007 :
21008 : static int ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21009 2 : {
21010 2 : zend_op *opline = EX(opline);
21011 : zend_free_op free_op1;
21012 2 : zval *property = &opline->op2.u.constant;
21013 :
21014 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) {
21015 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
21016 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
21017 : }
21018 :
21019 : if (0) {
21020 : MAKE_REAL_ZVAL_PTR(property);
21021 : }
21022 2 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
21023 : if (0) {
21024 : zval_ptr_dtor(&property);
21025 : } else {
21026 :
21027 : }
21028 : if (IS_CV == IS_VAR && 0 &&
21029 : READY_TO_DESTROY(free_op1.var) &&
21030 : !RETURN_VALUE_UNUSED(&opline->result)) {
21031 : AI_USE_PTR(EX_T(opline->result.u.var).var);
21032 : }
21033 :
21034 2 : ZEND_VM_NEXT_OPCODE();
21035 : }
21036 :
21037 : static int ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21038 0 : {
21039 0 : zend_op *opline = EX(opline);
21040 : zend_free_op free_op1;
21041 0 : zval *property = &opline->op2.u.constant;
21042 :
21043 : if (0) {
21044 : MAKE_REAL_ZVAL_PTR(property);
21045 : }
21046 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
21047 : if (0) {
21048 : zval_ptr_dtor(&property);
21049 : } else {
21050 :
21051 : }
21052 : if (IS_CV == IS_VAR && 0 &&
21053 : READY_TO_DESTROY(free_op1.var) &&
21054 : !RETURN_VALUE_UNUSED(&opline->result)) {
21055 : AI_USE_PTR(EX_T(opline->result.u.var).var);
21056 : }
21057 :
21058 0 : ZEND_VM_NEXT_OPCODE();
21059 : }
21060 :
21061 : static int ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21062 0 : {
21063 0 : return zend_fetch_property_address_read_helper_SPEC_CV_CONST(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
21064 : }
21065 :
21066 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21067 0 : {
21068 0 : zend_op *opline = EX(opline);
21069 :
21070 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
21071 : /* Behave like FETCH_OBJ_W */
21072 : zend_free_op free_op1;
21073 0 : zval *property = &opline->op2.u.constant;
21074 :
21075 : if (0) {
21076 : MAKE_REAL_ZVAL_PTR(property);
21077 : }
21078 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
21079 : if (0) {
21080 : zval_ptr_dtor(&property);
21081 : } else {
21082 :
21083 : }
21084 : if (IS_CV == IS_VAR && 0 &&
21085 : READY_TO_DESTROY(free_op1.var) &&
21086 : !RETURN_VALUE_UNUSED(&opline->result)) {
21087 : AI_USE_PTR(EX_T(opline->result.u.var).var);
21088 : }
21089 :
21090 0 : ZEND_VM_NEXT_OPCODE();
21091 : } else {
21092 0 : return zend_fetch_property_address_read_helper_SPEC_CV_CONST(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
21093 : }
21094 : }
21095 :
21096 : static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21097 0 : {
21098 0 : zend_op *opline = EX(opline);
21099 : zend_free_op free_op1, free_res;
21100 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
21101 0 : zval *property = &opline->op2.u.constant;
21102 :
21103 : if (IS_CV == IS_CV) {
21104 0 : if (container != &EG(uninitialized_zval_ptr)) {
21105 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
21106 : }
21107 : }
21108 : if (0) {
21109 : MAKE_REAL_ZVAL_PTR(property);
21110 : }
21111 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
21112 : if (0) {
21113 : zval_ptr_dtor(&property);
21114 : } else {
21115 :
21116 : }
21117 : if (IS_CV == IS_VAR && 0 &&
21118 : READY_TO_DESTROY(free_op1.var) &&
21119 : !RETURN_VALUE_UNUSED(&opline->result)) {
21120 : AI_USE_PTR(EX_T(opline->result.u.var).var);
21121 : }
21122 :
21123 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
21124 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
21125 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
21126 : }
21127 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
21128 0 : FREE_OP_VAR_PTR(free_res);
21129 0 : ZEND_VM_NEXT_OPCODE();
21130 : }
21131 :
21132 : static int ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21133 5 : {
21134 5 : zend_op *opline = EX(opline);
21135 5 : zend_op *op_data = opline+1;
21136 :
21137 5 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
21138 :
21139 5 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
21140 :
21141 : /* assign_obj has two opcodes! */
21142 5 : ZEND_VM_INC_OPCODE();
21143 5 : ZEND_VM_NEXT_OPCODE();
21144 : }
21145 :
21146 : static int ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21147 1740 : {
21148 1740 : zend_op *opline = EX(opline);
21149 1740 : zend_op *op_data = opline+1;
21150 :
21151 : zval **object_ptr;
21152 :
21153 : if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
21154 : /* not an array offset */
21155 1740 : object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
21156 : } else {
21157 : object_ptr = NULL;
21158 : }
21159 :
21160 1740 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
21161 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
21162 : } else {
21163 : zend_free_op free_op_data1;
21164 : zval *value;
21165 1740 : zval *dim = &opline->op2.u.constant;
21166 :
21167 1740 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
21168 :
21169 1740 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
21170 1740 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
21171 1740 : FREE_OP_IF_VAR(free_op_data1);
21172 : }
21173 :
21174 : /* assign_dim has two opcodes! */
21175 1740 : ZEND_VM_INC_OPCODE();
21176 1740 : ZEND_VM_NEXT_OPCODE();
21177 : }
21178 :
21179 : static int ZEND_ASSIGN_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21180 22418 : {
21181 22418 : zend_op *opline = EX(opline);
21182 :
21183 22418 : zval *value = &opline->op2.u.constant;
21184 :
21185 22418 : zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_CONST), EX(Ts) TSRMLS_CC);
21186 : /* zend_assign_to_variable() always takes care of op2, never free it! */
21187 :
21188 22418 : ZEND_VM_NEXT_OPCODE();
21189 : }
21190 :
21191 : static int ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21192 552 : {
21193 552 : zend_op *opline = EX(opline);
21194 : zval *function_name;
21195 : char *function_name_strval;
21196 : int function_name_strlen;
21197 :
21198 :
21199 552 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
21200 :
21201 552 : function_name = &opline->op2.u.constant;
21202 :
21203 552 : if (Z_TYPE_P(function_name)!=IS_STRING) {
21204 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
21205 : }
21206 :
21207 552 : function_name_strval = Z_STRVAL_P(function_name);
21208 552 : function_name_strlen = Z_STRLEN_P(function_name);
21209 :
21210 552 : EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
21211 :
21212 552 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
21213 552 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
21214 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
21215 : }
21216 :
21217 : /* First, locate the function. */
21218 552 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
21219 552 : if (!EX(fbc)) {
21220 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
21221 : }
21222 : } else {
21223 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
21224 : }
21225 :
21226 552 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
21227 0 : EX(object) = NULL;
21228 : } else {
21229 552 : if (!PZVAL_IS_REF(EX(object))) {
21230 552 : EX(object)->refcount++; /* For $this pointer */
21231 : } else {
21232 : zval *this_ptr;
21233 0 : ALLOC_ZVAL(this_ptr);
21234 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
21235 0 : zval_copy_ctor(this_ptr);
21236 0 : EX(object) = this_ptr;
21237 : }
21238 : }
21239 :
21240 :
21241 552 : ZEND_VM_NEXT_OPCODE();
21242 : }
21243 :
21244 : static int ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21245 0 : {
21246 0 : zend_op *opline = EX(opline);
21247 0 : int switch_expr_is_overloaded=0;
21248 :
21249 :
21250 : if (IS_CV==IS_VAR) {
21251 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
21252 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
21253 : } else {
21254 : switch_expr_is_overloaded = 1;
21255 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
21256 : }
21257 : }
21258 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
21259 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21260 : &opline->op2.u.constant TSRMLS_CC);
21261 :
21262 0 : if (switch_expr_is_overloaded) {
21263 : /* We only free op1 if this is a string offset,
21264 : * Since if it is a TMP_VAR, it'll be reused by
21265 : * other CASE opcodes (whereas string offsets
21266 : * are allocated at each get_zval_ptr())
21267 : */
21268 :
21269 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
21270 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
21271 : }
21272 0 : ZEND_VM_NEXT_OPCODE();
21273 : }
21274 :
21275 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21276 17 : {
21277 17 : zend_op *opline = EX(opline);
21278 :
21279 17 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
21280 : zval *expr_ptr;
21281 17 : zval *offset=&opline->op2.u.constant;
21282 :
21283 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
21284 17 : zval **expr_ptr_ptr = NULL;
21285 :
21286 17 : if (opline->extended_value) {
21287 0 : expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
21288 0 : expr_ptr = *expr_ptr_ptr;
21289 : } else {
21290 17 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
21291 : }
21292 : #else
21293 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
21294 : #endif
21295 :
21296 : if (0) { /* temporary variable */
21297 : zval *new_expr;
21298 :
21299 : ALLOC_ZVAL(new_expr);
21300 : INIT_PZVAL_COPY(new_expr, expr_ptr);
21301 : expr_ptr = new_expr;
21302 : } else {
21303 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
21304 17 : if (opline->extended_value) {
21305 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
21306 0 : expr_ptr = *expr_ptr_ptr;
21307 0 : expr_ptr->refcount++;
21308 : } else
21309 : #endif
21310 17 : if (PZVAL_IS_REF(expr_ptr)) {
21311 : zval *new_expr;
21312 :
21313 0 : ALLOC_ZVAL(new_expr);
21314 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
21315 0 : expr_ptr = new_expr;
21316 0 : zendi_zval_copy_ctor(*expr_ptr);
21317 : } else {
21318 17 : expr_ptr->refcount++;
21319 : }
21320 : }
21321 17 : if (offset) {
21322 17 : switch (Z_TYPE_P(offset)) {
21323 : case IS_DOUBLE:
21324 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
21325 0 : break;
21326 : case IS_LONG:
21327 : case IS_BOOL:
21328 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
21329 0 : break;
21330 : case IS_STRING:
21331 17 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
21332 17 : break;
21333 : case IS_NULL:
21334 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
21335 0 : break;
21336 : default:
21337 0 : zend_error(E_WARNING, "Illegal offset type");
21338 0 : zval_ptr_dtor(&expr_ptr);
21339 : /* do nothing */
21340 : break;
21341 : }
21342 :
21343 : } else {
21344 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
21345 : }
21346 17 : if (opline->extended_value) {
21347 :
21348 : } else {
21349 :
21350 : }
21351 17 : ZEND_VM_NEXT_OPCODE();
21352 : }
21353 :
21354 : static int ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21355 5 : {
21356 5 : zend_op *opline = EX(opline);
21357 :
21358 5 : array_init(&EX_T(opline->result.u.var).tmp_var);
21359 : if (IS_CV == IS_UNUSED) {
21360 : ZEND_VM_NEXT_OPCODE();
21361 : #if 0 || IS_CV != IS_UNUSED
21362 : } else {
21363 5 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
21364 : #endif
21365 : }
21366 : }
21367 :
21368 : static int ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21369 0 : {
21370 0 : zend_op *opline = EX(opline);
21371 :
21372 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
21373 0 : zval *offset = &opline->op2.u.constant;
21374 : long index;
21375 :
21376 0 : if (container) {
21377 0 : if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
21378 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
21379 : }
21380 0 : switch (Z_TYPE_PP(container)) {
21381 : case IS_ARRAY: {
21382 0 : HashTable *ht = Z_ARRVAL_PP(container);
21383 :
21384 0 : switch (Z_TYPE_P(offset)) {
21385 : case IS_DOUBLE:
21386 0 : index = (long) Z_DVAL_P(offset);
21387 0 : zend_hash_index_del(ht, index);
21388 0 : break;
21389 : case IS_RESOURCE:
21390 : case IS_BOOL:
21391 : case IS_LONG:
21392 0 : index = Z_LVAL_P(offset);
21393 0 : zend_hash_index_del(ht, index);
21394 0 : break;
21395 : case IS_STRING:
21396 : if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
21397 : offset->refcount++;
21398 : }
21399 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
21400 : ht == &EG(symbol_table)) {
21401 : zend_execute_data *ex;
21402 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
21403 :
21404 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
21405 0 : if (ex->op_array && ex->symbol_table == ht) {
21406 : int i;
21407 :
21408 0 : for (i = 0; i < ex->op_array->last_var; i++) {
21409 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
21410 : ex->op_array->vars[i].name_len == offset->value.str.len &&
21411 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
21412 0 : ex->CVs[i] = NULL;
21413 0 : break;
21414 : }
21415 : }
21416 : }
21417 : }
21418 : }
21419 : if (IS_CONST == IS_CV || IS_CONST == IS_VAR) {
21420 : zval_ptr_dtor(&offset);
21421 : }
21422 0 : break;
21423 : case IS_NULL:
21424 0 : zend_hash_del(ht, "", sizeof(""));
21425 0 : break;
21426 : default:
21427 0 : zend_error(E_WARNING, "Illegal offset type in unset");
21428 : break;
21429 : }
21430 :
21431 0 : break;
21432 : }
21433 : case IS_OBJECT:
21434 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
21435 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
21436 : }
21437 : if (0) {
21438 : MAKE_REAL_ZVAL_PTR(offset);
21439 : }
21440 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
21441 : if (0) {
21442 : zval_ptr_dtor(&offset);
21443 : } else {
21444 :
21445 : }
21446 0 : break;
21447 : case IS_STRING:
21448 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
21449 : ZEND_VM_CONTINUE(); /* bailed out before */
21450 : default:
21451 :
21452 : break;
21453 : }
21454 : } else {
21455 :
21456 : }
21457 :
21458 0 : ZEND_VM_NEXT_OPCODE();
21459 : }
21460 :
21461 : static int ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21462 0 : {
21463 0 : zend_op *opline = EX(opline);
21464 :
21465 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
21466 0 : zval *offset = &opline->op2.u.constant;
21467 :
21468 0 : if (container) {
21469 0 : if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
21470 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
21471 : }
21472 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
21473 : if (0) {
21474 : MAKE_REAL_ZVAL_PTR(offset);
21475 : }
21476 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
21477 : if (0) {
21478 : zval_ptr_dtor(&offset);
21479 : } else {
21480 :
21481 : }
21482 : } else {
21483 :
21484 : }
21485 : } else {
21486 :
21487 : }
21488 :
21489 0 : ZEND_VM_NEXT_OPCODE();
21490 : }
21491 :
21492 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
21493 1495 : {
21494 1495 : zend_op *opline = EX(opline);
21495 :
21496 1495 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
21497 1495 : zval **value = NULL;
21498 1495 : int result = 0;
21499 : long index;
21500 :
21501 1495 : if (container) {
21502 :
21503 1495 : zval *offset = &opline->op2.u.constant;
21504 :
21505 1495 : if (Z_TYPE_PP(container) == IS_ARRAY) {
21506 : HashTable *ht;
21507 1495 : int isset = 0;
21508 :
21509 1495 : ht = Z_ARRVAL_PP(container);
21510 :
21511 1495 : switch (Z_TYPE_P(offset)) {
21512 : case IS_DOUBLE:
21513 0 : index = (long) Z_DVAL_P(offset);
21514 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
21515 0 : isset = 1;
21516 : }
21517 0 : break;
21518 : case IS_RESOURCE:
21519 : case IS_BOOL:
21520 : case IS_LONG:
21521 80 : index = Z_LVAL_P(offset);
21522 80 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
21523 80 : isset = 1;
21524 : }
21525 80 : break;
21526 : case IS_STRING:
21527 1415 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
21528 1010 : isset = 1;
21529 : }
21530 1415 : break;
21531 : case IS_NULL:
21532 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
21533 0 : isset = 1;
21534 : }
21535 0 : break;
21536 : default:
21537 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
21538 :
21539 : break;
21540 : }
21541 :
21542 1495 : switch (opline->extended_value) {
21543 : case ZEND_ISSET:
21544 690 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
21545 0 : result = 0;
21546 : } else {
21547 690 : result = isset;
21548 : }
21549 690 : break;
21550 : case ZEND_ISEMPTY:
21551 1536 : if (!isset || !i_zend_is_true(*value)) {
21552 731 : result = 0;
21553 : } else {
21554 74 : result = 1;
21555 : }
21556 : break;
21557 : }
21558 :
21559 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
21560 : if (0) {
21561 : MAKE_REAL_ZVAL_PTR(offset);
21562 : }
21563 0 : if (prop_dim) {
21564 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
21565 : } else {
21566 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
21567 : }
21568 : if (0) {
21569 : zval_ptr_dtor(&offset);
21570 : } else {
21571 :
21572 : }
21573 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
21574 : zval tmp;
21575 :
21576 0 : if (Z_TYPE_P(offset) != IS_LONG) {
21577 0 : tmp = *offset;
21578 0 : zval_copy_ctor(&tmp);
21579 0 : convert_to_long(&tmp);
21580 0 : offset = &tmp;
21581 : }
21582 0 : if (Z_TYPE_P(offset) == IS_LONG) {
21583 0 : switch (opline->extended_value) {
21584 : case ZEND_ISSET:
21585 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
21586 0 : result = 1;
21587 : }
21588 0 : break;
21589 : case ZEND_ISEMPTY:
21590 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
21591 0 : result = 1;
21592 : }
21593 : break;
21594 : }
21595 : }
21596 :
21597 : } else {
21598 :
21599 : }
21600 : }
21601 :
21602 1495 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
21603 :
21604 1495 : switch (opline->extended_value) {
21605 : case ZEND_ISSET:
21606 690 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
21607 690 : break;
21608 : case ZEND_ISEMPTY:
21609 805 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
21610 : break;
21611 : }
21612 :
21613 1495 : ZEND_VM_NEXT_OPCODE();
21614 : }
21615 :
21616 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21617 1495 : {
21618 1495 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
21619 : }
21620 :
21621 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21622 0 : {
21623 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CONST(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
21624 : }
21625 :
21626 : static int ZEND_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21627 5 : {
21628 5 : zend_op *opline = EX(opline);
21629 : zend_free_op free_op2;
21630 :
21631 5 : add_function(&EX_T(opline->result.u.var).tmp_var,
21632 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21633 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21634 :
21635 5 : zval_dtor(free_op2.var);
21636 5 : ZEND_VM_NEXT_OPCODE();
21637 : }
21638 :
21639 : static int ZEND_SUB_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21640 0 : {
21641 0 : zend_op *opline = EX(opline);
21642 : zend_free_op free_op2;
21643 :
21644 0 : sub_function(&EX_T(opline->result.u.var).tmp_var,
21645 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21646 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21647 :
21648 0 : zval_dtor(free_op2.var);
21649 0 : ZEND_VM_NEXT_OPCODE();
21650 : }
21651 :
21652 : static int ZEND_MUL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21653 0 : {
21654 0 : zend_op *opline = EX(opline);
21655 : zend_free_op free_op2;
21656 :
21657 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
21658 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21659 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21660 :
21661 0 : zval_dtor(free_op2.var);
21662 0 : ZEND_VM_NEXT_OPCODE();
21663 : }
21664 :
21665 : static int ZEND_DIV_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21666 0 : {
21667 0 : zend_op *opline = EX(opline);
21668 : zend_free_op free_op2;
21669 :
21670 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
21671 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21672 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21673 :
21674 0 : zval_dtor(free_op2.var);
21675 0 : ZEND_VM_NEXT_OPCODE();
21676 : }
21677 :
21678 : static int ZEND_MOD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21679 0 : {
21680 0 : zend_op *opline = EX(opline);
21681 : zend_free_op free_op2;
21682 :
21683 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
21684 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21685 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21686 :
21687 0 : zval_dtor(free_op2.var);
21688 0 : ZEND_VM_NEXT_OPCODE();
21689 : }
21690 :
21691 : static int ZEND_SL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21692 0 : {
21693 0 : zend_op *opline = EX(opline);
21694 : zend_free_op free_op2;
21695 :
21696 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
21697 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21698 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21699 :
21700 0 : zval_dtor(free_op2.var);
21701 0 : ZEND_VM_NEXT_OPCODE();
21702 : }
21703 :
21704 : static int ZEND_SR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21705 0 : {
21706 0 : zend_op *opline = EX(opline);
21707 : zend_free_op free_op2;
21708 :
21709 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
21710 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21711 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21712 :
21713 0 : zval_dtor(free_op2.var);
21714 0 : ZEND_VM_NEXT_OPCODE();
21715 : }
21716 :
21717 : static int ZEND_CONCAT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21718 1308 : {
21719 1308 : zend_op *opline = EX(opline);
21720 : zend_free_op free_op2;
21721 :
21722 1308 : concat_function(&EX_T(opline->result.u.var).tmp_var,
21723 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21724 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21725 :
21726 1308 : zval_dtor(free_op2.var);
21727 1308 : ZEND_VM_NEXT_OPCODE();
21728 : }
21729 :
21730 : static int ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21731 0 : {
21732 0 : zend_op *opline = EX(opline);
21733 : zend_free_op free_op2;
21734 :
21735 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
21736 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21737 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21738 :
21739 0 : zval_dtor(free_op2.var);
21740 0 : ZEND_VM_NEXT_OPCODE();
21741 : }
21742 :
21743 : static int ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21744 0 : {
21745 0 : zend_op *opline = EX(opline);
21746 : zend_free_op free_op2;
21747 :
21748 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
21749 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21750 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21751 :
21752 0 : zval_dtor(free_op2.var);
21753 0 : ZEND_VM_NEXT_OPCODE();
21754 : }
21755 :
21756 : static int ZEND_IS_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21757 111 : {
21758 111 : zend_op *opline = EX(opline);
21759 : zend_free_op free_op2;
21760 :
21761 111 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
21762 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21763 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21764 :
21765 111 : zval_dtor(free_op2.var);
21766 111 : ZEND_VM_NEXT_OPCODE();
21767 : }
21768 :
21769 : static int ZEND_IS_NOT_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21770 0 : {
21771 0 : zend_op *opline = EX(opline);
21772 : zend_free_op free_op2;
21773 :
21774 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
21775 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21776 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21777 :
21778 0 : zval_dtor(free_op2.var);
21779 0 : ZEND_VM_NEXT_OPCODE();
21780 : }
21781 :
21782 : static int ZEND_IS_SMALLER_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21783 0 : {
21784 0 : zend_op *opline = EX(opline);
21785 : zend_free_op free_op2;
21786 :
21787 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
21788 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21789 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21790 :
21791 0 : zval_dtor(free_op2.var);
21792 0 : ZEND_VM_NEXT_OPCODE();
21793 : }
21794 :
21795 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21796 30 : {
21797 30 : zend_op *opline = EX(opline);
21798 : zend_free_op free_op2;
21799 :
21800 30 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
21801 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21802 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21803 :
21804 30 : zval_dtor(free_op2.var);
21805 30 : ZEND_VM_NEXT_OPCODE();
21806 : }
21807 :
21808 : static int ZEND_BW_OR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21809 0 : {
21810 0 : zend_op *opline = EX(opline);
21811 : zend_free_op free_op2;
21812 :
21813 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
21814 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21815 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21816 :
21817 0 : zval_dtor(free_op2.var);
21818 0 : ZEND_VM_NEXT_OPCODE();
21819 : }
21820 :
21821 : static int ZEND_BW_AND_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21822 0 : {
21823 0 : zend_op *opline = EX(opline);
21824 : zend_free_op free_op2;
21825 :
21826 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
21827 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21828 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21829 :
21830 0 : zval_dtor(free_op2.var);
21831 0 : ZEND_VM_NEXT_OPCODE();
21832 : }
21833 :
21834 : static int ZEND_BW_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21835 0 : {
21836 0 : zend_op *opline = EX(opline);
21837 : zend_free_op free_op2;
21838 :
21839 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
21840 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21841 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21842 :
21843 0 : zval_dtor(free_op2.var);
21844 0 : ZEND_VM_NEXT_OPCODE();
21845 : }
21846 :
21847 : static int ZEND_BOOL_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21848 0 : {
21849 0 : zend_op *opline = EX(opline);
21850 : zend_free_op free_op2;
21851 :
21852 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
21853 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
21854 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
21855 :
21856 0 : zval_dtor(free_op2.var);
21857 0 : ZEND_VM_NEXT_OPCODE();
21858 : }
21859 :
21860 : static int zend_binary_assign_op_obj_helper_SPEC_CV_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
21861 0 : {
21862 0 : zend_op *opline = EX(opline);
21863 0 : zend_op *op_data = opline+1;
21864 : zend_free_op free_op2, free_op_data1;
21865 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
21866 : zval *object;
21867 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
21868 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
21869 0 : znode *result = &opline->result;
21870 0 : zval **retval = &EX_T(result->u.var).var.ptr;
21871 0 : int have_get_ptr = 0;
21872 :
21873 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
21874 0 : make_real_object(object_ptr TSRMLS_CC);
21875 0 : object = *object_ptr;
21876 :
21877 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
21878 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
21879 0 : zval_dtor(free_op2.var);
21880 0 : FREE_OP(free_op_data1);
21881 :
21882 0 : if (!RETURN_VALUE_UNUSED(result)) {
21883 0 : *retval = EG(uninitialized_zval_ptr);
21884 0 : PZVAL_LOCK(*retval);
21885 : }
21886 : } else {
21887 : /* here we are sure we are dealing with an object */
21888 : if (1) {
21889 0 : MAKE_REAL_ZVAL_PTR(property);
21890 : }
21891 :
21892 : /* here property is a string */
21893 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
21894 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
21895 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
21896 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
21897 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
21898 :
21899 0 : have_get_ptr = 1;
21900 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
21901 0 : if (!RETURN_VALUE_UNUSED(result)) {
21902 0 : *retval = *zptr;
21903 0 : PZVAL_LOCK(*retval);
21904 : }
21905 : }
21906 : }
21907 :
21908 0 : if (!have_get_ptr) {
21909 0 : zval *z = NULL;
21910 :
21911 0 : switch (opline->extended_value) {
21912 : case ZEND_ASSIGN_OBJ:
21913 0 : if (Z_OBJ_HT_P(object)->read_property) {
21914 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
21915 : }
21916 0 : break;
21917 : case ZEND_ASSIGN_DIM:
21918 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
21919 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
21920 : }
21921 : break;
21922 : }
21923 0 : if (z) {
21924 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
21925 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
21926 :
21927 0 : if (z->refcount == 0) {
21928 0 : zval_dtor(z);
21929 0 : FREE_ZVAL(z);
21930 : }
21931 0 : z = value;
21932 : }
21933 0 : z->refcount++;
21934 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
21935 0 : binary_op(z, z, value TSRMLS_CC);
21936 0 : switch (opline->extended_value) {
21937 : case ZEND_ASSIGN_OBJ:
21938 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
21939 0 : break;
21940 : case ZEND_ASSIGN_DIM:
21941 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
21942 : break;
21943 : }
21944 0 : if (!RETURN_VALUE_UNUSED(result)) {
21945 0 : *retval = z;
21946 0 : PZVAL_LOCK(*retval);
21947 : }
21948 0 : zval_ptr_dtor(&z);
21949 : } else {
21950 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
21951 0 : if (!RETURN_VALUE_UNUSED(result)) {
21952 0 : *retval = EG(uninitialized_zval_ptr);
21953 0 : PZVAL_LOCK(*retval);
21954 : }
21955 : }
21956 : }
21957 :
21958 : if (1) {
21959 0 : zval_ptr_dtor(&property);
21960 : } else {
21961 : zval_dtor(free_op2.var);
21962 : }
21963 0 : FREE_OP(free_op_data1);
21964 : }
21965 :
21966 : /* assign_obj has two opcodes! */
21967 0 : ZEND_VM_INC_OPCODE();
21968 0 : ZEND_VM_NEXT_OPCODE();
21969 : }
21970 :
21971 : static int zend_binary_assign_op_helper_SPEC_CV_TMP(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
21972 2208 : {
21973 2208 : zend_op *opline = EX(opline);
21974 : zend_free_op free_op2, free_op_data2, free_op_data1;
21975 : zval **var_ptr;
21976 : zval *value;
21977 2208 : zend_bool increment_opline = 0;
21978 :
21979 2208 : switch (opline->extended_value) {
21980 : case ZEND_ASSIGN_OBJ:
21981 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
21982 : break;
21983 : case ZEND_ASSIGN_DIM: {
21984 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
21985 :
21986 : if (object_ptr && IS_CV != IS_CV && !0) {
21987 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
21988 : }
21989 :
21990 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
21991 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_TMP(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
21992 : } else {
21993 0 : zend_op *op_data = opline+1;
21994 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
21995 :
21996 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
21997 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
21998 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
21999 0 : increment_opline = 1;
22000 : }
22001 : }
22002 0 : break;
22003 : default:
22004 2208 : value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22005 2208 : var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
22006 : /* do nothing */
22007 : break;
22008 : }
22009 :
22010 2208 : if (!var_ptr) {
22011 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
22012 : }
22013 :
22014 2208 : if (*var_ptr == EG(error_zval_ptr)) {
22015 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
22016 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
22017 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
22018 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22019 : }
22020 0 : zval_dtor(free_op2.var);
22021 :
22022 0 : if (increment_opline) {
22023 0 : ZEND_VM_INC_OPCODE();
22024 : }
22025 0 : ZEND_VM_NEXT_OPCODE();
22026 : }
22027 :
22028 2208 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
22029 :
22030 2208 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
22031 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
22032 : /* proxy object */
22033 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
22034 0 : objval->refcount++;
22035 0 : binary_op(objval, objval, value TSRMLS_CC);
22036 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
22037 0 : zval_ptr_dtor(&objval);
22038 : } else {
22039 2208 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
22040 : }
22041 :
22042 2208 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
22043 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
22044 0 : PZVAL_LOCK(*var_ptr);
22045 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22046 : }
22047 2208 : zval_dtor(free_op2.var);
22048 :
22049 2208 : if (increment_opline) {
22050 0 : ZEND_VM_INC_OPCODE();
22051 0 : FREE_OP(free_op_data1);
22052 0 : FREE_OP_VAR_PTR(free_op_data2);
22053 : }
22054 :
22055 2208 : ZEND_VM_NEXT_OPCODE();
22056 : }
22057 :
22058 : static int ZEND_ASSIGN_ADD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22059 0 : {
22060 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22061 : }
22062 :
22063 : static int ZEND_ASSIGN_SUB_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22064 0 : {
22065 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22066 : }
22067 :
22068 : static int ZEND_ASSIGN_MUL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22069 0 : {
22070 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22071 : }
22072 :
22073 : static int ZEND_ASSIGN_DIV_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22074 0 : {
22075 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22076 : }
22077 :
22078 : static int ZEND_ASSIGN_MOD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22079 0 : {
22080 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22081 : }
22082 :
22083 : static int ZEND_ASSIGN_SL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22084 0 : {
22085 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22086 : }
22087 :
22088 : static int ZEND_ASSIGN_SR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22089 0 : {
22090 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22091 : }
22092 :
22093 : static int ZEND_ASSIGN_CONCAT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22094 2208 : {
22095 2208 : return zend_binary_assign_op_helper_SPEC_CV_TMP(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22096 : }
22097 :
22098 : static int ZEND_ASSIGN_BW_OR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22099 0 : {
22100 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22101 : }
22102 :
22103 : static int ZEND_ASSIGN_BW_AND_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22104 0 : {
22105 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22106 : }
22107 :
22108 : static int ZEND_ASSIGN_BW_XOR_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22109 0 : {
22110 0 : return zend_binary_assign_op_helper_SPEC_CV_TMP(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22111 : }
22112 :
22113 : static int zend_pre_incdec_property_helper_SPEC_CV_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
22114 0 : {
22115 0 : zend_op *opline = EX(opline);
22116 : zend_free_op free_op2;
22117 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
22118 : zval *object;
22119 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22120 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
22121 0 : int have_get_ptr = 0;
22122 :
22123 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
22124 0 : object = *object_ptr;
22125 :
22126 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
22127 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
22128 0 : zval_dtor(free_op2.var);
22129 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
22130 0 : *retval = EG(uninitialized_zval_ptr);
22131 0 : PZVAL_LOCK(*retval);
22132 : }
22133 :
22134 0 : ZEND_VM_NEXT_OPCODE();
22135 : }
22136 :
22137 : /* here we are sure we are dealing with an object */
22138 :
22139 : if (1) {
22140 0 : MAKE_REAL_ZVAL_PTR(property);
22141 : }
22142 :
22143 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
22144 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
22145 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
22146 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
22147 :
22148 0 : have_get_ptr = 1;
22149 0 : incdec_op(*zptr);
22150 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
22151 0 : *retval = *zptr;
22152 0 : PZVAL_LOCK(*retval);
22153 : }
22154 : }
22155 : }
22156 :
22157 0 : if (!have_get_ptr) {
22158 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
22159 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
22160 :
22161 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
22162 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
22163 :
22164 0 : if (z->refcount == 0) {
22165 0 : zval_dtor(z);
22166 0 : FREE_ZVAL(z);
22167 : }
22168 0 : z = value;
22169 : }
22170 0 : z->refcount++;
22171 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
22172 0 : incdec_op(z);
22173 0 : *retval = z;
22174 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
22175 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
22176 0 : zval_ptr_dtor(&z);
22177 : } else {
22178 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
22179 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
22180 0 : *retval = EG(uninitialized_zval_ptr);
22181 0 : PZVAL_LOCK(*retval);
22182 : }
22183 : }
22184 : }
22185 :
22186 : if (1) {
22187 0 : zval_ptr_dtor(&property);
22188 : } else {
22189 : zval_dtor(free_op2.var);
22190 : }
22191 :
22192 0 : ZEND_VM_NEXT_OPCODE();
22193 : }
22194 :
22195 : static int ZEND_PRE_INC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22196 0 : {
22197 0 : return zend_pre_incdec_property_helper_SPEC_CV_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22198 : }
22199 :
22200 : static int ZEND_PRE_DEC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22201 0 : {
22202 0 : return zend_pre_incdec_property_helper_SPEC_CV_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22203 : }
22204 :
22205 : static int zend_post_incdec_property_helper_SPEC_CV_TMP(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
22206 0 : {
22207 0 : zend_op *opline = EX(opline);
22208 : zend_free_op free_op2;
22209 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
22210 : zval *object;
22211 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22212 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
22213 0 : int have_get_ptr = 0;
22214 :
22215 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
22216 0 : object = *object_ptr;
22217 :
22218 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
22219 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
22220 0 : zval_dtor(free_op2.var);
22221 0 : *retval = *EG(uninitialized_zval_ptr);
22222 :
22223 0 : ZEND_VM_NEXT_OPCODE();
22224 : }
22225 :
22226 : /* here we are sure we are dealing with an object */
22227 :
22228 : if (1) {
22229 0 : MAKE_REAL_ZVAL_PTR(property);
22230 : }
22231 :
22232 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
22233 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
22234 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
22235 0 : have_get_ptr = 1;
22236 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
22237 :
22238 0 : *retval = **zptr;
22239 0 : zendi_zval_copy_ctor(*retval);
22240 :
22241 0 : incdec_op(*zptr);
22242 :
22243 : }
22244 : }
22245 :
22246 0 : if (!have_get_ptr) {
22247 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
22248 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
22249 : zval *z_copy;
22250 :
22251 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
22252 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
22253 :
22254 0 : if (z->refcount == 0) {
22255 0 : zval_dtor(z);
22256 0 : FREE_ZVAL(z);
22257 : }
22258 0 : z = value;
22259 : }
22260 0 : *retval = *z;
22261 0 : zendi_zval_copy_ctor(*retval);
22262 0 : ALLOC_ZVAL(z_copy);
22263 0 : *z_copy = *z;
22264 0 : zendi_zval_copy_ctor(*z_copy);
22265 0 : INIT_PZVAL(z_copy);
22266 0 : incdec_op(z_copy);
22267 0 : z->refcount++;
22268 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
22269 0 : zval_ptr_dtor(&z_copy);
22270 0 : zval_ptr_dtor(&z);
22271 : } else {
22272 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
22273 0 : *retval = *EG(uninitialized_zval_ptr);
22274 : }
22275 : }
22276 :
22277 : if (1) {
22278 0 : zval_ptr_dtor(&property);
22279 : } else {
22280 : zval_dtor(free_op2.var);
22281 : }
22282 :
22283 0 : ZEND_VM_NEXT_OPCODE();
22284 : }
22285 :
22286 : static int ZEND_POST_INC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22287 0 : {
22288 0 : return zend_post_incdec_property_helper_SPEC_CV_TMP(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22289 : }
22290 :
22291 : static int ZEND_POST_DEC_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22292 0 : {
22293 0 : return zend_post_incdec_property_helper_SPEC_CV_TMP(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22294 : }
22295 :
22296 : static int ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22297 72 : {
22298 72 : zend_op *opline = EX(opline);
22299 : zend_free_op free_op2;
22300 72 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22301 :
22302 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
22303 : IS_CV != IS_CV &&
22304 : EX_T(opline->op1.u.var).var.ptr_ptr) {
22305 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
22306 : }
22307 72 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 1, BP_VAR_R TSRMLS_CC);
22308 72 : zval_dtor(free_op2.var);
22309 :
22310 72 : ZEND_VM_NEXT_OPCODE();
22311 : }
22312 :
22313 : static int ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22314 4 : {
22315 4 : zend_op *opline = EX(opline);
22316 : zend_free_op free_op1, free_op2;
22317 4 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22318 :
22319 4 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 1, BP_VAR_W TSRMLS_CC);
22320 4 : zval_dtor(free_op2.var);
22321 : if (IS_CV == IS_VAR && 0 &&
22322 : READY_TO_DESTROY(free_op1.var) &&
22323 : !RETURN_VALUE_UNUSED(&opline->result)) {
22324 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22325 : }
22326 :
22327 4 : ZEND_VM_NEXT_OPCODE();
22328 : }
22329 :
22330 : static int ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22331 0 : {
22332 0 : zend_op *opline = EX(opline);
22333 : zend_free_op free_op1, free_op2;
22334 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22335 :
22336 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 1, BP_VAR_RW TSRMLS_CC);
22337 0 : zval_dtor(free_op2.var);
22338 : if (IS_CV == IS_VAR && 0 &&
22339 : READY_TO_DESTROY(free_op1.var) &&
22340 : !RETURN_VALUE_UNUSED(&opline->result)) {
22341 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22342 : }
22343 :
22344 0 : ZEND_VM_NEXT_OPCODE();
22345 : }
22346 :
22347 : static int ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22348 0 : {
22349 0 : zend_op *opline = EX(opline);
22350 : zend_free_op free_op2;
22351 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22352 :
22353 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 1, BP_VAR_IS TSRMLS_CC);
22354 0 : zval_dtor(free_op2.var);
22355 :
22356 0 : ZEND_VM_NEXT_OPCODE();
22357 : }
22358 :
22359 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22360 0 : {
22361 0 : zend_op *opline = EX(opline);
22362 : zend_free_op free_op1, free_op2;
22363 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
22364 : zval *dim;
22365 :
22366 : if (IS_TMP_VAR == IS_UNUSED && type == BP_VAR_R) {
22367 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
22368 : }
22369 0 : dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22370 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 1, type TSRMLS_CC);
22371 0 : zval_dtor(free_op2.var);
22372 : if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
22373 : READY_TO_DESTROY(free_op1.var) &&
22374 : !RETURN_VALUE_UNUSED(&opline->result)) {
22375 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22376 : }
22377 :
22378 0 : ZEND_VM_NEXT_OPCODE();
22379 : }
22380 :
22381 : static int ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22382 0 : {
22383 0 : zend_op *opline = EX(opline);
22384 : zend_free_op free_op1, free_op2;
22385 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
22386 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22387 :
22388 : /* Not needed in DIM_UNSET
22389 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK) {
22390 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
22391 : }
22392 : */
22393 : if (IS_CV == IS_CV) {
22394 0 : if (container != &EG(uninitialized_zval_ptr)) {
22395 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
22396 : }
22397 : }
22398 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 1, BP_VAR_UNSET TSRMLS_CC);
22399 0 : zval_dtor(free_op2.var);
22400 : if (IS_CV == IS_VAR && 0 &&
22401 : READY_TO_DESTROY(free_op1.var) &&
22402 : !RETURN_VALUE_UNUSED(&opline->result)) {
22403 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22404 : }
22405 :
22406 0 : if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) {
22407 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
22408 : } else {
22409 : zend_free_op free_res;
22410 :
22411 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
22412 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
22413 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
22414 : }
22415 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
22416 0 : FREE_OP_VAR_PTR(free_res);
22417 : }
22418 0 : ZEND_VM_NEXT_OPCODE();
22419 : }
22420 :
22421 : static int zend_fetch_property_address_read_helper_SPEC_CV_TMP(int type, ZEND_OPCODE_HANDLER_ARGS)
22422 0 : {
22423 0 : zend_op *opline = EX(opline);
22424 : zval *container;
22425 : zval **retval;
22426 :
22427 :
22428 0 : retval = &EX_T(opline->result.u.var).var.ptr;
22429 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
22430 :
22431 0 : container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC);
22432 :
22433 0 : if (container == EG(error_zval_ptr)) {
22434 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
22435 0 : *retval = EG(error_zval_ptr);
22436 0 : PZVAL_LOCK(*retval);
22437 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22438 : }
22439 :
22440 0 : ZEND_VM_NEXT_OPCODE();
22441 : }
22442 :
22443 :
22444 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
22445 0 : if (type != BP_VAR_IS) {
22446 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
22447 : }
22448 0 : *retval = EG(uninitialized_zval_ptr);
22449 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
22450 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22451 : } else {
22452 : zend_free_op free_op2;
22453 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22454 :
22455 : if (1) {
22456 0 : MAKE_REAL_ZVAL_PTR(offset);
22457 : }
22458 :
22459 : /* here we are sure we are dealing with an object */
22460 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
22461 :
22462 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
22463 0 : zval_dtor(*retval);
22464 0 : FREE_ZVAL(*retval);
22465 : } else {
22466 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
22467 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22468 : }
22469 :
22470 : if (1) {
22471 0 : zval_ptr_dtor(&offset);
22472 : } else {
22473 : zval_dtor(free_op2.var);
22474 : }
22475 : }
22476 :
22477 0 : ZEND_VM_NEXT_OPCODE();
22478 : }
22479 :
22480 : static int ZEND_FETCH_OBJ_R_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22481 0 : {
22482 0 : return zend_fetch_property_address_read_helper_SPEC_CV_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22483 : }
22484 :
22485 : static int ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22486 0 : {
22487 0 : zend_op *opline = EX(opline);
22488 : zend_free_op free_op1, free_op2;
22489 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22490 :
22491 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) {
22492 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
22493 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
22494 : }
22495 :
22496 : if (1) {
22497 0 : MAKE_REAL_ZVAL_PTR(property);
22498 : }
22499 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
22500 : if (1) {
22501 0 : zval_ptr_dtor(&property);
22502 : } else {
22503 : zval_dtor(free_op2.var);
22504 : }
22505 : if (IS_CV == IS_VAR && 0 &&
22506 : READY_TO_DESTROY(free_op1.var) &&
22507 : !RETURN_VALUE_UNUSED(&opline->result)) {
22508 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22509 : }
22510 :
22511 0 : ZEND_VM_NEXT_OPCODE();
22512 : }
22513 :
22514 : static int ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22515 0 : {
22516 0 : zend_op *opline = EX(opline);
22517 : zend_free_op free_op1, free_op2;
22518 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22519 :
22520 : if (1) {
22521 0 : MAKE_REAL_ZVAL_PTR(property);
22522 : }
22523 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
22524 : if (1) {
22525 0 : zval_ptr_dtor(&property);
22526 : } else {
22527 : zval_dtor(free_op2.var);
22528 : }
22529 : if (IS_CV == IS_VAR && 0 &&
22530 : READY_TO_DESTROY(free_op1.var) &&
22531 : !RETURN_VALUE_UNUSED(&opline->result)) {
22532 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22533 : }
22534 :
22535 0 : ZEND_VM_NEXT_OPCODE();
22536 : }
22537 :
22538 : static int ZEND_FETCH_OBJ_IS_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22539 0 : {
22540 0 : return zend_fetch_property_address_read_helper_SPEC_CV_TMP(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22541 : }
22542 :
22543 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22544 0 : {
22545 0 : zend_op *opline = EX(opline);
22546 :
22547 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
22548 : /* Behave like FETCH_OBJ_W */
22549 : zend_free_op free_op1, free_op2;
22550 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22551 :
22552 : if (1) {
22553 0 : MAKE_REAL_ZVAL_PTR(property);
22554 : }
22555 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
22556 : if (1) {
22557 0 : zval_ptr_dtor(&property);
22558 : } else {
22559 : zval_dtor(free_op2.var);
22560 : }
22561 : if (IS_CV == IS_VAR && 0 &&
22562 : READY_TO_DESTROY(free_op1.var) &&
22563 : !RETURN_VALUE_UNUSED(&opline->result)) {
22564 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22565 : }
22566 :
22567 0 : ZEND_VM_NEXT_OPCODE();
22568 : } else {
22569 0 : return zend_fetch_property_address_read_helper_SPEC_CV_TMP(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22570 : }
22571 : }
22572 :
22573 : static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22574 0 : {
22575 0 : zend_op *opline = EX(opline);
22576 : zend_free_op free_op1, free_op2, free_res;
22577 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
22578 0 : zval *property = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22579 :
22580 : if (IS_CV == IS_CV) {
22581 0 : if (container != &EG(uninitialized_zval_ptr)) {
22582 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
22583 : }
22584 : }
22585 : if (1) {
22586 0 : MAKE_REAL_ZVAL_PTR(property);
22587 : }
22588 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
22589 : if (1) {
22590 0 : zval_ptr_dtor(&property);
22591 : } else {
22592 : zval_dtor(free_op2.var);
22593 : }
22594 : if (IS_CV == IS_VAR && 0 &&
22595 : READY_TO_DESTROY(free_op1.var) &&
22596 : !RETURN_VALUE_UNUSED(&opline->result)) {
22597 : AI_USE_PTR(EX_T(opline->result.u.var).var);
22598 : }
22599 :
22600 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
22601 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
22602 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
22603 : }
22604 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
22605 0 : FREE_OP_VAR_PTR(free_res);
22606 0 : ZEND_VM_NEXT_OPCODE();
22607 : }
22608 :
22609 : static int ZEND_ASSIGN_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22610 0 : {
22611 0 : zend_op *opline = EX(opline);
22612 0 : zend_op *op_data = opline+1;
22613 :
22614 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
22615 :
22616 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
22617 :
22618 : /* assign_obj has two opcodes! */
22619 0 : ZEND_VM_INC_OPCODE();
22620 0 : ZEND_VM_NEXT_OPCODE();
22621 : }
22622 :
22623 : static int ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22624 0 : {
22625 0 : zend_op *opline = EX(opline);
22626 0 : zend_op *op_data = opline+1;
22627 :
22628 : zval **object_ptr;
22629 :
22630 : if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
22631 : /* not an array offset */
22632 0 : object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
22633 : } else {
22634 : object_ptr = NULL;
22635 : }
22636 :
22637 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
22638 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
22639 : } else {
22640 : zend_free_op free_op2, free_op_data1;
22641 : zval *value;
22642 0 : zval *dim = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22643 :
22644 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 1, BP_VAR_W TSRMLS_CC);
22645 0 : zval_dtor(free_op2.var);
22646 :
22647 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
22648 0 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
22649 0 : FREE_OP_IF_VAR(free_op_data1);
22650 : }
22651 :
22652 : /* assign_dim has two opcodes! */
22653 0 : ZEND_VM_INC_OPCODE();
22654 0 : ZEND_VM_NEXT_OPCODE();
22655 : }
22656 :
22657 : static int ZEND_ASSIGN_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22658 14887 : {
22659 14887 : zend_op *opline = EX(opline);
22660 : zend_free_op free_op2;
22661 14887 : zval *value = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22662 :
22663 14887 : zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (1?IS_TMP_VAR:IS_TMP_VAR), EX(Ts) TSRMLS_CC);
22664 : /* zend_assign_to_variable() always takes care of op2, never free it! */
22665 :
22666 14887 : ZEND_VM_NEXT_OPCODE();
22667 : }
22668 :
22669 : static int ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22670 0 : {
22671 0 : zend_op *opline = EX(opline);
22672 : zval *function_name;
22673 : char *function_name_strval;
22674 : int function_name_strlen;
22675 : zend_free_op free_op2;
22676 :
22677 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
22678 :
22679 0 : function_name = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22680 :
22681 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
22682 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
22683 : }
22684 :
22685 0 : function_name_strval = Z_STRVAL_P(function_name);
22686 0 : function_name_strlen = Z_STRLEN_P(function_name);
22687 :
22688 0 : EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
22689 :
22690 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
22691 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
22692 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
22693 : }
22694 :
22695 : /* First, locate the function. */
22696 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
22697 0 : if (!EX(fbc)) {
22698 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
22699 : }
22700 : } else {
22701 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
22702 : }
22703 :
22704 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
22705 0 : EX(object) = NULL;
22706 : } else {
22707 0 : if (!PZVAL_IS_REF(EX(object))) {
22708 0 : EX(object)->refcount++; /* For $this pointer */
22709 : } else {
22710 : zval *this_ptr;
22711 0 : ALLOC_ZVAL(this_ptr);
22712 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
22713 0 : zval_copy_ctor(this_ptr);
22714 0 : EX(object) = this_ptr;
22715 : }
22716 : }
22717 :
22718 0 : zval_dtor(free_op2.var);
22719 :
22720 0 : ZEND_VM_NEXT_OPCODE();
22721 : }
22722 :
22723 : static int ZEND_CASE_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22724 6 : {
22725 6 : zend_op *opline = EX(opline);
22726 6 : int switch_expr_is_overloaded=0;
22727 : zend_free_op free_op2;
22728 :
22729 : if (IS_CV==IS_VAR) {
22730 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
22731 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
22732 : } else {
22733 : switch_expr_is_overloaded = 1;
22734 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
22735 : }
22736 : }
22737 6 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
22738 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
22739 : _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
22740 :
22741 6 : zval_dtor(free_op2.var);
22742 6 : if (switch_expr_is_overloaded) {
22743 : /* We only free op1 if this is a string offset,
22744 : * Since if it is a TMP_VAR, it'll be reused by
22745 : * other CASE opcodes (whereas string offsets
22746 : * are allocated at each get_zval_ptr())
22747 : */
22748 :
22749 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
22750 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
22751 : }
22752 6 : ZEND_VM_NEXT_OPCODE();
22753 : }
22754 :
22755 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22756 0 : {
22757 0 : zend_op *opline = EX(opline);
22758 : zend_free_op free_op2;
22759 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
22760 : zval *expr_ptr;
22761 0 : zval *offset=_get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22762 :
22763 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
22764 0 : zval **expr_ptr_ptr = NULL;
22765 :
22766 0 : if (opline->extended_value) {
22767 0 : expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
22768 0 : expr_ptr = *expr_ptr_ptr;
22769 : } else {
22770 0 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
22771 : }
22772 : #else
22773 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
22774 : #endif
22775 :
22776 : if (0) { /* temporary variable */
22777 : zval *new_expr;
22778 :
22779 : ALLOC_ZVAL(new_expr);
22780 : INIT_PZVAL_COPY(new_expr, expr_ptr);
22781 : expr_ptr = new_expr;
22782 : } else {
22783 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
22784 0 : if (opline->extended_value) {
22785 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
22786 0 : expr_ptr = *expr_ptr_ptr;
22787 0 : expr_ptr->refcount++;
22788 : } else
22789 : #endif
22790 0 : if (PZVAL_IS_REF(expr_ptr)) {
22791 : zval *new_expr;
22792 :
22793 0 : ALLOC_ZVAL(new_expr);
22794 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
22795 0 : expr_ptr = new_expr;
22796 0 : zendi_zval_copy_ctor(*expr_ptr);
22797 : } else {
22798 0 : expr_ptr->refcount++;
22799 : }
22800 : }
22801 0 : if (offset) {
22802 0 : switch (Z_TYPE_P(offset)) {
22803 : case IS_DOUBLE:
22804 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
22805 0 : break;
22806 : case IS_LONG:
22807 : case IS_BOOL:
22808 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
22809 0 : break;
22810 : case IS_STRING:
22811 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
22812 0 : break;
22813 : case IS_NULL:
22814 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
22815 0 : break;
22816 : default:
22817 0 : zend_error(E_WARNING, "Illegal offset type");
22818 0 : zval_ptr_dtor(&expr_ptr);
22819 : /* do nothing */
22820 : break;
22821 : }
22822 0 : zval_dtor(free_op2.var);
22823 : } else {
22824 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
22825 : }
22826 0 : if (opline->extended_value) {
22827 :
22828 : } else {
22829 :
22830 : }
22831 0 : ZEND_VM_NEXT_OPCODE();
22832 : }
22833 :
22834 : static int ZEND_INIT_ARRAY_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22835 0 : {
22836 0 : zend_op *opline = EX(opline);
22837 :
22838 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
22839 : if (IS_CV == IS_UNUSED) {
22840 : ZEND_VM_NEXT_OPCODE();
22841 : #if 0 || IS_CV != IS_UNUSED
22842 : } else {
22843 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
22844 : #endif
22845 : }
22846 : }
22847 :
22848 : static int ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22849 0 : {
22850 0 : zend_op *opline = EX(opline);
22851 : zend_free_op free_op2;
22852 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
22853 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22854 : long index;
22855 :
22856 0 : if (container) {
22857 0 : if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
22858 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
22859 : }
22860 0 : switch (Z_TYPE_PP(container)) {
22861 : case IS_ARRAY: {
22862 0 : HashTable *ht = Z_ARRVAL_PP(container);
22863 :
22864 0 : switch (Z_TYPE_P(offset)) {
22865 : case IS_DOUBLE:
22866 0 : index = (long) Z_DVAL_P(offset);
22867 0 : zend_hash_index_del(ht, index);
22868 0 : break;
22869 : case IS_RESOURCE:
22870 : case IS_BOOL:
22871 : case IS_LONG:
22872 0 : index = Z_LVAL_P(offset);
22873 0 : zend_hash_index_del(ht, index);
22874 0 : break;
22875 : case IS_STRING:
22876 : if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
22877 : offset->refcount++;
22878 : }
22879 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
22880 : ht == &EG(symbol_table)) {
22881 : zend_execute_data *ex;
22882 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
22883 :
22884 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
22885 0 : if (ex->op_array && ex->symbol_table == ht) {
22886 : int i;
22887 :
22888 0 : for (i = 0; i < ex->op_array->last_var; i++) {
22889 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
22890 : ex->op_array->vars[i].name_len == offset->value.str.len &&
22891 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
22892 0 : ex->CVs[i] = NULL;
22893 0 : break;
22894 : }
22895 : }
22896 : }
22897 : }
22898 : }
22899 : if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) {
22900 : zval_ptr_dtor(&offset);
22901 : }
22902 0 : break;
22903 : case IS_NULL:
22904 0 : zend_hash_del(ht, "", sizeof(""));
22905 0 : break;
22906 : default:
22907 0 : zend_error(E_WARNING, "Illegal offset type in unset");
22908 : break;
22909 : }
22910 0 : zval_dtor(free_op2.var);
22911 0 : break;
22912 : }
22913 : case IS_OBJECT:
22914 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
22915 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
22916 : }
22917 : if (1) {
22918 0 : MAKE_REAL_ZVAL_PTR(offset);
22919 : }
22920 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
22921 : if (1) {
22922 0 : zval_ptr_dtor(&offset);
22923 : } else {
22924 : zval_dtor(free_op2.var);
22925 : }
22926 0 : break;
22927 : case IS_STRING:
22928 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
22929 : ZEND_VM_CONTINUE(); /* bailed out before */
22930 : default:
22931 0 : zval_dtor(free_op2.var);
22932 : break;
22933 : }
22934 : } else {
22935 0 : zval_dtor(free_op2.var);
22936 : }
22937 :
22938 0 : ZEND_VM_NEXT_OPCODE();
22939 : }
22940 :
22941 : static int ZEND_UNSET_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
22942 0 : {
22943 0 : zend_op *opline = EX(opline);
22944 : zend_free_op free_op2;
22945 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
22946 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22947 :
22948 0 : if (container) {
22949 0 : if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
22950 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
22951 : }
22952 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
22953 : if (1) {
22954 0 : MAKE_REAL_ZVAL_PTR(offset);
22955 : }
22956 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
22957 : if (1) {
22958 0 : zval_ptr_dtor(&offset);
22959 : } else {
22960 : zval_dtor(free_op2.var);
22961 : }
22962 : } else {
22963 0 : zval_dtor(free_op2.var);
22964 : }
22965 : } else {
22966 0 : zval_dtor(free_op2.var);
22967 : }
22968 :
22969 0 : ZEND_VM_NEXT_OPCODE();
22970 : }
22971 :
22972 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
22973 0 : {
22974 0 : zend_op *opline = EX(opline);
22975 :
22976 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
22977 0 : zval **value = NULL;
22978 0 : int result = 0;
22979 : long index;
22980 :
22981 0 : if (container) {
22982 : zend_free_op free_op2;
22983 0 : zval *offset = _get_zval_ptr_tmp(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
22984 :
22985 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
22986 : HashTable *ht;
22987 0 : int isset = 0;
22988 :
22989 0 : ht = Z_ARRVAL_PP(container);
22990 :
22991 0 : switch (Z_TYPE_P(offset)) {
22992 : case IS_DOUBLE:
22993 0 : index = (long) Z_DVAL_P(offset);
22994 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
22995 0 : isset = 1;
22996 : }
22997 0 : break;
22998 : case IS_RESOURCE:
22999 : case IS_BOOL:
23000 : case IS_LONG:
23001 0 : index = Z_LVAL_P(offset);
23002 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
23003 0 : isset = 1;
23004 : }
23005 0 : break;
23006 : case IS_STRING:
23007 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
23008 0 : isset = 1;
23009 : }
23010 0 : break;
23011 : case IS_NULL:
23012 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
23013 0 : isset = 1;
23014 : }
23015 0 : break;
23016 : default:
23017 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
23018 :
23019 : break;
23020 : }
23021 :
23022 0 : switch (opline->extended_value) {
23023 : case ZEND_ISSET:
23024 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
23025 0 : result = 0;
23026 : } else {
23027 0 : result = isset;
23028 : }
23029 0 : break;
23030 : case ZEND_ISEMPTY:
23031 0 : if (!isset || !i_zend_is_true(*value)) {
23032 0 : result = 0;
23033 : } else {
23034 0 : result = 1;
23035 : }
23036 : break;
23037 : }
23038 0 : zval_dtor(free_op2.var);
23039 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
23040 : if (1) {
23041 0 : MAKE_REAL_ZVAL_PTR(offset);
23042 : }
23043 0 : if (prop_dim) {
23044 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
23045 : } else {
23046 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
23047 : }
23048 : if (1) {
23049 0 : zval_ptr_dtor(&offset);
23050 : } else {
23051 : zval_dtor(free_op2.var);
23052 : }
23053 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
23054 : zval tmp;
23055 :
23056 0 : if (Z_TYPE_P(offset) != IS_LONG) {
23057 0 : tmp = *offset;
23058 0 : zval_copy_ctor(&tmp);
23059 0 : convert_to_long(&tmp);
23060 0 : offset = &tmp;
23061 : }
23062 0 : if (Z_TYPE_P(offset) == IS_LONG) {
23063 0 : switch (opline->extended_value) {
23064 : case ZEND_ISSET:
23065 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
23066 0 : result = 1;
23067 : }
23068 0 : break;
23069 : case ZEND_ISEMPTY:
23070 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
23071 0 : result = 1;
23072 : }
23073 : break;
23074 : }
23075 : }
23076 0 : zval_dtor(free_op2.var);
23077 : } else {
23078 0 : zval_dtor(free_op2.var);
23079 : }
23080 : }
23081 :
23082 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
23083 :
23084 0 : switch (opline->extended_value) {
23085 : case ZEND_ISSET:
23086 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
23087 0 : break;
23088 : case ZEND_ISEMPTY:
23089 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
23090 : break;
23091 : }
23092 :
23093 0 : ZEND_VM_NEXT_OPCODE();
23094 : }
23095 :
23096 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23097 0 : {
23098 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23099 : }
23100 :
23101 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23102 0 : {
23103 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_TMP(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23104 : }
23105 :
23106 : static int ZEND_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23107 0 : {
23108 0 : zend_op *opline = EX(opline);
23109 : zend_free_op free_op2;
23110 :
23111 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
23112 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23113 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23114 :
23115 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23116 0 : ZEND_VM_NEXT_OPCODE();
23117 : }
23118 :
23119 : static int ZEND_SUB_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23120 1 : {
23121 1 : zend_op *opline = EX(opline);
23122 : zend_free_op free_op2;
23123 :
23124 1 : sub_function(&EX_T(opline->result.u.var).tmp_var,
23125 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23126 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23127 :
23128 1 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23129 1 : ZEND_VM_NEXT_OPCODE();
23130 : }
23131 :
23132 : static int ZEND_MUL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23133 0 : {
23134 0 : zend_op *opline = EX(opline);
23135 : zend_free_op free_op2;
23136 :
23137 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
23138 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23139 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23140 :
23141 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23142 0 : ZEND_VM_NEXT_OPCODE();
23143 : }
23144 :
23145 : static int ZEND_DIV_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23146 0 : {
23147 0 : zend_op *opline = EX(opline);
23148 : zend_free_op free_op2;
23149 :
23150 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
23151 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23152 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23153 :
23154 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23155 0 : ZEND_VM_NEXT_OPCODE();
23156 : }
23157 :
23158 : static int ZEND_MOD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23159 0 : {
23160 0 : zend_op *opline = EX(opline);
23161 : zend_free_op free_op2;
23162 :
23163 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
23164 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23165 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23166 :
23167 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23168 0 : ZEND_VM_NEXT_OPCODE();
23169 : }
23170 :
23171 : static int ZEND_SL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23172 0 : {
23173 0 : zend_op *opline = EX(opline);
23174 : zend_free_op free_op2;
23175 :
23176 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
23177 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23178 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23179 :
23180 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23181 0 : ZEND_VM_NEXT_OPCODE();
23182 : }
23183 :
23184 : static int ZEND_SR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23185 0 : {
23186 0 : zend_op *opline = EX(opline);
23187 : zend_free_op free_op2;
23188 :
23189 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
23190 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23191 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23192 :
23193 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23194 0 : ZEND_VM_NEXT_OPCODE();
23195 : }
23196 :
23197 : static int ZEND_CONCAT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23198 0 : {
23199 0 : zend_op *opline = EX(opline);
23200 : zend_free_op free_op2;
23201 :
23202 0 : concat_function(&EX_T(opline->result.u.var).tmp_var,
23203 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23204 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23205 :
23206 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23207 0 : ZEND_VM_NEXT_OPCODE();
23208 : }
23209 :
23210 : static int ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23211 0 : {
23212 0 : zend_op *opline = EX(opline);
23213 : zend_free_op free_op2;
23214 :
23215 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
23216 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23217 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23218 :
23219 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23220 0 : ZEND_VM_NEXT_OPCODE();
23221 : }
23222 :
23223 : static int ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23224 0 : {
23225 0 : zend_op *opline = EX(opline);
23226 : zend_free_op free_op2;
23227 :
23228 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
23229 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23230 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23231 :
23232 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23233 0 : ZEND_VM_NEXT_OPCODE();
23234 : }
23235 :
23236 : static int ZEND_IS_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23237 3 : {
23238 3 : zend_op *opline = EX(opline);
23239 : zend_free_op free_op2;
23240 :
23241 3 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
23242 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23243 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23244 :
23245 3 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23246 3 : ZEND_VM_NEXT_OPCODE();
23247 : }
23248 :
23249 : static int ZEND_IS_NOT_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23250 0 : {
23251 0 : zend_op *opline = EX(opline);
23252 : zend_free_op free_op2;
23253 :
23254 0 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
23255 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23256 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23257 :
23258 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23259 0 : ZEND_VM_NEXT_OPCODE();
23260 : }
23261 :
23262 : static int ZEND_IS_SMALLER_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23263 0 : {
23264 0 : zend_op *opline = EX(opline);
23265 : zend_free_op free_op2;
23266 :
23267 0 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
23268 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23269 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23270 :
23271 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23272 0 : ZEND_VM_NEXT_OPCODE();
23273 : }
23274 :
23275 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23276 0 : {
23277 0 : zend_op *opline = EX(opline);
23278 : zend_free_op free_op2;
23279 :
23280 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
23281 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23282 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23283 :
23284 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23285 0 : ZEND_VM_NEXT_OPCODE();
23286 : }
23287 :
23288 : static int ZEND_BW_OR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23289 0 : {
23290 0 : zend_op *opline = EX(opline);
23291 : zend_free_op free_op2;
23292 :
23293 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
23294 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23295 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23296 :
23297 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23298 0 : ZEND_VM_NEXT_OPCODE();
23299 : }
23300 :
23301 : static int ZEND_BW_AND_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23302 0 : {
23303 0 : zend_op *opline = EX(opline);
23304 : zend_free_op free_op2;
23305 :
23306 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
23307 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23308 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23309 :
23310 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23311 0 : ZEND_VM_NEXT_OPCODE();
23312 : }
23313 :
23314 : static int ZEND_BW_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23315 0 : {
23316 0 : zend_op *opline = EX(opline);
23317 : zend_free_op free_op2;
23318 :
23319 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
23320 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23321 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23322 :
23323 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23324 0 : ZEND_VM_NEXT_OPCODE();
23325 : }
23326 :
23327 : static int ZEND_BOOL_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23328 0 : {
23329 0 : zend_op *opline = EX(opline);
23330 : zend_free_op free_op2;
23331 :
23332 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
23333 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
23334 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
23335 :
23336 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23337 0 : ZEND_VM_NEXT_OPCODE();
23338 : }
23339 :
23340 : static int zend_binary_assign_op_obj_helper_SPEC_CV_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
23341 0 : {
23342 0 : zend_op *opline = EX(opline);
23343 0 : zend_op *op_data = opline+1;
23344 : zend_free_op free_op2, free_op_data1;
23345 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
23346 : zval *object;
23347 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23348 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
23349 0 : znode *result = &opline->result;
23350 0 : zval **retval = &EX_T(result->u.var).var.ptr;
23351 0 : int have_get_ptr = 0;
23352 :
23353 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
23354 0 : make_real_object(object_ptr TSRMLS_CC);
23355 0 : object = *object_ptr;
23356 :
23357 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
23358 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
23359 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23360 0 : FREE_OP(free_op_data1);
23361 :
23362 0 : if (!RETURN_VALUE_UNUSED(result)) {
23363 0 : *retval = EG(uninitialized_zval_ptr);
23364 0 : PZVAL_LOCK(*retval);
23365 : }
23366 : } else {
23367 : /* here we are sure we are dealing with an object */
23368 : if (0) {
23369 : MAKE_REAL_ZVAL_PTR(property);
23370 : }
23371 :
23372 : /* here property is a string */
23373 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
23374 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
23375 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
23376 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
23377 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
23378 :
23379 0 : have_get_ptr = 1;
23380 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
23381 0 : if (!RETURN_VALUE_UNUSED(result)) {
23382 0 : *retval = *zptr;
23383 0 : PZVAL_LOCK(*retval);
23384 : }
23385 : }
23386 : }
23387 :
23388 0 : if (!have_get_ptr) {
23389 0 : zval *z = NULL;
23390 :
23391 0 : switch (opline->extended_value) {
23392 : case ZEND_ASSIGN_OBJ:
23393 0 : if (Z_OBJ_HT_P(object)->read_property) {
23394 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
23395 : }
23396 0 : break;
23397 : case ZEND_ASSIGN_DIM:
23398 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
23399 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
23400 : }
23401 : break;
23402 : }
23403 0 : if (z) {
23404 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
23405 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
23406 :
23407 0 : if (z->refcount == 0) {
23408 0 : zval_dtor(z);
23409 0 : FREE_ZVAL(z);
23410 : }
23411 0 : z = value;
23412 : }
23413 0 : z->refcount++;
23414 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
23415 0 : binary_op(z, z, value TSRMLS_CC);
23416 0 : switch (opline->extended_value) {
23417 : case ZEND_ASSIGN_OBJ:
23418 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
23419 0 : break;
23420 : case ZEND_ASSIGN_DIM:
23421 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
23422 : break;
23423 : }
23424 0 : if (!RETURN_VALUE_UNUSED(result)) {
23425 0 : *retval = z;
23426 0 : PZVAL_LOCK(*retval);
23427 : }
23428 0 : zval_ptr_dtor(&z);
23429 : } else {
23430 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
23431 0 : if (!RETURN_VALUE_UNUSED(result)) {
23432 0 : *retval = EG(uninitialized_zval_ptr);
23433 0 : PZVAL_LOCK(*retval);
23434 : }
23435 : }
23436 : }
23437 :
23438 : if (0) {
23439 : zval_ptr_dtor(&property);
23440 : } else {
23441 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23442 : }
23443 0 : FREE_OP(free_op_data1);
23444 : }
23445 :
23446 : /* assign_obj has two opcodes! */
23447 0 : ZEND_VM_INC_OPCODE();
23448 0 : ZEND_VM_NEXT_OPCODE();
23449 : }
23450 :
23451 : static int zend_binary_assign_op_helper_SPEC_CV_VAR(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
23452 5111 : {
23453 5111 : zend_op *opline = EX(opline);
23454 : zend_free_op free_op2, free_op_data2, free_op_data1;
23455 : zval **var_ptr;
23456 : zval *value;
23457 5111 : zend_bool increment_opline = 0;
23458 :
23459 5111 : switch (opline->extended_value) {
23460 : case ZEND_ASSIGN_OBJ:
23461 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23462 : break;
23463 : case ZEND_ASSIGN_DIM: {
23464 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
23465 :
23466 : if (object_ptr && IS_CV != IS_CV && !0) {
23467 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
23468 : }
23469 :
23470 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
23471 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_VAR(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23472 : } else {
23473 0 : zend_op *op_data = opline+1;
23474 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23475 :
23476 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
23477 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
23478 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
23479 0 : increment_opline = 1;
23480 : }
23481 : }
23482 0 : break;
23483 : default:
23484 5111 : value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23485 5111 : var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
23486 : /* do nothing */
23487 : break;
23488 : }
23489 :
23490 5111 : if (!var_ptr) {
23491 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
23492 : }
23493 :
23494 5111 : if (*var_ptr == EG(error_zval_ptr)) {
23495 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
23496 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
23497 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
23498 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23499 : }
23500 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23501 :
23502 0 : if (increment_opline) {
23503 0 : ZEND_VM_INC_OPCODE();
23504 : }
23505 0 : ZEND_VM_NEXT_OPCODE();
23506 : }
23507 :
23508 5111 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
23509 :
23510 5111 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
23511 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
23512 : /* proxy object */
23513 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
23514 0 : objval->refcount++;
23515 0 : binary_op(objval, objval, value TSRMLS_CC);
23516 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
23517 0 : zval_ptr_dtor(&objval);
23518 : } else {
23519 5111 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
23520 : }
23521 :
23522 5111 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
23523 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
23524 0 : PZVAL_LOCK(*var_ptr);
23525 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23526 : }
23527 5111 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23528 :
23529 5111 : if (increment_opline) {
23530 0 : ZEND_VM_INC_OPCODE();
23531 0 : FREE_OP(free_op_data1);
23532 0 : FREE_OP_VAR_PTR(free_op_data2);
23533 : }
23534 :
23535 5111 : ZEND_VM_NEXT_OPCODE();
23536 : }
23537 :
23538 : static int ZEND_ASSIGN_ADD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23539 0 : {
23540 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23541 : }
23542 :
23543 : static int ZEND_ASSIGN_SUB_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23544 0 : {
23545 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23546 : }
23547 :
23548 : static int ZEND_ASSIGN_MUL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23549 0 : {
23550 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23551 : }
23552 :
23553 : static int ZEND_ASSIGN_DIV_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23554 0 : {
23555 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23556 : }
23557 :
23558 : static int ZEND_ASSIGN_MOD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23559 0 : {
23560 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23561 : }
23562 :
23563 : static int ZEND_ASSIGN_SL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23564 0 : {
23565 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23566 : }
23567 :
23568 : static int ZEND_ASSIGN_SR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23569 0 : {
23570 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23571 : }
23572 :
23573 : static int ZEND_ASSIGN_CONCAT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23574 5111 : {
23575 5111 : return zend_binary_assign_op_helper_SPEC_CV_VAR(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23576 : }
23577 :
23578 : static int ZEND_ASSIGN_BW_OR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23579 0 : {
23580 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23581 : }
23582 :
23583 : static int ZEND_ASSIGN_BW_AND_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23584 0 : {
23585 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23586 : }
23587 :
23588 : static int ZEND_ASSIGN_BW_XOR_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23589 0 : {
23590 0 : return zend_binary_assign_op_helper_SPEC_CV_VAR(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23591 : }
23592 :
23593 : static int zend_pre_incdec_property_helper_SPEC_CV_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
23594 0 : {
23595 0 : zend_op *opline = EX(opline);
23596 : zend_free_op free_op2;
23597 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
23598 : zval *object;
23599 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23600 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
23601 0 : int have_get_ptr = 0;
23602 :
23603 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
23604 0 : object = *object_ptr;
23605 :
23606 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
23607 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
23608 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23609 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
23610 0 : *retval = EG(uninitialized_zval_ptr);
23611 0 : PZVAL_LOCK(*retval);
23612 : }
23613 :
23614 0 : ZEND_VM_NEXT_OPCODE();
23615 : }
23616 :
23617 : /* here we are sure we are dealing with an object */
23618 :
23619 : if (0) {
23620 : MAKE_REAL_ZVAL_PTR(property);
23621 : }
23622 :
23623 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
23624 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
23625 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
23626 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
23627 :
23628 0 : have_get_ptr = 1;
23629 0 : incdec_op(*zptr);
23630 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
23631 0 : *retval = *zptr;
23632 0 : PZVAL_LOCK(*retval);
23633 : }
23634 : }
23635 : }
23636 :
23637 0 : if (!have_get_ptr) {
23638 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
23639 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
23640 :
23641 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
23642 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
23643 :
23644 0 : if (z->refcount == 0) {
23645 0 : zval_dtor(z);
23646 0 : FREE_ZVAL(z);
23647 : }
23648 0 : z = value;
23649 : }
23650 0 : z->refcount++;
23651 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
23652 0 : incdec_op(z);
23653 0 : *retval = z;
23654 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
23655 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
23656 0 : zval_ptr_dtor(&z);
23657 : } else {
23658 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
23659 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
23660 0 : *retval = EG(uninitialized_zval_ptr);
23661 0 : PZVAL_LOCK(*retval);
23662 : }
23663 : }
23664 : }
23665 :
23666 : if (0) {
23667 : zval_ptr_dtor(&property);
23668 : } else {
23669 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23670 : }
23671 :
23672 0 : ZEND_VM_NEXT_OPCODE();
23673 : }
23674 :
23675 : static int ZEND_PRE_INC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23676 0 : {
23677 0 : return zend_pre_incdec_property_helper_SPEC_CV_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23678 : }
23679 :
23680 : static int ZEND_PRE_DEC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23681 0 : {
23682 0 : return zend_pre_incdec_property_helper_SPEC_CV_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23683 : }
23684 :
23685 : static int zend_post_incdec_property_helper_SPEC_CV_VAR(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
23686 0 : {
23687 0 : zend_op *opline = EX(opline);
23688 : zend_free_op free_op2;
23689 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
23690 : zval *object;
23691 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23692 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
23693 0 : int have_get_ptr = 0;
23694 :
23695 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
23696 0 : object = *object_ptr;
23697 :
23698 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
23699 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
23700 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23701 0 : *retval = *EG(uninitialized_zval_ptr);
23702 :
23703 0 : ZEND_VM_NEXT_OPCODE();
23704 : }
23705 :
23706 : /* here we are sure we are dealing with an object */
23707 :
23708 : if (0) {
23709 : MAKE_REAL_ZVAL_PTR(property);
23710 : }
23711 :
23712 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
23713 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
23714 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
23715 0 : have_get_ptr = 1;
23716 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
23717 :
23718 0 : *retval = **zptr;
23719 0 : zendi_zval_copy_ctor(*retval);
23720 :
23721 0 : incdec_op(*zptr);
23722 :
23723 : }
23724 : }
23725 :
23726 0 : if (!have_get_ptr) {
23727 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
23728 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
23729 : zval *z_copy;
23730 :
23731 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
23732 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
23733 :
23734 0 : if (z->refcount == 0) {
23735 0 : zval_dtor(z);
23736 0 : FREE_ZVAL(z);
23737 : }
23738 0 : z = value;
23739 : }
23740 0 : *retval = *z;
23741 0 : zendi_zval_copy_ctor(*retval);
23742 0 : ALLOC_ZVAL(z_copy);
23743 0 : *z_copy = *z;
23744 0 : zendi_zval_copy_ctor(*z_copy);
23745 0 : INIT_PZVAL(z_copy);
23746 0 : incdec_op(z_copy);
23747 0 : z->refcount++;
23748 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
23749 0 : zval_ptr_dtor(&z_copy);
23750 0 : zval_ptr_dtor(&z);
23751 : } else {
23752 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
23753 0 : *retval = *EG(uninitialized_zval_ptr);
23754 : }
23755 : }
23756 :
23757 : if (0) {
23758 : zval_ptr_dtor(&property);
23759 : } else {
23760 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23761 : }
23762 :
23763 0 : ZEND_VM_NEXT_OPCODE();
23764 : }
23765 :
23766 : static int ZEND_POST_INC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23767 0 : {
23768 0 : return zend_post_incdec_property_helper_SPEC_CV_VAR(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23769 : }
23770 :
23771 : static int ZEND_POST_DEC_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23772 0 : {
23773 0 : return zend_post_incdec_property_helper_SPEC_CV_VAR(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23774 : }
23775 :
23776 : static int ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23777 0 : {
23778 0 : zend_op *opline = EX(opline);
23779 : zend_free_op free_op2;
23780 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23781 :
23782 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
23783 : IS_CV != IS_CV &&
23784 : EX_T(opline->op1.u.var).var.ptr_ptr) {
23785 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
23786 : }
23787 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
23788 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23789 :
23790 0 : ZEND_VM_NEXT_OPCODE();
23791 : }
23792 :
23793 : static int ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23794 0 : {
23795 0 : zend_op *opline = EX(opline);
23796 : zend_free_op free_op1, free_op2;
23797 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23798 :
23799 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
23800 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23801 : if (IS_CV == IS_VAR && 0 &&
23802 : READY_TO_DESTROY(free_op1.var) &&
23803 : !RETURN_VALUE_UNUSED(&opline->result)) {
23804 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23805 : }
23806 :
23807 0 : ZEND_VM_NEXT_OPCODE();
23808 : }
23809 :
23810 : static int ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23811 0 : {
23812 0 : zend_op *opline = EX(opline);
23813 : zend_free_op free_op1, free_op2;
23814 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23815 :
23816 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
23817 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23818 : if (IS_CV == IS_VAR && 0 &&
23819 : READY_TO_DESTROY(free_op1.var) &&
23820 : !RETURN_VALUE_UNUSED(&opline->result)) {
23821 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23822 : }
23823 :
23824 0 : ZEND_VM_NEXT_OPCODE();
23825 : }
23826 :
23827 : static int ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23828 0 : {
23829 0 : zend_op *opline = EX(opline);
23830 : zend_free_op free_op2;
23831 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23832 :
23833 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
23834 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23835 :
23836 0 : ZEND_VM_NEXT_OPCODE();
23837 : }
23838 :
23839 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23840 0 : {
23841 0 : zend_op *opline = EX(opline);
23842 : zend_free_op free_op1, free_op2;
23843 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
23844 : zval *dim;
23845 :
23846 : if (IS_VAR == IS_UNUSED && type == BP_VAR_R) {
23847 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
23848 : }
23849 0 : dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23850 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC);
23851 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23852 : if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
23853 : READY_TO_DESTROY(free_op1.var) &&
23854 : !RETURN_VALUE_UNUSED(&opline->result)) {
23855 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23856 : }
23857 :
23858 0 : ZEND_VM_NEXT_OPCODE();
23859 : }
23860 :
23861 : static int ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23862 0 : {
23863 0 : zend_op *opline = EX(opline);
23864 : zend_free_op free_op1, free_op2;
23865 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
23866 0 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23867 :
23868 : /* Not needed in DIM_UNSET
23869 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK) {
23870 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
23871 : }
23872 : */
23873 : if (IS_CV == IS_CV) {
23874 0 : if (container != &EG(uninitialized_zval_ptr)) {
23875 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
23876 : }
23877 : }
23878 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
23879 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23880 : if (IS_CV == IS_VAR && 0 &&
23881 : READY_TO_DESTROY(free_op1.var) &&
23882 : !RETURN_VALUE_UNUSED(&opline->result)) {
23883 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23884 : }
23885 :
23886 0 : if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) {
23887 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
23888 : } else {
23889 : zend_free_op free_res;
23890 :
23891 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
23892 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
23893 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
23894 : }
23895 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
23896 0 : FREE_OP_VAR_PTR(free_res);
23897 : }
23898 0 : ZEND_VM_NEXT_OPCODE();
23899 : }
23900 :
23901 : static int zend_fetch_property_address_read_helper_SPEC_CV_VAR(int type, ZEND_OPCODE_HANDLER_ARGS)
23902 0 : {
23903 0 : zend_op *opline = EX(opline);
23904 : zval *container;
23905 : zval **retval;
23906 :
23907 :
23908 0 : retval = &EX_T(opline->result.u.var).var.ptr;
23909 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
23910 :
23911 0 : container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC);
23912 :
23913 0 : if (container == EG(error_zval_ptr)) {
23914 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
23915 0 : *retval = EG(error_zval_ptr);
23916 0 : PZVAL_LOCK(*retval);
23917 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23918 : }
23919 :
23920 0 : ZEND_VM_NEXT_OPCODE();
23921 : }
23922 :
23923 :
23924 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
23925 0 : if (type != BP_VAR_IS) {
23926 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
23927 : }
23928 0 : *retval = EG(uninitialized_zval_ptr);
23929 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
23930 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23931 : } else {
23932 : zend_free_op free_op2;
23933 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23934 :
23935 : if (0) {
23936 : MAKE_REAL_ZVAL_PTR(offset);
23937 : }
23938 :
23939 : /* here we are sure we are dealing with an object */
23940 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
23941 :
23942 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
23943 0 : zval_dtor(*retval);
23944 0 : FREE_ZVAL(*retval);
23945 : } else {
23946 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
23947 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23948 : }
23949 :
23950 : if (0) {
23951 : zval_ptr_dtor(&offset);
23952 : } else {
23953 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23954 : }
23955 : }
23956 :
23957 0 : ZEND_VM_NEXT_OPCODE();
23958 : }
23959 :
23960 : static int ZEND_FETCH_OBJ_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23961 0 : {
23962 0 : return zend_fetch_property_address_read_helper_SPEC_CV_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
23963 : }
23964 :
23965 : static int ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23966 0 : {
23967 0 : zend_op *opline = EX(opline);
23968 : zend_free_op free_op1, free_op2;
23969 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23970 :
23971 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) {
23972 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
23973 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
23974 : }
23975 :
23976 : if (0) {
23977 : MAKE_REAL_ZVAL_PTR(property);
23978 : }
23979 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
23980 : if (0) {
23981 : zval_ptr_dtor(&property);
23982 : } else {
23983 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
23984 : }
23985 : if (IS_CV == IS_VAR && 0 &&
23986 : READY_TO_DESTROY(free_op1.var) &&
23987 : !RETURN_VALUE_UNUSED(&opline->result)) {
23988 : AI_USE_PTR(EX_T(opline->result.u.var).var);
23989 : }
23990 :
23991 0 : ZEND_VM_NEXT_OPCODE();
23992 : }
23993 :
23994 : static int ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
23995 0 : {
23996 0 : zend_op *opline = EX(opline);
23997 : zend_free_op free_op1, free_op2;
23998 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
23999 :
24000 : if (0) {
24001 : MAKE_REAL_ZVAL_PTR(property);
24002 : }
24003 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
24004 : if (0) {
24005 : zval_ptr_dtor(&property);
24006 : } else {
24007 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24008 : }
24009 : if (IS_CV == IS_VAR && 0 &&
24010 : READY_TO_DESTROY(free_op1.var) &&
24011 : !RETURN_VALUE_UNUSED(&opline->result)) {
24012 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24013 : }
24014 :
24015 0 : ZEND_VM_NEXT_OPCODE();
24016 : }
24017 :
24018 : static int ZEND_FETCH_OBJ_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24019 0 : {
24020 0 : return zend_fetch_property_address_read_helper_SPEC_CV_VAR(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24021 : }
24022 :
24023 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24024 0 : {
24025 0 : zend_op *opline = EX(opline);
24026 :
24027 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
24028 : /* Behave like FETCH_OBJ_W */
24029 : zend_free_op free_op1, free_op2;
24030 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24031 :
24032 : if (0) {
24033 : MAKE_REAL_ZVAL_PTR(property);
24034 : }
24035 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
24036 : if (0) {
24037 : zval_ptr_dtor(&property);
24038 : } else {
24039 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24040 : }
24041 : if (IS_CV == IS_VAR && 0 &&
24042 : READY_TO_DESTROY(free_op1.var) &&
24043 : !RETURN_VALUE_UNUSED(&opline->result)) {
24044 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24045 : }
24046 :
24047 0 : ZEND_VM_NEXT_OPCODE();
24048 : } else {
24049 0 : return zend_fetch_property_address_read_helper_SPEC_CV_VAR(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24050 : }
24051 : }
24052 :
24053 : static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24054 0 : {
24055 0 : zend_op *opline = EX(opline);
24056 : zend_free_op free_op1, free_op2, free_res;
24057 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
24058 0 : zval *property = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24059 :
24060 : if (IS_CV == IS_CV) {
24061 0 : if (container != &EG(uninitialized_zval_ptr)) {
24062 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
24063 : }
24064 : }
24065 : if (0) {
24066 : MAKE_REAL_ZVAL_PTR(property);
24067 : }
24068 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
24069 : if (0) {
24070 : zval_ptr_dtor(&property);
24071 : } else {
24072 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24073 : }
24074 : if (IS_CV == IS_VAR && 0 &&
24075 : READY_TO_DESTROY(free_op1.var) &&
24076 : !RETURN_VALUE_UNUSED(&opline->result)) {
24077 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24078 : }
24079 :
24080 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
24081 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
24082 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
24083 : }
24084 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
24085 0 : FREE_OP_VAR_PTR(free_res);
24086 0 : ZEND_VM_NEXT_OPCODE();
24087 : }
24088 :
24089 : static int ZEND_ASSIGN_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24090 0 : {
24091 0 : zend_op *opline = EX(opline);
24092 0 : zend_op *op_data = opline+1;
24093 :
24094 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
24095 :
24096 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
24097 :
24098 : /* assign_obj has two opcodes! */
24099 0 : ZEND_VM_INC_OPCODE();
24100 0 : ZEND_VM_NEXT_OPCODE();
24101 : }
24102 :
24103 : static int ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24104 41 : {
24105 41 : zend_op *opline = EX(opline);
24106 41 : zend_op *op_data = opline+1;
24107 :
24108 : zval **object_ptr;
24109 :
24110 : if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
24111 : /* not an array offset */
24112 41 : object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
24113 : } else {
24114 : object_ptr = NULL;
24115 : }
24116 :
24117 41 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
24118 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
24119 : } else {
24120 : zend_free_op free_op2, free_op_data1;
24121 : zval *value;
24122 41 : zval *dim = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24123 :
24124 41 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
24125 41 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24126 :
24127 41 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
24128 41 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
24129 41 : FREE_OP_IF_VAR(free_op_data1);
24130 : }
24131 :
24132 : /* assign_dim has two opcodes! */
24133 41 : ZEND_VM_INC_OPCODE();
24134 41 : ZEND_VM_NEXT_OPCODE();
24135 : }
24136 :
24137 : static int ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24138 39515 : {
24139 39515 : zend_op *opline = EX(opline);
24140 : zend_free_op free_op2;
24141 39515 : zval *value = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24142 :
24143 39515 : zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_VAR), EX(Ts) TSRMLS_CC);
24144 : /* zend_assign_to_variable() always takes care of op2, never free it! */
24145 39515 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24146 :
24147 39515 : ZEND_VM_NEXT_OPCODE();
24148 : }
24149 :
24150 : static int ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24151 3605 : {
24152 3605 : zend_op *opline = EX(opline);
24153 : zend_free_op free_op2;
24154 : zval **variable_ptr_ptr;
24155 3605 : zval **value_ptr_ptr = _get_zval_ptr_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24156 :
24157 3605 : if (IS_VAR == IS_VAR &&
24158 : value_ptr_ptr &&
24159 : !(*value_ptr_ptr)->is_ref &&
24160 : opline->extended_value == ZEND_RETURNS_FUNCTION &&
24161 : !EX_T(opline->op2.u.var).var.fcall_returned_reference) {
24162 0 : if (free_op2.var == NULL) {
24163 0 : PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
24164 : }
24165 0 : zend_error(E_STRICT, "Only variables should be assigned by reference");
24166 0 : return ZEND_ASSIGN_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24167 : }
24168 : if (IS_CV == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) {
24169 : zend_error(E_ERROR, "Cannot assign by reference to overloaded object");
24170 : }
24171 :
24172 3605 : variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
24173 3605 : zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
24174 :
24175 3605 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
24176 0 : EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr;
24177 0 : PZVAL_LOCK(*variable_ptr_ptr);
24178 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24179 : }
24180 :
24181 3605 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24182 :
24183 3605 : ZEND_VM_NEXT_OPCODE();
24184 : }
24185 :
24186 : static int ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24187 0 : {
24188 0 : zend_op *opline = EX(opline);
24189 : zval *function_name;
24190 : char *function_name_strval;
24191 : int function_name_strlen;
24192 : zend_free_op free_op2;
24193 :
24194 0 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
24195 :
24196 0 : function_name = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24197 :
24198 0 : if (Z_TYPE_P(function_name)!=IS_STRING) {
24199 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
24200 : }
24201 :
24202 0 : function_name_strval = Z_STRVAL_P(function_name);
24203 0 : function_name_strlen = Z_STRLEN_P(function_name);
24204 :
24205 0 : EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
24206 :
24207 0 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
24208 0 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
24209 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
24210 : }
24211 :
24212 : /* First, locate the function. */
24213 0 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
24214 0 : if (!EX(fbc)) {
24215 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
24216 : }
24217 : } else {
24218 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
24219 : }
24220 :
24221 0 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
24222 0 : EX(object) = NULL;
24223 : } else {
24224 0 : if (!PZVAL_IS_REF(EX(object))) {
24225 0 : EX(object)->refcount++; /* For $this pointer */
24226 : } else {
24227 : zval *this_ptr;
24228 0 : ALLOC_ZVAL(this_ptr);
24229 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
24230 0 : zval_copy_ctor(this_ptr);
24231 0 : EX(object) = this_ptr;
24232 : }
24233 : }
24234 :
24235 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24236 :
24237 0 : ZEND_VM_NEXT_OPCODE();
24238 : }
24239 :
24240 : static int ZEND_CASE_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24241 0 : {
24242 0 : zend_op *opline = EX(opline);
24243 0 : int switch_expr_is_overloaded=0;
24244 : zend_free_op free_op2;
24245 :
24246 : if (IS_CV==IS_VAR) {
24247 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
24248 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
24249 : } else {
24250 : switch_expr_is_overloaded = 1;
24251 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
24252 : }
24253 : }
24254 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
24255 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
24256 : _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC) TSRMLS_CC);
24257 :
24258 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24259 0 : if (switch_expr_is_overloaded) {
24260 : /* We only free op1 if this is a string offset,
24261 : * Since if it is a TMP_VAR, it'll be reused by
24262 : * other CASE opcodes (whereas string offsets
24263 : * are allocated at each get_zval_ptr())
24264 : */
24265 :
24266 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
24267 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
24268 : }
24269 0 : ZEND_VM_NEXT_OPCODE();
24270 : }
24271 :
24272 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24273 0 : {
24274 0 : zend_op *opline = EX(opline);
24275 : zend_free_op free_op2;
24276 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
24277 : zval *expr_ptr;
24278 0 : zval *offset=_get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24279 :
24280 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
24281 0 : zval **expr_ptr_ptr = NULL;
24282 :
24283 0 : if (opline->extended_value) {
24284 0 : expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
24285 0 : expr_ptr = *expr_ptr_ptr;
24286 : } else {
24287 0 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
24288 : }
24289 : #else
24290 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
24291 : #endif
24292 :
24293 : if (0) { /* temporary variable */
24294 : zval *new_expr;
24295 :
24296 : ALLOC_ZVAL(new_expr);
24297 : INIT_PZVAL_COPY(new_expr, expr_ptr);
24298 : expr_ptr = new_expr;
24299 : } else {
24300 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
24301 0 : if (opline->extended_value) {
24302 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
24303 0 : expr_ptr = *expr_ptr_ptr;
24304 0 : expr_ptr->refcount++;
24305 : } else
24306 : #endif
24307 0 : if (PZVAL_IS_REF(expr_ptr)) {
24308 : zval *new_expr;
24309 :
24310 0 : ALLOC_ZVAL(new_expr);
24311 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
24312 0 : expr_ptr = new_expr;
24313 0 : zendi_zval_copy_ctor(*expr_ptr);
24314 : } else {
24315 0 : expr_ptr->refcount++;
24316 : }
24317 : }
24318 0 : if (offset) {
24319 0 : switch (Z_TYPE_P(offset)) {
24320 : case IS_DOUBLE:
24321 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
24322 0 : break;
24323 : case IS_LONG:
24324 : case IS_BOOL:
24325 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
24326 0 : break;
24327 : case IS_STRING:
24328 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
24329 0 : break;
24330 : case IS_NULL:
24331 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
24332 0 : break;
24333 : default:
24334 0 : zend_error(E_WARNING, "Illegal offset type");
24335 0 : zval_ptr_dtor(&expr_ptr);
24336 : /* do nothing */
24337 : break;
24338 : }
24339 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24340 : } else {
24341 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
24342 : }
24343 0 : if (opline->extended_value) {
24344 :
24345 : } else {
24346 :
24347 : }
24348 0 : ZEND_VM_NEXT_OPCODE();
24349 : }
24350 :
24351 : static int ZEND_INIT_ARRAY_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24352 0 : {
24353 0 : zend_op *opline = EX(opline);
24354 :
24355 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
24356 : if (IS_CV == IS_UNUSED) {
24357 : ZEND_VM_NEXT_OPCODE();
24358 : #if 0 || IS_CV != IS_UNUSED
24359 : } else {
24360 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24361 : #endif
24362 : }
24363 : }
24364 :
24365 : static int ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24366 0 : {
24367 0 : zend_op *opline = EX(opline);
24368 : zend_free_op free_op2;
24369 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
24370 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24371 : long index;
24372 :
24373 0 : if (container) {
24374 0 : if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
24375 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
24376 : }
24377 0 : switch (Z_TYPE_PP(container)) {
24378 : case IS_ARRAY: {
24379 0 : HashTable *ht = Z_ARRVAL_PP(container);
24380 :
24381 0 : switch (Z_TYPE_P(offset)) {
24382 : case IS_DOUBLE:
24383 0 : index = (long) Z_DVAL_P(offset);
24384 0 : zend_hash_index_del(ht, index);
24385 0 : break;
24386 : case IS_RESOURCE:
24387 : case IS_BOOL:
24388 : case IS_LONG:
24389 0 : index = Z_LVAL_P(offset);
24390 0 : zend_hash_index_del(ht, index);
24391 0 : break;
24392 : case IS_STRING:
24393 : if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
24394 0 : offset->refcount++;
24395 : }
24396 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
24397 : ht == &EG(symbol_table)) {
24398 : zend_execute_data *ex;
24399 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
24400 :
24401 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
24402 0 : if (ex->op_array && ex->symbol_table == ht) {
24403 : int i;
24404 :
24405 0 : for (i = 0; i < ex->op_array->last_var; i++) {
24406 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
24407 : ex->op_array->vars[i].name_len == offset->value.str.len &&
24408 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
24409 0 : ex->CVs[i] = NULL;
24410 0 : break;
24411 : }
24412 : }
24413 : }
24414 : }
24415 : }
24416 : if (IS_VAR == IS_CV || IS_VAR == IS_VAR) {
24417 0 : zval_ptr_dtor(&offset);
24418 : }
24419 0 : break;
24420 : case IS_NULL:
24421 0 : zend_hash_del(ht, "", sizeof(""));
24422 0 : break;
24423 : default:
24424 0 : zend_error(E_WARNING, "Illegal offset type in unset");
24425 : break;
24426 : }
24427 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24428 0 : break;
24429 : }
24430 : case IS_OBJECT:
24431 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
24432 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
24433 : }
24434 : if (0) {
24435 : MAKE_REAL_ZVAL_PTR(offset);
24436 : }
24437 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
24438 : if (0) {
24439 : zval_ptr_dtor(&offset);
24440 : } else {
24441 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24442 : }
24443 0 : break;
24444 : case IS_STRING:
24445 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
24446 : ZEND_VM_CONTINUE(); /* bailed out before */
24447 : default:
24448 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24449 : break;
24450 : }
24451 : } else {
24452 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24453 : }
24454 :
24455 0 : ZEND_VM_NEXT_OPCODE();
24456 : }
24457 :
24458 : static int ZEND_UNSET_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24459 0 : {
24460 0 : zend_op *opline = EX(opline);
24461 : zend_free_op free_op2;
24462 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
24463 0 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24464 :
24465 0 : if (container) {
24466 0 : if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
24467 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
24468 : }
24469 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
24470 : if (0) {
24471 : MAKE_REAL_ZVAL_PTR(offset);
24472 : }
24473 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
24474 : if (0) {
24475 : zval_ptr_dtor(&offset);
24476 : } else {
24477 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24478 : }
24479 : } else {
24480 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24481 : }
24482 : } else {
24483 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24484 : }
24485 :
24486 0 : ZEND_VM_NEXT_OPCODE();
24487 : }
24488 :
24489 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
24490 7 : {
24491 7 : zend_op *opline = EX(opline);
24492 :
24493 7 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
24494 7 : zval **value = NULL;
24495 7 : int result = 0;
24496 : long index;
24497 :
24498 7 : if (container) {
24499 : zend_free_op free_op2;
24500 7 : zval *offset = _get_zval_ptr_var(&opline->op2, EX(Ts), &free_op2 TSRMLS_CC);
24501 :
24502 7 : if (Z_TYPE_PP(container) == IS_ARRAY) {
24503 : HashTable *ht;
24504 7 : int isset = 0;
24505 :
24506 7 : ht = Z_ARRVAL_PP(container);
24507 :
24508 7 : switch (Z_TYPE_P(offset)) {
24509 : case IS_DOUBLE:
24510 0 : index = (long) Z_DVAL_P(offset);
24511 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
24512 0 : isset = 1;
24513 : }
24514 0 : break;
24515 : case IS_RESOURCE:
24516 : case IS_BOOL:
24517 : case IS_LONG:
24518 0 : index = Z_LVAL_P(offset);
24519 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
24520 0 : isset = 1;
24521 : }
24522 0 : break;
24523 : case IS_STRING:
24524 7 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
24525 5 : isset = 1;
24526 : }
24527 7 : break;
24528 : case IS_NULL:
24529 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
24530 0 : isset = 1;
24531 : }
24532 0 : break;
24533 : default:
24534 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
24535 :
24536 : break;
24537 : }
24538 :
24539 7 : switch (opline->extended_value) {
24540 : case ZEND_ISSET:
24541 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
24542 0 : result = 0;
24543 : } else {
24544 0 : result = isset;
24545 : }
24546 0 : break;
24547 : case ZEND_ISEMPTY:
24548 9 : if (!isset || !i_zend_is_true(*value)) {
24549 2 : result = 0;
24550 : } else {
24551 5 : result = 1;
24552 : }
24553 : break;
24554 : }
24555 7 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24556 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
24557 : if (0) {
24558 : MAKE_REAL_ZVAL_PTR(offset);
24559 : }
24560 0 : if (prop_dim) {
24561 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
24562 : } else {
24563 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
24564 : }
24565 : if (0) {
24566 : zval_ptr_dtor(&offset);
24567 : } else {
24568 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24569 : }
24570 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
24571 : zval tmp;
24572 :
24573 0 : if (Z_TYPE_P(offset) != IS_LONG) {
24574 0 : tmp = *offset;
24575 0 : zval_copy_ctor(&tmp);
24576 0 : convert_to_long(&tmp);
24577 0 : offset = &tmp;
24578 : }
24579 0 : if (Z_TYPE_P(offset) == IS_LONG) {
24580 0 : switch (opline->extended_value) {
24581 : case ZEND_ISSET:
24582 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
24583 0 : result = 1;
24584 : }
24585 0 : break;
24586 : case ZEND_ISEMPTY:
24587 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
24588 0 : result = 1;
24589 : }
24590 : break;
24591 : }
24592 : }
24593 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24594 : } else {
24595 0 : if (free_op2.var) {zval_ptr_dtor(&free_op2.var);};
24596 : }
24597 : }
24598 :
24599 7 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
24600 :
24601 7 : switch (opline->extended_value) {
24602 : case ZEND_ISSET:
24603 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
24604 0 : break;
24605 : case ZEND_ISEMPTY:
24606 7 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
24607 : break;
24608 : }
24609 :
24610 7 : ZEND_VM_NEXT_OPCODE();
24611 : }
24612 :
24613 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24614 7 : {
24615 7 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24616 : }
24617 :
24618 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24619 0 : {
24620 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_VAR(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24621 : }
24622 :
24623 : static int zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
24624 0 : {
24625 0 : zend_op *opline = EX(opline);
24626 0 : zend_op *op_data = opline+1;
24627 : zend_free_op free_op_data1;
24628 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
24629 : zval *object;
24630 0 : zval *property = NULL;
24631 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
24632 0 : znode *result = &opline->result;
24633 0 : zval **retval = &EX_T(result->u.var).var.ptr;
24634 0 : int have_get_ptr = 0;
24635 :
24636 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
24637 0 : make_real_object(object_ptr TSRMLS_CC);
24638 0 : object = *object_ptr;
24639 :
24640 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
24641 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
24642 :
24643 0 : FREE_OP(free_op_data1);
24644 :
24645 0 : if (!RETURN_VALUE_UNUSED(result)) {
24646 0 : *retval = EG(uninitialized_zval_ptr);
24647 0 : PZVAL_LOCK(*retval);
24648 : }
24649 : } else {
24650 : /* here we are sure we are dealing with an object */
24651 : if (0) {
24652 : MAKE_REAL_ZVAL_PTR(property);
24653 : }
24654 :
24655 : /* here property is a string */
24656 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
24657 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
24658 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
24659 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
24660 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
24661 :
24662 0 : have_get_ptr = 1;
24663 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
24664 0 : if (!RETURN_VALUE_UNUSED(result)) {
24665 0 : *retval = *zptr;
24666 0 : PZVAL_LOCK(*retval);
24667 : }
24668 : }
24669 : }
24670 :
24671 0 : if (!have_get_ptr) {
24672 0 : zval *z = NULL;
24673 :
24674 0 : switch (opline->extended_value) {
24675 : case ZEND_ASSIGN_OBJ:
24676 0 : if (Z_OBJ_HT_P(object)->read_property) {
24677 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
24678 : }
24679 0 : break;
24680 : case ZEND_ASSIGN_DIM:
24681 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
24682 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
24683 : }
24684 : break;
24685 : }
24686 0 : if (z) {
24687 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
24688 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
24689 :
24690 0 : if (z->refcount == 0) {
24691 0 : zval_dtor(z);
24692 0 : FREE_ZVAL(z);
24693 : }
24694 0 : z = value;
24695 : }
24696 0 : z->refcount++;
24697 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
24698 0 : binary_op(z, z, value TSRMLS_CC);
24699 0 : switch (opline->extended_value) {
24700 : case ZEND_ASSIGN_OBJ:
24701 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
24702 0 : break;
24703 : case ZEND_ASSIGN_DIM:
24704 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
24705 : break;
24706 : }
24707 0 : if (!RETURN_VALUE_UNUSED(result)) {
24708 0 : *retval = z;
24709 0 : PZVAL_LOCK(*retval);
24710 : }
24711 0 : zval_ptr_dtor(&z);
24712 : } else {
24713 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
24714 0 : if (!RETURN_VALUE_UNUSED(result)) {
24715 0 : *retval = EG(uninitialized_zval_ptr);
24716 0 : PZVAL_LOCK(*retval);
24717 : }
24718 : }
24719 : }
24720 :
24721 : if (0) {
24722 : zval_ptr_dtor(&property);
24723 : } else {
24724 :
24725 : }
24726 0 : FREE_OP(free_op_data1);
24727 : }
24728 :
24729 : /* assign_obj has two opcodes! */
24730 0 : ZEND_VM_INC_OPCODE();
24731 0 : ZEND_VM_NEXT_OPCODE();
24732 : }
24733 :
24734 : static int zend_binary_assign_op_helper_SPEC_CV_UNUSED(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
24735 0 : {
24736 0 : zend_op *opline = EX(opline);
24737 : zend_free_op free_op_data2, free_op_data1;
24738 : zval **var_ptr;
24739 : zval *value;
24740 0 : zend_bool increment_opline = 0;
24741 :
24742 0 : switch (opline->extended_value) {
24743 : case ZEND_ASSIGN_OBJ:
24744 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24745 : break;
24746 : case ZEND_ASSIGN_DIM: {
24747 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
24748 :
24749 : if (object_ptr && IS_CV != IS_CV && !0) {
24750 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
24751 : }
24752 :
24753 0 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
24754 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24755 : } else {
24756 0 : zend_op *op_data = opline+1;
24757 0 : zval *dim = NULL;
24758 :
24759 0 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
24760 0 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
24761 0 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
24762 0 : increment_opline = 1;
24763 : }
24764 : }
24765 0 : break;
24766 : default:
24767 0 : value = NULL;
24768 0 : var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
24769 : /* do nothing */
24770 : break;
24771 : }
24772 :
24773 0 : if (!var_ptr) {
24774 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
24775 : }
24776 :
24777 0 : if (*var_ptr == EG(error_zval_ptr)) {
24778 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
24779 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
24780 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
24781 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24782 : }
24783 :
24784 :
24785 0 : if (increment_opline) {
24786 0 : ZEND_VM_INC_OPCODE();
24787 : }
24788 0 : ZEND_VM_NEXT_OPCODE();
24789 : }
24790 :
24791 0 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
24792 :
24793 0 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
24794 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
24795 : /* proxy object */
24796 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
24797 0 : objval->refcount++;
24798 0 : binary_op(objval, objval, value TSRMLS_CC);
24799 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
24800 0 : zval_ptr_dtor(&objval);
24801 : } else {
24802 0 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
24803 : }
24804 :
24805 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
24806 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
24807 0 : PZVAL_LOCK(*var_ptr);
24808 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24809 : }
24810 :
24811 0 : if (increment_opline) {
24812 0 : ZEND_VM_INC_OPCODE();
24813 0 : FREE_OP(free_op_data1);
24814 0 : FREE_OP_VAR_PTR(free_op_data2);
24815 : }
24816 :
24817 0 : ZEND_VM_NEXT_OPCODE();
24818 : }
24819 :
24820 : static int ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24821 0 : {
24822 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24823 : }
24824 :
24825 : static int ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24826 0 : {
24827 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24828 : }
24829 :
24830 : static int ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24831 0 : {
24832 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24833 : }
24834 :
24835 : static int ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24836 0 : {
24837 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24838 : }
24839 :
24840 : static int ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24841 0 : {
24842 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24843 : }
24844 :
24845 : static int ZEND_ASSIGN_SL_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24846 0 : {
24847 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24848 : }
24849 :
24850 : static int ZEND_ASSIGN_SR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24851 0 : {
24852 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24853 : }
24854 :
24855 : static int ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24856 0 : {
24857 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24858 : }
24859 :
24860 : static int ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24861 0 : {
24862 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24863 : }
24864 :
24865 : static int ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24866 0 : {
24867 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24868 : }
24869 :
24870 : static int ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24871 0 : {
24872 0 : return zend_binary_assign_op_helper_SPEC_CV_UNUSED(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
24873 : }
24874 :
24875 : static int ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24876 2 : {
24877 2 : zend_op *opline = EX(opline);
24878 : zend_free_op free_op1;
24879 2 : zval *dim = NULL;
24880 :
24881 2 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
24882 :
24883 : if (IS_CV == IS_VAR && 0 &&
24884 : READY_TO_DESTROY(free_op1.var) &&
24885 : !RETURN_VALUE_UNUSED(&opline->result)) {
24886 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24887 : }
24888 :
24889 2 : ZEND_VM_NEXT_OPCODE();
24890 : }
24891 :
24892 : static int ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24893 0 : {
24894 0 : zend_op *opline = EX(opline);
24895 : zend_free_op free_op1;
24896 0 : zval *dim = NULL;
24897 :
24898 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
24899 :
24900 : if (IS_CV == IS_VAR && 0 &&
24901 : READY_TO_DESTROY(free_op1.var) &&
24902 : !RETURN_VALUE_UNUSED(&opline->result)) {
24903 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24904 : }
24905 :
24906 0 : ZEND_VM_NEXT_OPCODE();
24907 : }
24908 :
24909 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24910 0 : {
24911 0 : zend_op *opline = EX(opline);
24912 : zend_free_op free_op1;
24913 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
24914 : zval *dim;
24915 :
24916 0 : if (IS_UNUSED == IS_UNUSED && type == BP_VAR_R) {
24917 0 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
24918 : }
24919 0 : dim = NULL;
24920 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC);
24921 :
24922 : if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
24923 : READY_TO_DESTROY(free_op1.var) &&
24924 : !RETURN_VALUE_UNUSED(&opline->result)) {
24925 : AI_USE_PTR(EX_T(opline->result.u.var).var);
24926 : }
24927 :
24928 0 : ZEND_VM_NEXT_OPCODE();
24929 : }
24930 :
24931 : static int ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24932 186 : {
24933 186 : zend_op *opline = EX(opline);
24934 186 : zend_op *op_data = opline+1;
24935 :
24936 : zval **object_ptr;
24937 :
24938 : if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
24939 : /* not an array offset */
24940 186 : object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
24941 : } else {
24942 : object_ptr = NULL;
24943 : }
24944 :
24945 186 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
24946 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
24947 : } else {
24948 : zend_free_op free_op_data1;
24949 : zval *value;
24950 186 : zval *dim = NULL;
24951 :
24952 186 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
24953 :
24954 186 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
24955 186 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
24956 186 : FREE_OP_IF_VAR(free_op_data1);
24957 : }
24958 :
24959 : /* assign_dim has two opcodes! */
24960 186 : ZEND_VM_INC_OPCODE();
24961 186 : ZEND_VM_NEXT_OPCODE();
24962 : }
24963 :
24964 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
24965 2 : {
24966 2 : zend_op *opline = EX(opline);
24967 :
24968 2 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
24969 : zval *expr_ptr;
24970 2 : zval *offset=NULL;
24971 :
24972 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
24973 2 : zval **expr_ptr_ptr = NULL;
24974 :
24975 2 : if (opline->extended_value) {
24976 0 : expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
24977 0 : expr_ptr = *expr_ptr_ptr;
24978 : } else {
24979 2 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
24980 : }
24981 : #else
24982 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
24983 : #endif
24984 :
24985 : if (0) { /* temporary variable */
24986 : zval *new_expr;
24987 :
24988 : ALLOC_ZVAL(new_expr);
24989 : INIT_PZVAL_COPY(new_expr, expr_ptr);
24990 : expr_ptr = new_expr;
24991 : } else {
24992 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
24993 2 : if (opline->extended_value) {
24994 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
24995 0 : expr_ptr = *expr_ptr_ptr;
24996 0 : expr_ptr->refcount++;
24997 : } else
24998 : #endif
24999 2 : if (PZVAL_IS_REF(expr_ptr)) {
25000 : zval *new_expr;
25001 :
25002 0 : ALLOC_ZVAL(new_expr);
25003 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
25004 0 : expr_ptr = new_expr;
25005 0 : zendi_zval_copy_ctor(*expr_ptr);
25006 : } else {
25007 2 : expr_ptr->refcount++;
25008 : }
25009 : }
25010 2 : if (offset) {
25011 0 : switch (Z_TYPE_P(offset)) {
25012 : case IS_DOUBLE:
25013 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
25014 0 : break;
25015 : case IS_LONG:
25016 : case IS_BOOL:
25017 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
25018 0 : break;
25019 : case IS_STRING:
25020 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
25021 0 : break;
25022 : case IS_NULL:
25023 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
25024 0 : break;
25025 : default:
25026 0 : zend_error(E_WARNING, "Illegal offset type");
25027 0 : zval_ptr_dtor(&expr_ptr);
25028 : /* do nothing */
25029 : break;
25030 : }
25031 :
25032 : } else {
25033 2 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
25034 : }
25035 2 : if (opline->extended_value) {
25036 :
25037 : } else {
25038 :
25039 : }
25040 2 : ZEND_VM_NEXT_OPCODE();
25041 : }
25042 :
25043 : static int ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25044 1 : {
25045 1 : zend_op *opline = EX(opline);
25046 :
25047 1 : array_init(&EX_T(opline->result.u.var).tmp_var);
25048 : if (IS_CV == IS_UNUSED) {
25049 : ZEND_VM_NEXT_OPCODE();
25050 : #if 0 || IS_CV != IS_UNUSED
25051 : } else {
25052 1 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25053 : #endif
25054 : }
25055 : }
25056 :
25057 : static int ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25058 0 : {
25059 0 : zend_op *opline = EX(opline);
25060 :
25061 :
25062 0 : add_function(&EX_T(opline->result.u.var).tmp_var,
25063 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25064 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25065 :
25066 :
25067 0 : ZEND_VM_NEXT_OPCODE();
25068 : }
25069 :
25070 : static int ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25071 1 : {
25072 1 : zend_op *opline = EX(opline);
25073 :
25074 :
25075 1 : sub_function(&EX_T(opline->result.u.var).tmp_var,
25076 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25077 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25078 :
25079 :
25080 1 : ZEND_VM_NEXT_OPCODE();
25081 : }
25082 :
25083 : static int ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25084 0 : {
25085 0 : zend_op *opline = EX(opline);
25086 :
25087 :
25088 0 : mul_function(&EX_T(opline->result.u.var).tmp_var,
25089 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25090 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25091 :
25092 :
25093 0 : ZEND_VM_NEXT_OPCODE();
25094 : }
25095 :
25096 : static int ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25097 0 : {
25098 0 : zend_op *opline = EX(opline);
25099 :
25100 :
25101 0 : div_function(&EX_T(opline->result.u.var).tmp_var,
25102 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25103 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25104 :
25105 :
25106 0 : ZEND_VM_NEXT_OPCODE();
25107 : }
25108 :
25109 : static int ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25110 0 : {
25111 0 : zend_op *opline = EX(opline);
25112 :
25113 :
25114 0 : mod_function(&EX_T(opline->result.u.var).tmp_var,
25115 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25116 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25117 :
25118 :
25119 0 : ZEND_VM_NEXT_OPCODE();
25120 : }
25121 :
25122 : static int ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25123 0 : {
25124 0 : zend_op *opline = EX(opline);
25125 :
25126 :
25127 0 : shift_left_function(&EX_T(opline->result.u.var).tmp_var,
25128 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25129 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25130 :
25131 :
25132 0 : ZEND_VM_NEXT_OPCODE();
25133 : }
25134 :
25135 : static int ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25136 0 : {
25137 0 : zend_op *opline = EX(opline);
25138 :
25139 :
25140 0 : shift_right_function(&EX_T(opline->result.u.var).tmp_var,
25141 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25142 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25143 :
25144 :
25145 0 : ZEND_VM_NEXT_OPCODE();
25146 : }
25147 :
25148 : static int ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25149 3 : {
25150 3 : zend_op *opline = EX(opline);
25151 :
25152 :
25153 3 : concat_function(&EX_T(opline->result.u.var).tmp_var,
25154 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25155 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25156 :
25157 :
25158 3 : ZEND_VM_NEXT_OPCODE();
25159 : }
25160 :
25161 : static int ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25162 0 : {
25163 0 : zend_op *opline = EX(opline);
25164 :
25165 :
25166 0 : is_identical_function(&EX_T(opline->result.u.var).tmp_var,
25167 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25168 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25169 :
25170 :
25171 0 : ZEND_VM_NEXT_OPCODE();
25172 : }
25173 :
25174 : static int ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25175 0 : {
25176 0 : zend_op *opline = EX(opline);
25177 :
25178 :
25179 0 : is_not_identical_function(&EX_T(opline->result.u.var).tmp_var,
25180 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25181 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25182 :
25183 :
25184 0 : ZEND_VM_NEXT_OPCODE();
25185 : }
25186 :
25187 : static int ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25188 759 : {
25189 759 : zend_op *opline = EX(opline);
25190 :
25191 :
25192 759 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
25193 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25194 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25195 :
25196 :
25197 759 : ZEND_VM_NEXT_OPCODE();
25198 : }
25199 :
25200 : static int ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25201 216 : {
25202 216 : zend_op *opline = EX(opline);
25203 :
25204 :
25205 216 : is_not_equal_function(&EX_T(opline->result.u.var).tmp_var,
25206 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25207 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25208 :
25209 :
25210 216 : ZEND_VM_NEXT_OPCODE();
25211 : }
25212 :
25213 : static int ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25214 60524 : {
25215 60524 : zend_op *opline = EX(opline);
25216 :
25217 :
25218 60524 : is_smaller_function(&EX_T(opline->result.u.var).tmp_var,
25219 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25220 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25221 :
25222 :
25223 60524 : ZEND_VM_NEXT_OPCODE();
25224 : }
25225 :
25226 : static int ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25227 0 : {
25228 0 : zend_op *opline = EX(opline);
25229 :
25230 :
25231 0 : is_smaller_or_equal_function(&EX_T(opline->result.u.var).tmp_var,
25232 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25233 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25234 :
25235 :
25236 0 : ZEND_VM_NEXT_OPCODE();
25237 : }
25238 :
25239 : static int ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25240 0 : {
25241 0 : zend_op *opline = EX(opline);
25242 :
25243 :
25244 0 : bitwise_or_function(&EX_T(opline->result.u.var).tmp_var,
25245 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25246 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25247 :
25248 :
25249 0 : ZEND_VM_NEXT_OPCODE();
25250 : }
25251 :
25252 : static int ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25253 0 : {
25254 0 : zend_op *opline = EX(opline);
25255 :
25256 :
25257 0 : bitwise_and_function(&EX_T(opline->result.u.var).tmp_var,
25258 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25259 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25260 :
25261 :
25262 0 : ZEND_VM_NEXT_OPCODE();
25263 : }
25264 :
25265 : static int ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25266 0 : {
25267 0 : zend_op *opline = EX(opline);
25268 :
25269 :
25270 0 : bitwise_xor_function(&EX_T(opline->result.u.var).tmp_var,
25271 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25272 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25273 :
25274 :
25275 0 : ZEND_VM_NEXT_OPCODE();
25276 : }
25277 :
25278 : static int ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25279 0 : {
25280 0 : zend_op *opline = EX(opline);
25281 :
25282 :
25283 0 : boolean_xor_function(&EX_T(opline->result.u.var).tmp_var,
25284 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
25285 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
25286 :
25287 :
25288 0 : ZEND_VM_NEXT_OPCODE();
25289 : }
25290 :
25291 : static int zend_binary_assign_op_obj_helper_SPEC_CV_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
25292 0 : {
25293 0 : zend_op *opline = EX(opline);
25294 0 : zend_op *op_data = opline+1;
25295 : zend_free_op free_op_data1;
25296 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
25297 : zval *object;
25298 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25299 0 : zval *value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
25300 0 : znode *result = &opline->result;
25301 0 : zval **retval = &EX_T(result->u.var).var.ptr;
25302 0 : int have_get_ptr = 0;
25303 :
25304 0 : EX_T(result->u.var).var.ptr_ptr = NULL;
25305 0 : make_real_object(object_ptr TSRMLS_CC);
25306 0 : object = *object_ptr;
25307 :
25308 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
25309 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
25310 :
25311 0 : FREE_OP(free_op_data1);
25312 :
25313 0 : if (!RETURN_VALUE_UNUSED(result)) {
25314 0 : *retval = EG(uninitialized_zval_ptr);
25315 0 : PZVAL_LOCK(*retval);
25316 : }
25317 : } else {
25318 : /* here we are sure we are dealing with an object */
25319 : if (0) {
25320 : MAKE_REAL_ZVAL_PTR(property);
25321 : }
25322 :
25323 : /* here property is a string */
25324 0 : if (opline->extended_value == ZEND_ASSIGN_OBJ
25325 : && Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
25326 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
25327 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
25328 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
25329 :
25330 0 : have_get_ptr = 1;
25331 0 : binary_op(*zptr, *zptr, value TSRMLS_CC);
25332 0 : if (!RETURN_VALUE_UNUSED(result)) {
25333 0 : *retval = *zptr;
25334 0 : PZVAL_LOCK(*retval);
25335 : }
25336 : }
25337 : }
25338 :
25339 0 : if (!have_get_ptr) {
25340 0 : zval *z = NULL;
25341 :
25342 0 : switch (opline->extended_value) {
25343 : case ZEND_ASSIGN_OBJ:
25344 0 : if (Z_OBJ_HT_P(object)->read_property) {
25345 0 : z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
25346 : }
25347 0 : break;
25348 : case ZEND_ASSIGN_DIM:
25349 0 : if (Z_OBJ_HT_P(object)->read_dimension) {
25350 0 : z = Z_OBJ_HT_P(object)->read_dimension(object, property, BP_VAR_R TSRMLS_CC);
25351 : }
25352 : break;
25353 : }
25354 0 : if (z) {
25355 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
25356 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
25357 :
25358 0 : if (z->refcount == 0) {
25359 0 : zval_dtor(z);
25360 0 : FREE_ZVAL(z);
25361 : }
25362 0 : z = value;
25363 : }
25364 0 : z->refcount++;
25365 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
25366 0 : binary_op(z, z, value TSRMLS_CC);
25367 0 : switch (opline->extended_value) {
25368 : case ZEND_ASSIGN_OBJ:
25369 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
25370 0 : break;
25371 : case ZEND_ASSIGN_DIM:
25372 0 : Z_OBJ_HT_P(object)->write_dimension(object, property, z TSRMLS_CC);
25373 : break;
25374 : }
25375 0 : if (!RETURN_VALUE_UNUSED(result)) {
25376 0 : *retval = z;
25377 0 : PZVAL_LOCK(*retval);
25378 : }
25379 0 : zval_ptr_dtor(&z);
25380 : } else {
25381 0 : zend_error(E_WARNING, "Attempt to assign property of non-object");
25382 0 : if (!RETURN_VALUE_UNUSED(result)) {
25383 0 : *retval = EG(uninitialized_zval_ptr);
25384 0 : PZVAL_LOCK(*retval);
25385 : }
25386 : }
25387 : }
25388 :
25389 : if (0) {
25390 : zval_ptr_dtor(&property);
25391 : } else {
25392 :
25393 : }
25394 0 : FREE_OP(free_op_data1);
25395 : }
25396 :
25397 : /* assign_obj has two opcodes! */
25398 0 : ZEND_VM_INC_OPCODE();
25399 0 : ZEND_VM_NEXT_OPCODE();
25400 : }
25401 :
25402 : static int zend_binary_assign_op_helper_SPEC_CV_CV(int (*binary_op)(zval *result, zval *op1, zval *op2 TSRMLS_DC), ZEND_OPCODE_HANDLER_ARGS)
25403 6407 : {
25404 6407 : zend_op *opline = EX(opline);
25405 : zend_free_op free_op_data2, free_op_data1;
25406 : zval **var_ptr;
25407 : zval *value;
25408 6407 : zend_bool increment_opline = 0;
25409 :
25410 6407 : switch (opline->extended_value) {
25411 : case ZEND_ASSIGN_OBJ:
25412 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25413 : break;
25414 : case ZEND_ASSIGN_DIM: {
25415 4135 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
25416 :
25417 : if (object_ptr && IS_CV != IS_CV && !0) {
25418 : (*object_ptr)->refcount++; /* undo the effect of get_obj_zval_ptr_ptr() */
25419 : }
25420 :
25421 4135 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
25422 0 : return zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25423 : } else {
25424 4135 : zend_op *op_data = opline+1;
25425 4135 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25426 :
25427 4135 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
25428 4135 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
25429 4135 : var_ptr = get_zval_ptr_ptr(&op_data->op2, EX(Ts), &free_op_data2, BP_VAR_RW);
25430 4135 : increment_opline = 1;
25431 : }
25432 : }
25433 4135 : break;
25434 : default:
25435 2272 : value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25436 2272 : var_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC);
25437 : /* do nothing */
25438 : break;
25439 : }
25440 :
25441 6407 : if (!var_ptr) {
25442 0 : zend_error_noreturn(E_ERROR, "Cannot use assign-op operators with overloaded objects nor string offsets");
25443 : }
25444 :
25445 6407 : if (*var_ptr == EG(error_zval_ptr)) {
25446 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
25447 0 : EX_T(opline->result.u.var).var.ptr_ptr = &EG(uninitialized_zval_ptr);
25448 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
25449 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25450 : }
25451 :
25452 :
25453 0 : if (increment_opline) {
25454 0 : ZEND_VM_INC_OPCODE();
25455 : }
25456 0 : ZEND_VM_NEXT_OPCODE();
25457 : }
25458 :
25459 6407 : SEPARATE_ZVAL_IF_NOT_REF(var_ptr);
25460 :
25461 6407 : if(Z_TYPE_PP(var_ptr) == IS_OBJECT && Z_OBJ_HANDLER_PP(var_ptr, get)
25462 : && Z_OBJ_HANDLER_PP(var_ptr, set)) {
25463 : /* proxy object */
25464 0 : zval *objval = Z_OBJ_HANDLER_PP(var_ptr, get)(*var_ptr TSRMLS_CC);
25465 0 : objval->refcount++;
25466 0 : binary_op(objval, objval, value TSRMLS_CC);
25467 0 : Z_OBJ_HANDLER_PP(var_ptr, set)(var_ptr, objval TSRMLS_CC);
25468 0 : zval_ptr_dtor(&objval);
25469 : } else {
25470 6407 : binary_op(*var_ptr, *var_ptr, value TSRMLS_CC);
25471 : }
25472 :
25473 6407 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
25474 0 : EX_T(opline->result.u.var).var.ptr_ptr = var_ptr;
25475 0 : PZVAL_LOCK(*var_ptr);
25476 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25477 : }
25478 :
25479 6407 : if (increment_opline) {
25480 4135 : ZEND_VM_INC_OPCODE();
25481 4135 : FREE_OP(free_op_data1);
25482 4135 : FREE_OP_VAR_PTR(free_op_data2);
25483 : }
25484 :
25485 6407 : ZEND_VM_NEXT_OPCODE();
25486 : }
25487 :
25488 : static int ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25489 579 : {
25490 579 : return zend_binary_assign_op_helper_SPEC_CV_CV(add_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25491 : }
25492 :
25493 : static int ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25494 0 : {
25495 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(sub_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25496 : }
25497 :
25498 : static int ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25499 0 : {
25500 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(mul_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25501 : }
25502 :
25503 : static int ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25504 0 : {
25505 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(div_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25506 : }
25507 :
25508 : static int ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25509 0 : {
25510 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(mod_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25511 : }
25512 :
25513 : static int ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25514 0 : {
25515 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25516 : }
25517 :
25518 : static int ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25519 0 : {
25520 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25521 : }
25522 :
25523 : static int ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25524 5828 : {
25525 5828 : return zend_binary_assign_op_helper_SPEC_CV_CV(concat_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25526 : }
25527 :
25528 : static int ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25529 0 : {
25530 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25531 : }
25532 :
25533 : static int ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25534 0 : {
25535 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25536 : }
25537 :
25538 : static int ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25539 0 : {
25540 0 : return zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25541 : }
25542 :
25543 : static int zend_pre_incdec_property_helper_SPEC_CV_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
25544 0 : {
25545 0 : zend_op *opline = EX(opline);
25546 :
25547 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
25548 : zval *object;
25549 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25550 0 : zval **retval = &EX_T(opline->result.u.var).var.ptr;
25551 0 : int have_get_ptr = 0;
25552 :
25553 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
25554 0 : object = *object_ptr;
25555 :
25556 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
25557 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
25558 :
25559 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
25560 0 : *retval = EG(uninitialized_zval_ptr);
25561 0 : PZVAL_LOCK(*retval);
25562 : }
25563 :
25564 0 : ZEND_VM_NEXT_OPCODE();
25565 : }
25566 :
25567 : /* here we are sure we are dealing with an object */
25568 :
25569 : if (0) {
25570 : MAKE_REAL_ZVAL_PTR(property);
25571 : }
25572 :
25573 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
25574 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
25575 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
25576 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
25577 :
25578 0 : have_get_ptr = 1;
25579 0 : incdec_op(*zptr);
25580 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
25581 0 : *retval = *zptr;
25582 0 : PZVAL_LOCK(*retval);
25583 : }
25584 : }
25585 : }
25586 :
25587 0 : if (!have_get_ptr) {
25588 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
25589 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
25590 :
25591 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
25592 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
25593 :
25594 0 : if (z->refcount == 0) {
25595 0 : zval_dtor(z);
25596 0 : FREE_ZVAL(z);
25597 : }
25598 0 : z = value;
25599 : }
25600 0 : z->refcount++;
25601 0 : SEPARATE_ZVAL_IF_NOT_REF(&z);
25602 0 : incdec_op(z);
25603 0 : *retval = z;
25604 0 : Z_OBJ_HT_P(object)->write_property(object, property, z TSRMLS_CC);
25605 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
25606 0 : zval_ptr_dtor(&z);
25607 : } else {
25608 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
25609 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
25610 0 : *retval = EG(uninitialized_zval_ptr);
25611 0 : PZVAL_LOCK(*retval);
25612 : }
25613 : }
25614 : }
25615 :
25616 : if (0) {
25617 : zval_ptr_dtor(&property);
25618 : } else {
25619 :
25620 : }
25621 :
25622 0 : ZEND_VM_NEXT_OPCODE();
25623 : }
25624 :
25625 : static int ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25626 0 : {
25627 0 : return zend_pre_incdec_property_helper_SPEC_CV_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25628 : }
25629 :
25630 : static int ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25631 0 : {
25632 0 : return zend_pre_incdec_property_helper_SPEC_CV_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25633 : }
25634 :
25635 : static int zend_post_incdec_property_helper_SPEC_CV_CV(incdec_t incdec_op, ZEND_OPCODE_HANDLER_ARGS)
25636 0 : {
25637 0 : zend_op *opline = EX(opline);
25638 :
25639 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
25640 : zval *object;
25641 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25642 0 : zval *retval = &EX_T(opline->result.u.var).tmp_var;
25643 0 : int have_get_ptr = 0;
25644 :
25645 0 : make_real_object(object_ptr TSRMLS_CC); /* this should modify object only if it's empty */
25646 0 : object = *object_ptr;
25647 :
25648 0 : if (Z_TYPE_P(object) != IS_OBJECT) {
25649 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
25650 :
25651 0 : *retval = *EG(uninitialized_zval_ptr);
25652 :
25653 0 : ZEND_VM_NEXT_OPCODE();
25654 : }
25655 :
25656 : /* here we are sure we are dealing with an object */
25657 :
25658 : if (0) {
25659 : MAKE_REAL_ZVAL_PTR(property);
25660 : }
25661 :
25662 0 : if (Z_OBJ_HT_P(object)->get_property_ptr_ptr) {
25663 0 : zval **zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property TSRMLS_CC);
25664 0 : if (zptr != NULL) { /* NULL means no success in getting PTR */
25665 0 : have_get_ptr = 1;
25666 0 : SEPARATE_ZVAL_IF_NOT_REF(zptr);
25667 :
25668 0 : *retval = **zptr;
25669 0 : zendi_zval_copy_ctor(*retval);
25670 :
25671 0 : incdec_op(*zptr);
25672 :
25673 : }
25674 : }
25675 :
25676 0 : if (!have_get_ptr) {
25677 0 : if (Z_OBJ_HT_P(object)->read_property && Z_OBJ_HT_P(object)->write_property) {
25678 0 : zval *z = Z_OBJ_HT_P(object)->read_property(object, property, BP_VAR_R TSRMLS_CC);
25679 : zval *z_copy;
25680 :
25681 0 : if (Z_TYPE_P(z) == IS_OBJECT && Z_OBJ_HT_P(z)->get) {
25682 0 : zval *value = Z_OBJ_HT_P(z)->get(z TSRMLS_CC);
25683 :
25684 0 : if (z->refcount == 0) {
25685 0 : zval_dtor(z);
25686 0 : FREE_ZVAL(z);
25687 : }
25688 0 : z = value;
25689 : }
25690 0 : *retval = *z;
25691 0 : zendi_zval_copy_ctor(*retval);
25692 0 : ALLOC_ZVAL(z_copy);
25693 0 : *z_copy = *z;
25694 0 : zendi_zval_copy_ctor(*z_copy);
25695 0 : INIT_PZVAL(z_copy);
25696 0 : incdec_op(z_copy);
25697 0 : z->refcount++;
25698 0 : Z_OBJ_HT_P(object)->write_property(object, property, z_copy TSRMLS_CC);
25699 0 : zval_ptr_dtor(&z_copy);
25700 0 : zval_ptr_dtor(&z);
25701 : } else {
25702 0 : zend_error(E_WARNING, "Attempt to increment/decrement property of non-object");
25703 0 : *retval = *EG(uninitialized_zval_ptr);
25704 : }
25705 : }
25706 :
25707 : if (0) {
25708 : zval_ptr_dtor(&property);
25709 : } else {
25710 :
25711 : }
25712 :
25713 0 : ZEND_VM_NEXT_OPCODE();
25714 : }
25715 :
25716 : static int ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25717 0 : {
25718 0 : return zend_post_incdec_property_helper_SPEC_CV_CV(increment_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25719 : }
25720 :
25721 : static int ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25722 0 : {
25723 0 : return zend_post_incdec_property_helper_SPEC_CV_CV(decrement_function, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25724 : }
25725 :
25726 : static int ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25727 30091 : {
25728 30091 : zend_op *opline = EX(opline);
25729 :
25730 30091 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25731 :
25732 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK &&
25733 : IS_CV != IS_CV &&
25734 : EX_T(opline->op1.u.var).var.ptr_ptr) {
25735 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
25736 : }
25737 30091 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC), dim, 0, BP_VAR_R TSRMLS_CC);
25738 :
25739 :
25740 30091 : ZEND_VM_NEXT_OPCODE();
25741 : }
25742 :
25743 : static int ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25744 6 : {
25745 6 : zend_op *opline = EX(opline);
25746 : zend_free_op free_op1;
25747 6 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25748 :
25749 6 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), dim, 0, BP_VAR_W TSRMLS_CC);
25750 :
25751 : if (IS_CV == IS_VAR && 0 &&
25752 : READY_TO_DESTROY(free_op1.var) &&
25753 : !RETURN_VALUE_UNUSED(&opline->result)) {
25754 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25755 : }
25756 :
25757 6 : ZEND_VM_NEXT_OPCODE();
25758 : }
25759 :
25760 : static int ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25761 110 : {
25762 110 : zend_op *opline = EX(opline);
25763 : zend_free_op free_op1;
25764 110 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25765 :
25766 110 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), dim, 0, BP_VAR_RW TSRMLS_CC);
25767 :
25768 : if (IS_CV == IS_VAR && 0 &&
25769 : READY_TO_DESTROY(free_op1.var) &&
25770 : !RETURN_VALUE_UNUSED(&opline->result)) {
25771 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25772 : }
25773 :
25774 110 : ZEND_VM_NEXT_OPCODE();
25775 : }
25776 :
25777 : static int ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25778 0 : {
25779 0 : zend_op *opline = EX(opline);
25780 :
25781 0 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25782 :
25783 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC), dim, 0, BP_VAR_IS TSRMLS_CC);
25784 :
25785 :
25786 0 : ZEND_VM_NEXT_OPCODE();
25787 : }
25788 :
25789 : static int ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25790 0 : {
25791 0 : zend_op *opline = EX(opline);
25792 : zend_free_op free_op1;
25793 0 : int type = ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)?BP_VAR_W:BP_VAR_R;
25794 : zval *dim;
25795 :
25796 : if (IS_CV == IS_UNUSED && type == BP_VAR_R) {
25797 : zend_error_noreturn(E_ERROR, "Cannot use [] for reading");
25798 : }
25799 0 : dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25800 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC), dim, 0, type TSRMLS_CC);
25801 :
25802 : if (IS_CV == IS_VAR && type == BP_VAR_W && 0 &&
25803 : READY_TO_DESTROY(free_op1.var) &&
25804 : !RETURN_VALUE_UNUSED(&opline->result)) {
25805 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25806 : }
25807 :
25808 0 : ZEND_VM_NEXT_OPCODE();
25809 : }
25810 :
25811 : static int ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25812 0 : {
25813 0 : zend_op *opline = EX(opline);
25814 : zend_free_op free_op1;
25815 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
25816 0 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25817 :
25818 : /* Not needed in DIM_UNSET
25819 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK) {
25820 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
25821 : }
25822 : */
25823 : if (IS_CV == IS_CV) {
25824 0 : if (container != &EG(uninitialized_zval_ptr)) {
25825 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
25826 : }
25827 : }
25828 0 : zend_fetch_dimension_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, dim, 0, BP_VAR_UNSET TSRMLS_CC);
25829 :
25830 : if (IS_CV == IS_VAR && 0 &&
25831 : READY_TO_DESTROY(free_op1.var) &&
25832 : !RETURN_VALUE_UNUSED(&opline->result)) {
25833 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25834 : }
25835 :
25836 0 : if (EX_T(opline->result.u.var).var.ptr_ptr == NULL) {
25837 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
25838 : } else {
25839 : zend_free_op free_res;
25840 :
25841 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
25842 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
25843 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
25844 : }
25845 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
25846 0 : FREE_OP_VAR_PTR(free_res);
25847 : }
25848 0 : ZEND_VM_NEXT_OPCODE();
25849 : }
25850 :
25851 : static int zend_fetch_property_address_read_helper_SPEC_CV_CV(int type, ZEND_OPCODE_HANDLER_ARGS)
25852 0 : {
25853 0 : zend_op *opline = EX(opline);
25854 : zval *container;
25855 : zval **retval;
25856 :
25857 :
25858 0 : retval = &EX_T(opline->result.u.var).var.ptr;
25859 0 : EX_T(opline->result.u.var).var.ptr_ptr = retval;
25860 :
25861 0 : container = _get_zval_ptr_cv(&opline->op1, EX(Ts), type TSRMLS_CC);
25862 :
25863 0 : if (container == EG(error_zval_ptr)) {
25864 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
25865 0 : *retval = EG(error_zval_ptr);
25866 0 : PZVAL_LOCK(*retval);
25867 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25868 : }
25869 :
25870 0 : ZEND_VM_NEXT_OPCODE();
25871 : }
25872 :
25873 :
25874 0 : if (Z_TYPE_P(container) != IS_OBJECT || !Z_OBJ_HT_P(container)->read_property) {
25875 0 : if (type != BP_VAR_IS) {
25876 0 : zend_error(E_NOTICE, "Trying to get property of non-object");
25877 : }
25878 0 : *retval = EG(uninitialized_zval_ptr);
25879 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
25880 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25881 : } else {
25882 :
25883 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25884 :
25885 : if (0) {
25886 : MAKE_REAL_ZVAL_PTR(offset);
25887 : }
25888 :
25889 : /* here we are sure we are dealing with an object */
25890 0 : *retval = Z_OBJ_HT_P(container)->read_property(container, offset, type TSRMLS_CC);
25891 :
25892 0 : if (RETURN_VALUE_UNUSED(&opline->result) && ((*retval)->refcount == 0)) {
25893 0 : zval_dtor(*retval);
25894 0 : FREE_ZVAL(*retval);
25895 : } else {
25896 0 : SELECTIVE_PZVAL_LOCK(*retval, &opline->result);
25897 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25898 : }
25899 :
25900 : if (0) {
25901 : zval_ptr_dtor(&offset);
25902 : } else {
25903 :
25904 : }
25905 : }
25906 :
25907 0 : ZEND_VM_NEXT_OPCODE();
25908 : }
25909 :
25910 : static int ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25911 0 : {
25912 0 : return zend_fetch_property_address_read_helper_SPEC_CV_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25913 : }
25914 :
25915 : static int ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25916 0 : {
25917 0 : zend_op *opline = EX(opline);
25918 : zend_free_op free_op1;
25919 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25920 :
25921 : if (opline->extended_value == ZEND_FETCH_ADD_LOCK && IS_CV != IS_CV) {
25922 : PZVAL_LOCK(*EX_T(opline->op1.u.var).var.ptr_ptr);
25923 : EX_T(opline->op1.u.var).var.ptr = *EX_T(opline->op1.u.var).var.ptr_ptr;
25924 : }
25925 :
25926 : if (0) {
25927 : MAKE_REAL_ZVAL_PTR(property);
25928 : }
25929 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
25930 : if (0) {
25931 : zval_ptr_dtor(&property);
25932 : } else {
25933 :
25934 : }
25935 : if (IS_CV == IS_VAR && 0 &&
25936 : READY_TO_DESTROY(free_op1.var) &&
25937 : !RETURN_VALUE_UNUSED(&opline->result)) {
25938 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25939 : }
25940 :
25941 0 : ZEND_VM_NEXT_OPCODE();
25942 : }
25943 :
25944 : static int ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25945 0 : {
25946 0 : zend_op *opline = EX(opline);
25947 : zend_free_op free_op1;
25948 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25949 :
25950 : if (0) {
25951 : MAKE_REAL_ZVAL_PTR(property);
25952 : }
25953 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_RW TSRMLS_CC), property, BP_VAR_RW TSRMLS_CC);
25954 : if (0) {
25955 : zval_ptr_dtor(&property);
25956 : } else {
25957 :
25958 : }
25959 : if (IS_CV == IS_VAR && 0 &&
25960 : READY_TO_DESTROY(free_op1.var) &&
25961 : !RETURN_VALUE_UNUSED(&opline->result)) {
25962 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25963 : }
25964 :
25965 0 : ZEND_VM_NEXT_OPCODE();
25966 : }
25967 :
25968 : static int ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25969 0 : {
25970 0 : return zend_fetch_property_address_read_helper_SPEC_CV_CV(BP_VAR_IS, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
25971 : }
25972 :
25973 : static int ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
25974 0 : {
25975 0 : zend_op *opline = EX(opline);
25976 :
25977 0 : if (ARG_SHOULD_BE_SENT_BY_REF(EX(fbc), opline->extended_value)) {
25978 : /* Behave like FETCH_OBJ_W */
25979 : zend_free_op free_op1;
25980 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
25981 :
25982 : if (0) {
25983 : MAKE_REAL_ZVAL_PTR(property);
25984 : }
25985 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC), property, BP_VAR_W TSRMLS_CC);
25986 : if (0) {
25987 : zval_ptr_dtor(&property);
25988 : } else {
25989 :
25990 : }
25991 : if (IS_CV == IS_VAR && 0 &&
25992 : READY_TO_DESTROY(free_op1.var) &&
25993 : !RETURN_VALUE_UNUSED(&opline->result)) {
25994 : AI_USE_PTR(EX_T(opline->result.u.var).var);
25995 : }
25996 :
25997 0 : ZEND_VM_NEXT_OPCODE();
25998 : } else {
25999 0 : return zend_fetch_property_address_read_helper_SPEC_CV_CV(BP_VAR_R, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
26000 : }
26001 : }
26002 :
26003 : static int ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26004 0 : {
26005 0 : zend_op *opline = EX(opline);
26006 : zend_free_op free_op1, free_res;
26007 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
26008 0 : zval *property = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
26009 :
26010 : if (IS_CV == IS_CV) {
26011 0 : if (container != &EG(uninitialized_zval_ptr)) {
26012 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
26013 : }
26014 : }
26015 : if (0) {
26016 : MAKE_REAL_ZVAL_PTR(property);
26017 : }
26018 0 : zend_fetch_property_address(RETURN_VALUE_UNUSED(&opline->result)?NULL:&EX_T(opline->result.u.var), container, property, BP_VAR_UNSET TSRMLS_CC);
26019 : if (0) {
26020 : zval_ptr_dtor(&property);
26021 : } else {
26022 :
26023 : }
26024 : if (IS_CV == IS_VAR && 0 &&
26025 : READY_TO_DESTROY(free_op1.var) &&
26026 : !RETURN_VALUE_UNUSED(&opline->result)) {
26027 : AI_USE_PTR(EX_T(opline->result.u.var).var);
26028 : }
26029 :
26030 0 : PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr, &free_res);
26031 0 : if (EX_T(opline->result.u.var).var.ptr_ptr != &EG(uninitialized_zval_ptr)) {
26032 0 : SEPARATE_ZVAL_IF_NOT_REF(EX_T(opline->result.u.var).var.ptr_ptr);
26033 : }
26034 0 : PZVAL_LOCK(*EX_T(opline->result.u.var).var.ptr_ptr);
26035 0 : FREE_OP_VAR_PTR(free_res);
26036 0 : ZEND_VM_NEXT_OPCODE();
26037 : }
26038 :
26039 : static int ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26040 0 : {
26041 0 : zend_op *opline = EX(opline);
26042 0 : zend_op *op_data = opline+1;
26043 :
26044 0 : zval **object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
26045 :
26046 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_OBJ TSRMLS_CC);
26047 :
26048 : /* assign_obj has two opcodes! */
26049 0 : ZEND_VM_INC_OPCODE();
26050 0 : ZEND_VM_NEXT_OPCODE();
26051 : }
26052 :
26053 : static int ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26054 2746 : {
26055 2746 : zend_op *opline = EX(opline);
26056 2746 : zend_op *op_data = opline+1;
26057 :
26058 : zval **object_ptr;
26059 :
26060 : if (IS_CV == IS_CV || EX_T(opline->op1.u.var).var.ptr_ptr) {
26061 : /* not an array offset */
26062 2746 : object_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
26063 : } else {
26064 : object_ptr = NULL;
26065 : }
26066 :
26067 2746 : if (object_ptr && Z_TYPE_PP(object_ptr) == IS_OBJECT) {
26068 0 : zend_assign_to_object(&opline->result, object_ptr, &opline->op2, &op_data->op1, EX(Ts), ZEND_ASSIGN_DIM TSRMLS_CC);
26069 : } else {
26070 : zend_free_op free_op_data1;
26071 : zval *value;
26072 2746 : zval *dim = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
26073 :
26074 2746 : zend_fetch_dimension_address(&EX_T(op_data->op2.u.var), object_ptr, dim, 0, BP_VAR_W TSRMLS_CC);
26075 :
26076 2746 : value = get_zval_ptr(&op_data->op1, EX(Ts), &free_op_data1, BP_VAR_R);
26077 2746 : zend_assign_to_variable(&opline->result, &op_data->op2, &op_data->op1, value, (IS_TMP_FREE(free_op_data1)?IS_TMP_VAR:op_data->op1.op_type), EX(Ts) TSRMLS_CC);
26078 2746 : FREE_OP_IF_VAR(free_op_data1);
26079 : }
26080 :
26081 : /* assign_dim has two opcodes! */
26082 2746 : ZEND_VM_INC_OPCODE();
26083 2746 : ZEND_VM_NEXT_OPCODE();
26084 : }
26085 :
26086 : static int ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26087 5846 : {
26088 5846 : zend_op *opline = EX(opline);
26089 :
26090 5846 : zval *value = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
26091 :
26092 5846 : zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (0?IS_TMP_VAR:IS_CV), EX(Ts) TSRMLS_CC);
26093 : /* zend_assign_to_variable() always takes care of op2, never free it! */
26094 :
26095 5846 : ZEND_VM_NEXT_OPCODE();
26096 : }
26097 :
26098 : static int ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26099 0 : {
26100 0 : zend_op *opline = EX(opline);
26101 : zend_free_op free_op2;
26102 : zval **variable_ptr_ptr;
26103 0 : zval **value_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op2, EX(Ts), BP_VAR_W TSRMLS_CC);
26104 :
26105 : if (IS_CV == IS_VAR &&
26106 : value_ptr_ptr &&
26107 : !(*value_ptr_ptr)->is_ref &&
26108 : opline->extended_value == ZEND_RETURNS_FUNCTION &&
26109 : !EX_T(opline->op2.u.var).var.fcall_returned_reference) {
26110 : if (free_op2.var == NULL) {
26111 : PZVAL_LOCK(*value_ptr_ptr); /* undo the effect of get_zval_ptr_ptr() */
26112 : }
26113 : zend_error(E_STRICT, "Only variables should be assigned by reference");
26114 : return ZEND_ASSIGN_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
26115 : }
26116 : if (IS_CV == IS_VAR && EX_T(opline->op1.u.var).var.ptr_ptr == &EX_T(opline->op1.u.var).var.ptr) {
26117 : zend_error(E_ERROR, "Cannot assign by reference to overloaded object");
26118 : }
26119 :
26120 0 : variable_ptr_ptr = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
26121 0 : zend_assign_to_variable_reference(variable_ptr_ptr, value_ptr_ptr TSRMLS_CC);
26122 :
26123 0 : if (!RETURN_VALUE_UNUSED(&opline->result)) {
26124 0 : EX_T(opline->result.u.var).var.ptr_ptr = variable_ptr_ptr;
26125 0 : PZVAL_LOCK(*variable_ptr_ptr);
26126 0 : AI_USE_PTR(EX_T(opline->result.u.var).var);
26127 : }
26128 :
26129 :
26130 0 : ZEND_VM_NEXT_OPCODE();
26131 : }
26132 :
26133 : static int ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26134 26 : {
26135 26 : zend_op *opline = EX(opline);
26136 : zval *function_name;
26137 : char *function_name_strval;
26138 : int function_name_strlen;
26139 :
26140 :
26141 26 : zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
26142 :
26143 26 : function_name = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
26144 :
26145 26 : if (Z_TYPE_P(function_name)!=IS_STRING) {
26146 0 : zend_error_noreturn(E_ERROR, "Method name must be a string");
26147 : }
26148 :
26149 26 : function_name_strval = Z_STRVAL_P(function_name);
26150 26 : function_name_strlen = Z_STRLEN_P(function_name);
26151 :
26152 26 : EX(object) = _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
26153 :
26154 26 : if (EX(object) && Z_TYPE_P(EX(object)) == IS_OBJECT) {
26155 26 : if (Z_OBJ_HT_P(EX(object))->get_method == NULL) {
26156 0 : zend_error_noreturn(E_ERROR, "Object does not support method calls");
26157 : }
26158 :
26159 : /* First, locate the function. */
26160 26 : EX(fbc) = Z_OBJ_HT_P(EX(object))->get_method(&EX(object), function_name_strval, function_name_strlen TSRMLS_CC);
26161 26 : if (!EX(fbc)) {
26162 0 : zend_error_noreturn(E_ERROR, "Call to undefined method %s::%s()", Z_OBJ_CLASS_NAME_P(EX(object)), function_name_strval);
26163 : }
26164 : } else {
26165 0 : zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval);
26166 : }
26167 :
26168 26 : if (EX(fbc)->common.fn_flags & ZEND_ACC_STATIC) {
26169 0 : EX(object) = NULL;
26170 : } else {
26171 26 : if (!PZVAL_IS_REF(EX(object))) {
26172 26 : EX(object)->refcount++; /* For $this pointer */
26173 : } else {
26174 : zval *this_ptr;
26175 0 : ALLOC_ZVAL(this_ptr);
26176 0 : INIT_PZVAL_COPY(this_ptr, EX(object));
26177 0 : zval_copy_ctor(this_ptr);
26178 0 : EX(object) = this_ptr;
26179 : }
26180 : }
26181 :
26182 :
26183 26 : ZEND_VM_NEXT_OPCODE();
26184 : }
26185 :
26186 : static int ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26187 0 : {
26188 0 : zend_op *opline = EX(opline);
26189 0 : int switch_expr_is_overloaded=0;
26190 :
26191 :
26192 : if (IS_CV==IS_VAR) {
26193 : if (EX_T(opline->op1.u.var).var.ptr_ptr) {
26194 : PZVAL_LOCK(EX_T(opline->op1.u.var).var.ptr);
26195 : } else {
26196 : switch_expr_is_overloaded = 1;
26197 : EX_T(opline->op1.u.var).str_offset.str->refcount++;
26198 : }
26199 : }
26200 0 : is_equal_function(&EX_T(opline->result.u.var).tmp_var,
26201 : _get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC),
26202 : _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC) TSRMLS_CC);
26203 :
26204 0 : if (switch_expr_is_overloaded) {
26205 : /* We only free op1 if this is a string offset,
26206 : * Since if it is a TMP_VAR, it'll be reused by
26207 : * other CASE opcodes (whereas string offsets
26208 : * are allocated at each get_zval_ptr())
26209 : */
26210 :
26211 0 : EX_T(opline->op1.u.var).var.ptr_ptr = NULL;
26212 0 : AI_USE_PTR(EX_T(opline->op1.u.var).var);
26213 : }
26214 0 : ZEND_VM_NEXT_OPCODE();
26215 : }
26216 :
26217 : static int ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26218 0 : {
26219 0 : zend_op *opline = EX(opline);
26220 :
26221 0 : zval *array_ptr = &EX_T(opline->result.u.var).tmp_var;
26222 : zval *expr_ptr;
26223 0 : zval *offset=_get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
26224 :
26225 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
26226 0 : zval **expr_ptr_ptr = NULL;
26227 :
26228 0 : if (opline->extended_value) {
26229 0 : expr_ptr_ptr=_get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_W TSRMLS_CC);
26230 0 : expr_ptr = *expr_ptr_ptr;
26231 : } else {
26232 0 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
26233 : }
26234 : #else
26235 : expr_ptr=_get_zval_ptr_cv(&opline->op1, EX(Ts), BP_VAR_R TSRMLS_CC);
26236 : #endif
26237 :
26238 : if (0) { /* temporary variable */
26239 : zval *new_expr;
26240 :
26241 : ALLOC_ZVAL(new_expr);
26242 : INIT_PZVAL_COPY(new_expr, expr_ptr);
26243 : expr_ptr = new_expr;
26244 : } else {
26245 : #if 0 || IS_CV == IS_VAR || IS_CV == IS_CV
26246 0 : if (opline->extended_value) {
26247 0 : SEPARATE_ZVAL_TO_MAKE_IS_REF(expr_ptr_ptr);
26248 0 : expr_ptr = *expr_ptr_ptr;
26249 0 : expr_ptr->refcount++;
26250 : } else
26251 : #endif
26252 0 : if (PZVAL_IS_REF(expr_ptr)) {
26253 : zval *new_expr;
26254 :
26255 0 : ALLOC_ZVAL(new_expr);
26256 0 : INIT_PZVAL_COPY(new_expr, expr_ptr);
26257 0 : expr_ptr = new_expr;
26258 0 : zendi_zval_copy_ctor(*expr_ptr);
26259 : } else {
26260 0 : expr_ptr->refcount++;
26261 : }
26262 : }
26263 0 : if (offset) {
26264 0 : switch (Z_TYPE_P(offset)) {
26265 : case IS_DOUBLE:
26266 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), (long) Z_DVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
26267 0 : break;
26268 : case IS_LONG:
26269 : case IS_BOOL:
26270 0 : zend_hash_index_update(Z_ARRVAL_P(array_ptr), Z_LVAL_P(offset), &expr_ptr, sizeof(zval *), NULL);
26271 0 : break;
26272 : case IS_STRING:
26273 0 : zend_symtable_update(Z_ARRVAL_P(array_ptr), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, &expr_ptr, sizeof(zval *), NULL);
26274 0 : break;
26275 : case IS_NULL:
26276 0 : zend_hash_update(Z_ARRVAL_P(array_ptr), "", sizeof(""), &expr_ptr, sizeof(zval *), NULL);
26277 0 : break;
26278 : default:
26279 0 : zend_error(E_WARNING, "Illegal offset type");
26280 0 : zval_ptr_dtor(&expr_ptr);
26281 : /* do nothing */
26282 : break;
26283 : }
26284 :
26285 : } else {
26286 0 : zend_hash_next_index_insert(Z_ARRVAL_P(array_ptr), &expr_ptr, sizeof(zval *), NULL);
26287 : }
26288 0 : if (opline->extended_value) {
26289 :
26290 : } else {
26291 :
26292 : }
26293 0 : ZEND_VM_NEXT_OPCODE();
26294 : }
26295 :
26296 : static int ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26297 0 : {
26298 0 : zend_op *opline = EX(opline);
26299 :
26300 0 : array_init(&EX_T(opline->result.u.var).tmp_var);
26301 : if (IS_CV == IS_UNUSED) {
26302 : ZEND_VM_NEXT_OPCODE();
26303 : #if 0 || IS_CV != IS_UNUSED
26304 : } else {
26305 0 : return ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
26306 : #endif
26307 : }
26308 : }
26309 :
26310 : static int ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26311 0 : {
26312 0 : zend_op *opline = EX(opline);
26313 :
26314 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
26315 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
26316 : long index;
26317 :
26318 0 : if (container) {
26319 0 : if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
26320 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
26321 : }
26322 0 : switch (Z_TYPE_PP(container)) {
26323 : case IS_ARRAY: {
26324 0 : HashTable *ht = Z_ARRVAL_PP(container);
26325 :
26326 0 : switch (Z_TYPE_P(offset)) {
26327 : case IS_DOUBLE:
26328 0 : index = (long) Z_DVAL_P(offset);
26329 0 : zend_hash_index_del(ht, index);
26330 0 : break;
26331 : case IS_RESOURCE:
26332 : case IS_BOOL:
26333 : case IS_LONG:
26334 0 : index = Z_LVAL_P(offset);
26335 0 : zend_hash_index_del(ht, index);
26336 0 : break;
26337 : case IS_STRING:
26338 : if (IS_CV == IS_CV || IS_CV == IS_VAR) {
26339 0 : offset->refcount++;
26340 : }
26341 0 : if (zend_symtable_del(ht, offset->value.str.val, offset->value.str.len+1) == SUCCESS &&
26342 : ht == &EG(symbol_table)) {
26343 : zend_execute_data *ex;
26344 0 : ulong hash_value = zend_inline_hash_func(offset->value.str.val, offset->value.str.len+1);
26345 :
26346 0 : for (ex = execute_data; ex; ex = ex->prev_execute_data) {
26347 0 : if (ex->op_array && ex->symbol_table == ht) {
26348 : int i;
26349 :
26350 0 : for (i = 0; i < ex->op_array->last_var; i++) {
26351 0 : if (ex->op_array->vars[i].hash_value == hash_value &&
26352 : ex->op_array->vars[i].name_len == offset->value.str.len &&
26353 : !memcmp(ex->op_array->vars[i].name, offset->value.str.val, offset->value.str.len)) {
26354 0 : ex->CVs[i] = NULL;
26355 0 : break;
26356 : }
26357 : }
26358 : }
26359 : }
26360 : }
26361 : if (IS_CV == IS_CV || IS_CV == IS_VAR) {
26362 0 : zval_ptr_dtor(&offset);
26363 : }
26364 0 : break;
26365 : case IS_NULL:
26366 0 : zend_hash_del(ht, "", sizeof(""));
26367 0 : break;
26368 : default:
26369 0 : zend_error(E_WARNING, "Illegal offset type in unset");
26370 : break;
26371 : }
26372 :
26373 0 : break;
26374 : }
26375 : case IS_OBJECT:
26376 0 : if (!Z_OBJ_HT_P(*container)->unset_dimension) {
26377 0 : zend_error_noreturn(E_ERROR, "Cannot use object as array");
26378 : }
26379 : if (0) {
26380 : MAKE_REAL_ZVAL_PTR(offset);
26381 : }
26382 0 : Z_OBJ_HT_P(*container)->unset_dimension(*container, offset TSRMLS_CC);
26383 : if (0) {
26384 : zval_ptr_dtor(&offset);
26385 : } else {
26386 :
26387 : }
26388 0 : break;
26389 : case IS_STRING:
26390 0 : zend_error_noreturn(E_ERROR, "Cannot unset string offsets");
26391 : ZEND_VM_CONTINUE(); /* bailed out before */
26392 : default:
26393 :
26394 : break;
26395 : }
26396 : } else {
26397 :
26398 : }
26399 :
26400 0 : ZEND_VM_NEXT_OPCODE();
26401 : }
26402 :
26403 : static int ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26404 0 : {
26405 0 : zend_op *opline = EX(opline);
26406 :
26407 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_UNSET TSRMLS_CC);
26408 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
26409 :
26410 0 : if (container) {
26411 0 : if (IS_CV == IS_CV && container != &EG(uninitialized_zval_ptr)) {
26412 0 : SEPARATE_ZVAL_IF_NOT_REF(container);
26413 : }
26414 0 : if (Z_TYPE_PP(container) == IS_OBJECT) {
26415 : if (0) {
26416 : MAKE_REAL_ZVAL_PTR(offset);
26417 : }
26418 0 : Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
26419 : if (0) {
26420 : zval_ptr_dtor(&offset);
26421 : } else {
26422 :
26423 : }
26424 : } else {
26425 :
26426 : }
26427 : } else {
26428 :
26429 : }
26430 :
26431 0 : ZEND_VM_NEXT_OPCODE();
26432 : }
26433 :
26434 : static int zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(int prop_dim, ZEND_OPCODE_HANDLER_ARGS)
26435 0 : {
26436 0 : zend_op *opline = EX(opline);
26437 :
26438 0 : zval **container = _get_zval_ptr_ptr_cv(&opline->op1, EX(Ts), BP_VAR_IS TSRMLS_CC);
26439 0 : zval **value = NULL;
26440 0 : int result = 0;
26441 : long index;
26442 :
26443 0 : if (container) {
26444 :
26445 0 : zval *offset = _get_zval_ptr_cv(&opline->op2, EX(Ts), BP_VAR_R TSRMLS_CC);
26446 :
26447 0 : if (Z_TYPE_PP(container) == IS_ARRAY) {
26448 : HashTable *ht;
26449 0 : int isset = 0;
26450 :
26451 0 : ht = Z_ARRVAL_PP(container);
26452 :
26453 0 : switch (Z_TYPE_P(offset)) {
26454 : case IS_DOUBLE:
26455 0 : index = (long) Z_DVAL_P(offset);
26456 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
26457 0 : isset = 1;
26458 : }
26459 0 : break;
26460 : case IS_RESOURCE:
26461 : case IS_BOOL:
26462 : case IS_LONG:
26463 0 : index = Z_LVAL_P(offset);
26464 0 : if (zend_hash_index_find(ht, index, (void **) &value) == SUCCESS) {
26465 0 : isset = 1;
26466 : }
26467 0 : break;
26468 : case IS_STRING:
26469 0 : if (zend_symtable_find(ht, offset->value.str.val, offset->value.str.len+1, (void **) &value) == SUCCESS) {
26470 0 : isset = 1;
26471 : }
26472 0 : break;
26473 : case IS_NULL:
26474 0 : if (zend_hash_find(ht, "", sizeof(""), (void **) &value) == SUCCESS) {
26475 0 : isset = 1;
26476 : }
26477 0 : break;
26478 : default:
26479 0 : zend_error(E_WARNING, "Illegal offset type in isset or empty");
26480 :
26481 : break;
26482 : }
26483 :
26484 0 : switch (opline->extended_value) {
26485 : case ZEND_ISSET:
26486 0 : if (isset && Z_TYPE_PP(value) == IS_NULL) {
26487 0 : result = 0;
26488 : } else {
26489 0 : result = isset;
26490 : }
26491 0 : break;
26492 : case ZEND_ISEMPTY:
26493 0 : if (!isset || !i_zend_is_true(*value)) {
26494 0 : result = 0;
26495 : } else {
26496 0 : result = 1;
26497 : }
26498 : break;
26499 : }
26500 :
26501 0 : } else if (Z_TYPE_PP(container) == IS_OBJECT) {
26502 : if (0) {
26503 : MAKE_REAL_ZVAL_PTR(offset);
26504 : }
26505 0 : if (prop_dim) {
26506 0 : result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
26507 : } else {
26508 0 : result = Z_OBJ_HT_P(*container)->has_dimension(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
26509 : }
26510 : if (0) {
26511 : zval_ptr_dtor(&offset);
26512 : } else {
26513 :
26514 : }
26515 0 : } else if ((*container)->type == IS_STRING && !prop_dim) { /* string offsets */
26516 : zval tmp;
26517 :
26518 0 : if (Z_TYPE_P(offset) != IS_LONG) {
26519 0 : tmp = *offset;
26520 0 : zval_copy_ctor(&tmp);
26521 0 : convert_to_long(&tmp);
26522 0 : offset = &tmp;
26523 : }
26524 0 : if (Z_TYPE_P(offset) == IS_LONG) {
26525 0 : switch (opline->extended_value) {
26526 : case ZEND_ISSET:
26527 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container)) {
26528 0 : result = 1;
26529 : }
26530 0 : break;
26531 : case ZEND_ISEMPTY:
26532 0 : if (offset->value.lval >= 0 && offset->value.lval < Z_STRLEN_PP(container) && Z_STRVAL_PP(container)[offset->value.lval] != '0') {
26533 0 : result = 1;
26534 : }
26535 : break;
26536 : }
26537 : }
26538 :
26539 : } else {
26540 :
26541 : }
26542 : }
26543 :
26544 0 : Z_TYPE(EX_T(opline->result.u.var).tmp_var) = IS_BOOL;
26545 :
26546 0 : switch (opline->extended_value) {
26547 : case ZEND_ISSET:
26548 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = result;
26549 0 : break;
26550 : case ZEND_ISEMPTY:
26551 0 : Z_LVAL(EX_T(opline->result.u.var).tmp_var) = !result;
26552 : break;
26553 : }
26554 :
26555 0 : ZEND_VM_NEXT_OPCODE();
26556 : }
26557 :
26558 : static int ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26559 0 : {
26560 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(0, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
26561 : }
26562 :
26563 : static int ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26564 0 : {
26565 0 : return zend_isset_isempty_dim_prop_obj_handler_SPEC_CV_CV(1, ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
26566 : }
26567 :
26568 : static int ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
26569 0 : {
26570 0 : zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", EX(opline)->opcode, EX(opline)->op1.op_type, EX(opline)->op2.op_type);
26571 : ZEND_VM_RETURN_FROM_EXECUTE_LOOP();
26572 : }
26573 :
26574 :
26575 : void zend_init_opcodes_handlers()
26576 220 : {
26577 : static const opcode_handler_t labels[] = {
26578 : ZEND_NOP_SPEC_HANDLER,
26579 : ZEND_NOP_SPEC_HANDLER,
26580 : ZEND_NOP_SPEC_HANDLER,
26581 : ZEND_NOP_SPEC_HANDLER,
26582 : ZEND_NOP_SPEC_HANDLER,
26583 : ZEND_NOP_SPEC_HANDLER,
26584 : ZEND_NOP_SPEC_HANDLER,
26585 : ZEND_NOP_SPEC_HANDLER,
26586 : ZEND_NOP_SPEC_HANDLER,
26587 : ZEND_NOP_SPEC_HANDLER,
26588 : ZEND_NOP_SPEC_HANDLER,
26589 : ZEND_NOP_SPEC_HANDLER,
26590 : ZEND_NOP_SPEC_HANDLER,
26591 : ZEND_NOP_SPEC_HANDLER,
26592 : ZEND_NOP_SPEC_HANDLER,
26593 : ZEND_NOP_SPEC_HANDLER,
26594 : ZEND_NOP_SPEC_HANDLER,
26595 : ZEND_NOP_SPEC_HANDLER,
26596 : ZEND_NOP_SPEC_HANDLER,
26597 : ZEND_NOP_SPEC_HANDLER,
26598 : ZEND_NOP_SPEC_HANDLER,
26599 : ZEND_NOP_SPEC_HANDLER,
26600 : ZEND_NOP_SPEC_HANDLER,
26601 : ZEND_NOP_SPEC_HANDLER,
26602 : ZEND_NOP_SPEC_HANDLER,
26603 : ZEND_ADD_SPEC_CONST_CONST_HANDLER,
26604 : ZEND_ADD_SPEC_CONST_TMP_HANDLER,
26605 : ZEND_ADD_SPEC_CONST_VAR_HANDLER,
26606 : ZEND_NULL_HANDLER,
26607 : ZEND_ADD_SPEC_CONST_CV_HANDLER,
26608 : ZEND_ADD_SPEC_TMP_CONST_HANDLER,
26609 : ZEND_ADD_SPEC_TMP_TMP_HANDLER,
26610 : ZEND_ADD_SPEC_TMP_VAR_HANDLER,
26611 : ZEND_NULL_HANDLER,
26612 : ZEND_ADD_SPEC_TMP_CV_HANDLER,
26613 : ZEND_ADD_SPEC_VAR_CONST_HANDLER,
26614 : ZEND_ADD_SPEC_VAR_TMP_HANDLER,
26615 : ZEND_ADD_SPEC_VAR_VAR_HANDLER,
26616 : ZEND_NULL_HANDLER,
26617 : ZEND_ADD_SPEC_VAR_CV_HANDLER,
26618 : ZEND_NULL_HANDLER,
26619 : ZEND_NULL_HANDLER,
26620 : ZEND_NULL_HANDLER,
26621 : ZEND_NULL_HANDLER,
26622 : ZEND_NULL_HANDLER,
26623 : ZEND_ADD_SPEC_CV_CONST_HANDLER,
26624 : ZEND_ADD_SPEC_CV_TMP_HANDLER,
26625 : ZEND_ADD_SPEC_CV_VAR_HANDLER,
26626 : ZEND_NULL_HANDLER,
26627 : ZEND_ADD_SPEC_CV_CV_HANDLER,
26628 : ZEND_SUB_SPEC_CONST_CONST_HANDLER,
26629 : ZEND_SUB_SPEC_CONST_TMP_HANDLER,
26630 : ZEND_SUB_SPEC_CONST_VAR_HANDLER,
26631 : ZEND_NULL_HANDLER,
26632 : ZEND_SUB_SPEC_CONST_CV_HANDLER,
26633 : ZEND_SUB_SPEC_TMP_CONST_HANDLER,
26634 : ZEND_SUB_SPEC_TMP_TMP_HANDLER,
26635 : ZEND_SUB_SPEC_TMP_VAR_HANDLER,
26636 : ZEND_NULL_HANDLER,
26637 : ZEND_SUB_SPEC_TMP_CV_HANDLER,
26638 : ZEND_SUB_SPEC_VAR_CONST_HANDLER,
26639 : ZEND_SUB_SPEC_VAR_TMP_HANDLER,
26640 : ZEND_SUB_SPEC_VAR_VAR_HANDLER,
26641 : ZEND_NULL_HANDLER,
26642 : ZEND_SUB_SPEC_VAR_CV_HANDLER,
26643 : ZEND_NULL_HANDLER,
26644 : ZEND_NULL_HANDLER,
26645 : ZEND_NULL_HANDLER,
26646 : ZEND_NULL_HANDLER,
26647 : ZEND_NULL_HANDLER,
26648 : ZEND_SUB_SPEC_CV_CONST_HANDLER,
26649 : ZEND_SUB_SPEC_CV_TMP_HANDLER,
26650 : ZEND_SUB_SPEC_CV_VAR_HANDLER,
26651 : ZEND_NULL_HANDLER,
26652 : ZEND_SUB_SPEC_CV_CV_HANDLER,
26653 : ZEND_MUL_SPEC_CONST_CONST_HANDLER,
26654 : ZEND_MUL_SPEC_CONST_TMP_HANDLER,
26655 : ZEND_MUL_SPEC_CONST_VAR_HANDLER,
26656 : ZEND_NULL_HANDLER,
26657 : ZEND_MUL_SPEC_CONST_CV_HANDLER,
26658 : ZEND_MUL_SPEC_TMP_CONST_HANDLER,
26659 : ZEND_MUL_SPEC_TMP_TMP_HANDLER,
26660 : ZEND_MUL_SPEC_TMP_VAR_HANDLER,
26661 : ZEND_NULL_HANDLER,
26662 : ZEND_MUL_SPEC_TMP_CV_HANDLER,
26663 : ZEND_MUL_SPEC_VAR_CONST_HANDLER,
26664 : ZEND_MUL_SPEC_VAR_TMP_HANDLER,
26665 : ZEND_MUL_SPEC_VAR_VAR_HANDLER,
26666 : ZEND_NULL_HANDLER,
26667 : ZEND_MUL_SPEC_VAR_CV_HANDLER,
26668 : ZEND_NULL_HANDLER,
26669 : ZEND_NULL_HANDLER,
26670 : ZEND_NULL_HANDLER,
26671 : ZEND_NULL_HANDLER,
26672 : ZEND_NULL_HANDLER,
26673 : ZEND_MUL_SPEC_CV_CONST_HANDLER,
26674 : ZEND_MUL_SPEC_CV_TMP_HANDLER,
26675 : ZEND_MUL_SPEC_CV_VAR_HANDLER,
26676 : ZEND_NULL_HANDLER,
26677 : ZEND_MUL_SPEC_CV_CV_HANDLER,
26678 : ZEND_DIV_SPEC_CONST_CONST_HANDLER,
26679 : ZEND_DIV_SPEC_CONST_TMP_HANDLER,
26680 : ZEND_DIV_SPEC_CONST_VAR_HANDLER,
26681 : ZEND_NULL_HANDLER,
26682 : ZEND_DIV_SPEC_CONST_CV_HANDLER,
26683 : ZEND_DIV_SPEC_TMP_CONST_HANDLER,
26684 : ZEND_DIV_SPEC_TMP_TMP_HANDLER,
26685 : ZEND_DIV_SPEC_TMP_VAR_HANDLER,
26686 : ZEND_NULL_HANDLER,
26687 : ZEND_DIV_SPEC_TMP_CV_HANDLER,
26688 : ZEND_DIV_SPEC_VAR_CONST_HANDLER,
26689 : ZEND_DIV_SPEC_VAR_TMP_HANDLER,
26690 : ZEND_DIV_SPEC_VAR_VAR_HANDLER,
26691 : ZEND_NULL_HANDLER,
26692 : ZEND_DIV_SPEC_VAR_CV_HANDLER,
26693 : ZEND_NULL_HANDLER,
26694 : ZEND_NULL_HANDLER,
26695 : ZEND_NULL_HANDLER,
26696 : ZEND_NULL_HANDLER,
26697 : ZEND_NULL_HANDLER,
26698 : ZEND_DIV_SPEC_CV_CONST_HANDLER,
26699 : ZEND_DIV_SPEC_CV_TMP_HANDLER,
26700 : ZEND_DIV_SPEC_CV_VAR_HANDLER,
26701 : ZEND_NULL_HANDLER,
26702 : ZEND_DIV_SPEC_CV_CV_HANDLER,
26703 : ZEND_MOD_SPEC_CONST_CONST_HANDLER,
26704 : ZEND_MOD_SPEC_CONST_TMP_HANDLER,
26705 : ZEND_MOD_SPEC_CONST_VAR_HANDLER,
26706 : ZEND_NULL_HANDLER,
26707 : ZEND_MOD_SPEC_CONST_CV_HANDLER,
26708 : ZEND_MOD_SPEC_TMP_CONST_HANDLER,
26709 : ZEND_MOD_SPEC_TMP_TMP_HANDLER,
26710 : ZEND_MOD_SPEC_TMP_VAR_HANDLER,
26711 : ZEND_NULL_HANDLER,
26712 : ZEND_MOD_SPEC_TMP_CV_HANDLER,
26713 : ZEND_MOD_SPEC_VAR_CONST_HANDLER,
26714 : ZEND_MOD_SPEC_VAR_TMP_HANDLER,
26715 : ZEND_MOD_SPEC_VAR_VAR_HANDLER,
26716 : ZEND_NULL_HANDLER,
26717 : ZEND_MOD_SPEC_VAR_CV_HANDLER,
26718 : ZEND_NULL_HANDLER,
26719 : ZEND_NULL_HANDLER,
26720 : ZEND_NULL_HANDLER,
26721 : ZEND_NULL_HANDLER,
26722 : ZEND_NULL_HANDLER,
26723 : ZEND_MOD_SPEC_CV_CONST_HANDLER,
26724 : ZEND_MOD_SPEC_CV_TMP_HANDLER,
26725 : ZEND_MOD_SPEC_CV_VAR_HANDLER,
26726 : ZEND_NULL_HANDLER,
26727 : ZEND_MOD_SPEC_CV_CV_HANDLER,
26728 : ZEND_SL_SPEC_CONST_CONST_HANDLER,
26729 : ZEND_SL_SPEC_CONST_TMP_HANDLER,
26730 : ZEND_SL_SPEC_CONST_VAR_HANDLER,
26731 : ZEND_NULL_HANDLER,
26732 : ZEND_SL_SPEC_CONST_CV_HANDLER,
26733 : ZEND_SL_SPEC_TMP_CONST_HANDLER,
26734 : ZEND_SL_SPEC_TMP_TMP_HANDLER,
26735 : ZEND_SL_SPEC_TMP_VAR_HANDLER,
26736 : ZEND_NULL_HANDLER,
26737 : ZEND_SL_SPEC_TMP_CV_HANDLER,
26738 : ZEND_SL_SPEC_VAR_CONST_HANDLER,
26739 : ZEND_SL_SPEC_VAR_TMP_HANDLER,
26740 : ZEND_SL_SPEC_VAR_VAR_HANDLER,
26741 : ZEND_NULL_HANDLER,
26742 : ZEND_SL_SPEC_VAR_CV_HANDLER,
26743 : ZEND_NULL_HANDLER,
26744 : ZEND_NULL_HANDLER,
26745 : ZEND_NULL_HANDLER,
26746 : ZEND_NULL_HANDLER,
26747 : ZEND_NULL_HANDLER,
26748 : ZEND_SL_SPEC_CV_CONST_HANDLER,
26749 : ZEND_SL_SPEC_CV_TMP_HANDLER,
26750 : ZEND_SL_SPEC_CV_VAR_HANDLER,
26751 : ZEND_NULL_HANDLER,
26752 : ZEND_SL_SPEC_CV_CV_HANDLER,
26753 : ZEND_SR_SPEC_CONST_CONST_HANDLER,
26754 : ZEND_SR_SPEC_CONST_TMP_HANDLER,
26755 : ZEND_SR_SPEC_CONST_VAR_HANDLER,
26756 : ZEND_NULL_HANDLER,
26757 : ZEND_SR_SPEC_CONST_CV_HANDLER,
26758 : ZEND_SR_SPEC_TMP_CONST_HANDLER,
26759 : ZEND_SR_SPEC_TMP_TMP_HANDLER,
26760 : ZEND_SR_SPEC_TMP_VAR_HANDLER,
26761 : ZEND_NULL_HANDLER,
26762 : ZEND_SR_SPEC_TMP_CV_HANDLER,
26763 : ZEND_SR_SPEC_VAR_CONST_HANDLER,
26764 : ZEND_SR_SPEC_VAR_TMP_HANDLER,
26765 : ZEND_SR_SPEC_VAR_VAR_HANDLER,
26766 : ZEND_NULL_HANDLER,
26767 : ZEND_SR_SPEC_VAR_CV_HANDLER,
26768 : ZEND_NULL_HANDLER,
26769 : ZEND_NULL_HANDLER,
26770 : ZEND_NULL_HANDLER,
26771 : ZEND_NULL_HANDLER,
26772 : ZEND_NULL_HANDLER,
26773 : ZEND_SR_SPEC_CV_CONST_HANDLER,
26774 : ZEND_SR_SPEC_CV_TMP_HANDLER,
26775 : ZEND_SR_SPEC_CV_VAR_HANDLER,
26776 : ZEND_NULL_HANDLER,
26777 : ZEND_SR_SPEC_CV_CV_HANDLER,
26778 : ZEND_CONCAT_SPEC_CONST_CONST_HANDLER,
26779 : ZEND_CONCAT_SPEC_CONST_TMP_HANDLER,
26780 : ZEND_CONCAT_SPEC_CONST_VAR_HANDLER,
26781 : ZEND_NULL_HANDLER,
26782 : ZEND_CONCAT_SPEC_CONST_CV_HANDLER,
26783 : ZEND_CONCAT_SPEC_TMP_CONST_HANDLER,
26784 : ZEND_CONCAT_SPEC_TMP_TMP_HANDLER,
26785 : ZEND_CONCAT_SPEC_TMP_VAR_HANDLER,
26786 : ZEND_NULL_HANDLER,
26787 : ZEND_CONCAT_SPEC_TMP_CV_HANDLER,
26788 : ZEND_CONCAT_SPEC_VAR_CONST_HANDLER,
26789 : ZEND_CONCAT_SPEC_VAR_TMP_HANDLER,
26790 : ZEND_CONCAT_SPEC_VAR_VAR_HANDLER,
26791 : ZEND_NULL_HANDLER,
26792 : ZEND_CONCAT_SPEC_VAR_CV_HANDLER,
26793 : ZEND_NULL_HANDLER,
26794 : ZEND_NULL_HANDLER,
26795 : ZEND_NULL_HANDLER,
26796 : ZEND_NULL_HANDLER,
26797 : ZEND_NULL_HANDLER,
26798 : ZEND_CONCAT_SPEC_CV_CONST_HANDLER,
26799 : ZEND_CONCAT_SPEC_CV_TMP_HANDLER,
26800 : ZEND_CONCAT_SPEC_CV_VAR_HANDLER,
26801 : ZEND_NULL_HANDLER,
26802 : ZEND_CONCAT_SPEC_CV_CV_HANDLER,
26803 : ZEND_BW_OR_SPEC_CONST_CONST_HANDLER,
26804 : ZEND_BW_OR_SPEC_CONST_TMP_HANDLER,
26805 : ZEND_BW_OR_SPEC_CONST_VAR_HANDLER,
26806 : ZEND_NULL_HANDLER,
26807 : ZEND_BW_OR_SPEC_CONST_CV_HANDLER,
26808 : ZEND_BW_OR_SPEC_TMP_CONST_HANDLER,
26809 : ZEND_BW_OR_SPEC_TMP_TMP_HANDLER,
26810 : ZEND_BW_OR_SPEC_TMP_VAR_HANDLER,
26811 : ZEND_NULL_HANDLER,
26812 : ZEND_BW_OR_SPEC_TMP_CV_HANDLER,
26813 : ZEND_BW_OR_SPEC_VAR_CONST_HANDLER,
26814 : ZEND_BW_OR_SPEC_VAR_TMP_HANDLER,
26815 : ZEND_BW_OR_SPEC_VAR_VAR_HANDLER,
26816 : ZEND_NULL_HANDLER,
26817 : ZEND_BW_OR_SPEC_VAR_CV_HANDLER,
26818 : ZEND_NULL_HANDLER,
26819 : ZEND_NULL_HANDLER,
26820 : ZEND_NULL_HANDLER,
26821 : ZEND_NULL_HANDLER,
26822 : ZEND_NULL_HANDLER,
26823 : ZEND_BW_OR_SPEC_CV_CONST_HANDLER,
26824 : ZEND_BW_OR_SPEC_CV_TMP_HANDLER,
26825 : ZEND_BW_OR_SPEC_CV_VAR_HANDLER,
26826 : ZEND_NULL_HANDLER,
26827 : ZEND_BW_OR_SPEC_CV_CV_HANDLER,
26828 : ZEND_BW_AND_SPEC_CONST_CONST_HANDLER,
26829 : ZEND_BW_AND_SPEC_CONST_TMP_HANDLER,
26830 : ZEND_BW_AND_SPEC_CONST_VAR_HANDLER,
26831 : ZEND_NULL_HANDLER,
26832 : ZEND_BW_AND_SPEC_CONST_CV_HANDLER,
26833 : ZEND_BW_AND_SPEC_TMP_CONST_HANDLER,
26834 : ZEND_BW_AND_SPEC_TMP_TMP_HANDLER,
26835 : ZEND_BW_AND_SPEC_TMP_VAR_HANDLER,
26836 : ZEND_NULL_HANDLER,
26837 : ZEND_BW_AND_SPEC_TMP_CV_HANDLER,
26838 : ZEND_BW_AND_SPEC_VAR_CONST_HANDLER,
26839 : ZEND_BW_AND_SPEC_VAR_TMP_HANDLER,
26840 : ZEND_BW_AND_SPEC_VAR_VAR_HANDLER,
26841 : ZEND_NULL_HANDLER,
26842 : ZEND_BW_AND_SPEC_VAR_CV_HANDLER,
26843 : ZEND_NULL_HANDLER,
26844 : ZEND_NULL_HANDLER,
26845 : ZEND_NULL_HANDLER,
26846 : ZEND_NULL_HANDLER,
26847 : ZEND_NULL_HANDLER,
26848 : ZEND_BW_AND_SPEC_CV_CONST_HANDLER,
26849 : ZEND_BW_AND_SPEC_CV_TMP_HANDLER,
26850 : ZEND_BW_AND_SPEC_CV_VAR_HANDLER,
26851 : ZEND_NULL_HANDLER,
26852 : ZEND_BW_AND_SPEC_CV_CV_HANDLER,
26853 : ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER,
26854 : ZEND_BW_XOR_SPEC_CONST_TMP_HANDLER,
26855 : ZEND_BW_XOR_SPEC_CONST_VAR_HANDLER,
26856 : ZEND_NULL_HANDLER,
26857 : ZEND_BW_XOR_SPEC_CONST_CV_HANDLER,
26858 : ZEND_BW_XOR_SPEC_TMP_CONST_HANDLER,
26859 : ZEND_BW_XOR_SPEC_TMP_TMP_HANDLER,
26860 : ZEND_BW_XOR_SPEC_TMP_VAR_HANDLER,
26861 : ZEND_NULL_HANDLER,
26862 : ZEND_BW_XOR_SPEC_TMP_CV_HANDLER,
26863 : ZEND_BW_XOR_SPEC_VAR_CONST_HANDLER,
26864 : ZEND_BW_XOR_SPEC_VAR_TMP_HANDLER,
26865 : ZEND_BW_XOR_SPEC_VAR_VAR_HANDLER,
26866 : ZEND_NULL_HANDLER,
26867 : ZEND_BW_XOR_SPEC_VAR_CV_HANDLER,
26868 : ZEND_NULL_HANDLER,
26869 : ZEND_NULL_HANDLER,
26870 : ZEND_NULL_HANDLER,
26871 : ZEND_NULL_HANDLER,
26872 : ZEND_NULL_HANDLER,
26873 : ZEND_BW_XOR_SPEC_CV_CONST_HANDLER,
26874 : ZEND_BW_XOR_SPEC_CV_TMP_HANDLER,
26875 : ZEND_BW_XOR_SPEC_CV_VAR_HANDLER,
26876 : ZEND_NULL_HANDLER,
26877 : ZEND_BW_XOR_SPEC_CV_CV_HANDLER,
26878 : ZEND_BW_NOT_SPEC_CONST_HANDLER,
26879 : ZEND_BW_NOT_SPEC_CONST_HANDLER,
26880 : ZEND_BW_NOT_SPEC_CONST_HANDLER,
26881 : ZEND_BW_NOT_SPEC_CONST_HANDLER,
26882 : ZEND_BW_NOT_SPEC_CONST_HANDLER,
26883 : ZEND_BW_NOT_SPEC_TMP_HANDLER,
26884 : ZEND_BW_NOT_SPEC_TMP_HANDLER,
26885 : ZEND_BW_NOT_SPEC_TMP_HANDLER,
26886 : ZEND_BW_NOT_SPEC_TMP_HANDLER,
26887 : ZEND_BW_NOT_SPEC_TMP_HANDLER,
26888 : ZEND_BW_NOT_SPEC_VAR_HANDLER,
26889 : ZEND_BW_NOT_SPEC_VAR_HANDLER,
26890 : ZEND_BW_NOT_SPEC_VAR_HANDLER,
26891 : ZEND_BW_NOT_SPEC_VAR_HANDLER,
26892 : ZEND_BW_NOT_SPEC_VAR_HANDLER,
26893 : ZEND_NULL_HANDLER,
26894 : ZEND_NULL_HANDLER,
26895 : ZEND_NULL_HANDLER,
26896 : ZEND_NULL_HANDLER,
26897 : ZEND_NULL_HANDLER,
26898 : ZEND_BW_NOT_SPEC_CV_HANDLER,
26899 : ZEND_BW_NOT_SPEC_CV_HANDLER,
26900 : ZEND_BW_NOT_SPEC_CV_HANDLER,
26901 : ZEND_BW_NOT_SPEC_CV_HANDLER,
26902 : ZEND_BW_NOT_SPEC_CV_HANDLER,
26903 : ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
26904 : ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
26905 : ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
26906 : ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
26907 : ZEND_BOOL_NOT_SPEC_CONST_HANDLER,
26908 : ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
26909 : ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
26910 : ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
26911 : ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
26912 : ZEND_BOOL_NOT_SPEC_TMP_HANDLER,
26913 : ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
26914 : ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
26915 : ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
26916 : ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
26917 : ZEND_BOOL_NOT_SPEC_VAR_HANDLER,
26918 : ZEND_NULL_HANDLER,
26919 : ZEND_NULL_HANDLER,
26920 : ZEND_NULL_HANDLER,
26921 : ZEND_NULL_HANDLER,
26922 : ZEND_NULL_HANDLER,
26923 : ZEND_BOOL_NOT_SPEC_CV_HANDLER,
26924 : ZEND_BOOL_NOT_SPEC_CV_HANDLER,
26925 : ZEND_BOOL_NOT_SPEC_CV_HANDLER,
26926 : ZEND_BOOL_NOT_SPEC_CV_HANDLER,
26927 : ZEND_BOOL_NOT_SPEC_CV_HANDLER,
26928 : ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER,
26929 : ZEND_BOOL_XOR_SPEC_CONST_TMP_HANDLER,
26930 : ZEND_BOOL_XOR_SPEC_CONST_VAR_HANDLER,
26931 : ZEND_NULL_HANDLER,
26932 : ZEND_BOOL_XOR_SPEC_CONST_CV_HANDLER,
26933 : ZEND_BOOL_XOR_SPEC_TMP_CONST_HANDLER,
26934 : ZEND_BOOL_XOR_SPEC_TMP_TMP_HANDLER,
26935 : ZEND_BOOL_XOR_SPEC_TMP_VAR_HANDLER,
26936 : ZEND_NULL_HANDLER,
26937 : ZEND_BOOL_XOR_SPEC_TMP_CV_HANDLER,
26938 : ZEND_BOOL_XOR_SPEC_VAR_CONST_HANDLER,
26939 : ZEND_BOOL_XOR_SPEC_VAR_TMP_HANDLER,
26940 : ZEND_BOOL_XOR_SPEC_VAR_VAR_HANDLER,
26941 : ZEND_NULL_HANDLER,
26942 : ZEND_BOOL_XOR_SPEC_VAR_CV_HANDLER,
26943 : ZEND_NULL_HANDLER,
26944 : ZEND_NULL_HANDLER,
26945 : ZEND_NULL_HANDLER,
26946 : ZEND_NULL_HANDLER,
26947 : ZEND_NULL_HANDLER,
26948 : ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER,
26949 : ZEND_BOOL_XOR_SPEC_CV_TMP_HANDLER,
26950 : ZEND_BOOL_XOR_SPEC_CV_VAR_HANDLER,
26951 : ZEND_NULL_HANDLER,
26952 : ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER,
26953 : ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER,
26954 : ZEND_IS_IDENTICAL_SPEC_CONST_TMP_HANDLER,
26955 : ZEND_IS_IDENTICAL_SPEC_CONST_VAR_HANDLER,
26956 : ZEND_NULL_HANDLER,
26957 : ZEND_IS_IDENTICAL_SPEC_CONST_CV_HANDLER,
26958 : ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER,
26959 : ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER,
26960 : ZEND_IS_IDENTICAL_SPEC_TMP_VAR_HANDLER,
26961 : ZEND_NULL_HANDLER,
26962 : ZEND_IS_IDENTICAL_SPEC_TMP_CV_HANDLER,
26963 : ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER,
26964 : ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER,
26965 : ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER,
26966 : ZEND_NULL_HANDLER,
26967 : ZEND_IS_IDENTICAL_SPEC_VAR_CV_HANDLER,
26968 : ZEND_NULL_HANDLER,
26969 : ZEND_NULL_HANDLER,
26970 : ZEND_NULL_HANDLER,
26971 : ZEND_NULL_HANDLER,
26972 : ZEND_NULL_HANDLER,
26973 : ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER,
26974 : ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER,
26975 : ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER,
26976 : ZEND_NULL_HANDLER,
26977 : ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER,
26978 : ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER,
26979 : ZEND_IS_NOT_IDENTICAL_SPEC_CONST_TMP_HANDLER,
26980 : ZEND_IS_NOT_IDENTICAL_SPEC_CONST_VAR_HANDLER,
26981 : ZEND_NULL_HANDLER,
26982 : ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CV_HANDLER,
26983 : ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER,
26984 : ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER,
26985 : ZEND_IS_NOT_IDENTICAL_SPEC_TMP_VAR_HANDLER,
26986 : ZEND_NULL_HANDLER,
26987 : ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CV_HANDLER,
26988 : ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER,
26989 : ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER,
26990 : ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER,
26991 : ZEND_NULL_HANDLER,
26992 : ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CV_HANDLER,
26993 : ZEND_NULL_HANDLER,
26994 : ZEND_NULL_HANDLER,
26995 : ZEND_NULL_HANDLER,
26996 : ZEND_NULL_HANDLER,
26997 : ZEND_NULL_HANDLER,
26998 : ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER,
26999 : ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER,
27000 : ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER,
27001 : ZEND_NULL_HANDLER,
27002 : ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER,
27003 : ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER,
27004 : ZEND_IS_EQUAL_SPEC_CONST_TMP_HANDLER,
27005 : ZEND_IS_EQUAL_SPEC_CONST_VAR_HANDLER,
27006 : ZEND_NULL_HANDLER,
27007 : ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER,
27008 : ZEND_IS_EQUAL_SPEC_TMP_CONST_HANDLER,
27009 : ZEND_IS_EQUAL_SPEC_TMP_TMP_HANDLER,
27010 : ZEND_IS_EQUAL_SPEC_TMP_VAR_HANDLER,
27011 : ZEND_NULL_HANDLER,
27012 : ZEND_IS_EQUAL_SPEC_TMP_CV_HANDLER,
27013 : ZEND_IS_EQUAL_SPEC_VAR_CONST_HANDLER,
27014 : ZEND_IS_EQUAL_SPEC_VAR_TMP_HANDLER,
27015 : ZEND_IS_EQUAL_SPEC_VAR_VAR_HANDLER,
27016 : ZEND_NULL_HANDLER,
27017 : ZEND_IS_EQUAL_SPEC_VAR_CV_HANDLER,
27018 : ZEND_NULL_HANDLER,
27019 : ZEND_NULL_HANDLER,
27020 : ZEND_NULL_HANDLER,
27021 : ZEND_NULL_HANDLER,
27022 : ZEND_NULL_HANDLER,
27023 : ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER,
27024 : ZEND_IS_EQUAL_SPEC_CV_TMP_HANDLER,
27025 : ZEND_IS_EQUAL_SPEC_CV_VAR_HANDLER,
27026 : ZEND_NULL_HANDLER,
27027 : ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER,
27028 : ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER,
27029 : ZEND_IS_NOT_EQUAL_SPEC_CONST_TMP_HANDLER,
27030 : ZEND_IS_NOT_EQUAL_SPEC_CONST_VAR_HANDLER,
27031 : ZEND_NULL_HANDLER,
27032 : ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HANDLER,
27033 : ZEND_IS_NOT_EQUAL_SPEC_TMP_CONST_HANDLER,
27034 : ZEND_IS_NOT_EQUAL_SPEC_TMP_TMP_HANDLER,
27035 : ZEND_IS_NOT_EQUAL_SPEC_TMP_VAR_HANDLER,
27036 : ZEND_NULL_HANDLER,
27037 : ZEND_IS_NOT_EQUAL_SPEC_TMP_CV_HANDLER,
27038 : ZEND_IS_NOT_EQUAL_SPEC_VAR_CONST_HANDLER,
27039 : ZEND_IS_NOT_EQUAL_SPEC_VAR_TMP_HANDLER,
27040 : ZEND_IS_NOT_EQUAL_SPEC_VAR_VAR_HANDLER,
27041 : ZEND_NULL_HANDLER,
27042 : ZEND_IS_NOT_EQUAL_SPEC_VAR_CV_HANDLER,
27043 : ZEND_NULL_HANDLER,
27044 : ZEND_NULL_HANDLER,
27045 : ZEND_NULL_HANDLER,
27046 : ZEND_NULL_HANDLER,
27047 : ZEND_NULL_HANDLER,
27048 : ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER,
27049 : ZEND_IS_NOT_EQUAL_SPEC_CV_TMP_HANDLER,
27050 : ZEND_IS_NOT_EQUAL_SPEC_CV_VAR_HANDLER,
27051 : ZEND_NULL_HANDLER,
27052 : ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER,
27053 : ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER,
27054 : ZEND_IS_SMALLER_SPEC_CONST_TMP_HANDLER,
27055 : ZEND_IS_SMALLER_SPEC_CONST_VAR_HANDLER,
27056 : ZEND_NULL_HANDLER,
27057 : ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER,
27058 : ZEND_IS_SMALLER_SPEC_TMP_CONST_HANDLER,
27059 : ZEND_IS_SMALLER_SPEC_TMP_TMP_HANDLER,
27060 : ZEND_IS_SMALLER_SPEC_TMP_VAR_HANDLER,
27061 : ZEND_NULL_HANDLER,
27062 : ZEND_IS_SMALLER_SPEC_TMP_CV_HANDLER,
27063 : ZEND_IS_SMALLER_SPEC_VAR_CONST_HANDLER,
27064 : ZEND_IS_SMALLER_SPEC_VAR_TMP_HANDLER,
27065 : ZEND_IS_SMALLER_SPEC_VAR_VAR_HANDLER,
27066 : ZEND_NULL_HANDLER,
27067 : ZEND_IS_SMALLER_SPEC_VAR_CV_HANDLER,
27068 : ZEND_NULL_HANDLER,
27069 : ZEND_NULL_HANDLER,
27070 : ZEND_NULL_HANDLER,
27071 : ZEND_NULL_HANDLER,
27072 : ZEND_NULL_HANDLER,
27073 : ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER,
27074 : ZEND_IS_SMALLER_SPEC_CV_TMP_HANDLER,
27075 : ZEND_IS_SMALLER_SPEC_CV_VAR_HANDLER,
27076 : ZEND_NULL_HANDLER,
27077 : ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER,
27078 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER,
27079 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMP_HANDLER,
27080 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_VAR_HANDLER,
27081 : ZEND_NULL_HANDLER,
27082 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER,
27083 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CONST_HANDLER,
27084 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_TMP_HANDLER,
27085 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_VAR_HANDLER,
27086 : ZEND_NULL_HANDLER,
27087 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMP_CV_HANDLER,
27088 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CONST_HANDLER,
27089 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_TMP_HANDLER,
27090 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_VAR_HANDLER,
27091 : ZEND_NULL_HANDLER,
27092 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_VAR_CV_HANDLER,
27093 : ZEND_NULL_HANDLER,
27094 : ZEND_NULL_HANDLER,
27095 : ZEND_NULL_HANDLER,
27096 : ZEND_NULL_HANDLER,
27097 : ZEND_NULL_HANDLER,
27098 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER,
27099 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMP_HANDLER,
27100 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_VAR_HANDLER,
27101 : ZEND_NULL_HANDLER,
27102 : ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER,
27103 : ZEND_CAST_SPEC_CONST_HANDLER,
27104 : ZEND_CAST_SPEC_CONST_HANDLER,
27105 : ZEND_CAST_SPEC_CONST_HANDLER,
27106 : ZEND_CAST_SPEC_CONST_HANDLER,
27107 : ZEND_CAST_SPEC_CONST_HANDLER,
27108 : ZEND_CAST_SPEC_TMP_HANDLER,
27109 : ZEND_CAST_SPEC_TMP_HANDLER,
27110 : ZEND_CAST_SPEC_TMP_HANDLER,
27111 : ZEND_CAST_SPEC_TMP_HANDLER,
27112 : ZEND_CAST_SPEC_TMP_HANDLER,
27113 : ZEND_CAST_SPEC_VAR_HANDLER,
27114 : ZEND_CAST_SPEC_VAR_HANDLER,
27115 : ZEND_CAST_SPEC_VAR_HANDLER,
27116 : ZEND_CAST_SPEC_VAR_HANDLER,
27117 : ZEND_CAST_SPEC_VAR_HANDLER,
27118 : ZEND_NULL_HANDLER,
27119 : ZEND_NULL_HANDLER,
27120 : ZEND_NULL_HANDLER,
27121 : ZEND_NULL_HANDLER,
27122 : ZEND_NULL_HANDLER,
27123 : ZEND_CAST_SPEC_CV_HANDLER,
27124 : ZEND_CAST_SPEC_CV_HANDLER,
27125 : ZEND_CAST_SPEC_CV_HANDLER,
27126 : ZEND_CAST_SPEC_CV_HANDLER,
27127 : ZEND_CAST_SPEC_CV_HANDLER,
27128 : ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
27129 : ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
27130 : ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
27131 : ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
27132 : ZEND_QM_ASSIGN_SPEC_CONST_HANDLER,
27133 : ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
27134 : ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
27135 : ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
27136 : ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
27137 : ZEND_QM_ASSIGN_SPEC_TMP_HANDLER,
27138 : ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
27139 : ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
27140 : ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
27141 : ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
27142 : ZEND_QM_ASSIGN_SPEC_VAR_HANDLER,
27143 : ZEND_NULL_HANDLER,
27144 : ZEND_NULL_HANDLER,
27145 : ZEND_NULL_HANDLER,
27146 : ZEND_NULL_HANDLER,
27147 : ZEND_NULL_HANDLER,
27148 : ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
27149 : ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
27150 : ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
27151 : ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
27152 : ZEND_QM_ASSIGN_SPEC_CV_HANDLER,
27153 : ZEND_NULL_HANDLER,
27154 : ZEND_NULL_HANDLER,
27155 : ZEND_NULL_HANDLER,
27156 : ZEND_NULL_HANDLER,
27157 : ZEND_NULL_HANDLER,
27158 : ZEND_NULL_HANDLER,
27159 : ZEND_NULL_HANDLER,
27160 : ZEND_NULL_HANDLER,
27161 : ZEND_NULL_HANDLER,
27162 : ZEND_NULL_HANDLER,
27163 : ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER,
27164 : ZEND_ASSIGN_ADD_SPEC_VAR_TMP_HANDLER,
27165 : ZEND_ASSIGN_ADD_SPEC_VAR_VAR_HANDLER,
27166 : ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_HANDLER,
27167 : ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER,
27168 : ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_HANDLER,
27169 : ZEND_ASSIGN_ADD_SPEC_UNUSED_TMP_HANDLER,
27170 : ZEND_ASSIGN_ADD_SPEC_UNUSED_VAR_HANDLER,
27171 : ZEND_ASSIGN_ADD_SPEC_UNUSED_UNUSED_HANDLER,
27172 : ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_HANDLER,
27173 : ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER,
27174 : ZEND_ASSIGN_ADD_SPEC_CV_TMP_HANDLER,
27175 : ZEND_ASSIGN_ADD_SPEC_CV_VAR_HANDLER,
27176 : ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_HANDLER,
27177 : ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER,
27178 : ZEND_NULL_HANDLER,
27179 : ZEND_NULL_HANDLER,
27180 : ZEND_NULL_HANDLER,
27181 : ZEND_NULL_HANDLER,
27182 : ZEND_NULL_HANDLER,
27183 : ZEND_NULL_HANDLER,
27184 : ZEND_NULL_HANDLER,
27185 : ZEND_NULL_HANDLER,
27186 : ZEND_NULL_HANDLER,
27187 : ZEND_NULL_HANDLER,
27188 : ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER,
27189 : ZEND_ASSIGN_SUB_SPEC_VAR_TMP_HANDLER,
27190 : ZEND_ASSIGN_SUB_SPEC_VAR_VAR_HANDLER,
27191 : ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_HANDLER,
27192 : ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER,
27193 : ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_HANDLER,
27194 : ZEND_ASSIGN_SUB_SPEC_UNUSED_TMP_HANDLER,
27195 : ZEND_ASSIGN_SUB_SPEC_UNUSED_VAR_HANDLER,
27196 : ZEND_ASSIGN_SUB_SPEC_UNUSED_UNUSED_HANDLER,
27197 : ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_HANDLER,
27198 : ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER,
27199 : ZEND_ASSIGN_SUB_SPEC_CV_TMP_HANDLER,
27200 : ZEND_ASSIGN_SUB_SPEC_CV_VAR_HANDLER,
27201 : ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_HANDLER,
27202 : ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER,
27203 : ZEND_NULL_HANDLER,
27204 : ZEND_NULL_HANDLER,
27205 : ZEND_NULL_HANDLER,
27206 : ZEND_NULL_HANDLER,
27207 : ZEND_NULL_HANDLER,
27208 : ZEND_NULL_HANDLER,
27209 : ZEND_NULL_HANDLER,
27210 : ZEND_NULL_HANDLER,
27211 : ZEND_NULL_HANDLER,
27212 : ZEND_NULL_HANDLER,
27213 : ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER,
27214 : ZEND_ASSIGN_MUL_SPEC_VAR_TMP_HANDLER,
27215 : ZEND_ASSIGN_MUL_SPEC_VAR_VAR_HANDLER,
27216 : ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_HANDLER,
27217 : ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER,
27218 : ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_HANDLER,
27219 : ZEND_ASSIGN_MUL_SPEC_UNUSED_TMP_HANDLER,
27220 : ZEND_ASSIGN_MUL_SPEC_UNUSED_VAR_HANDLER,
27221 : ZEND_ASSIGN_MUL_SPEC_UNUSED_UNUSED_HANDLER,
27222 : ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_HANDLER,
27223 : ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER,
27224 : ZEND_ASSIGN_MUL_SPEC_CV_TMP_HANDLER,
27225 : ZEND_ASSIGN_MUL_SPEC_CV_VAR_HANDLER,
27226 : ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_HANDLER,
27227 : ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER,
27228 : ZEND_NULL_HANDLER,
27229 : ZEND_NULL_HANDLER,
27230 : ZEND_NULL_HANDLER,
27231 : ZEND_NULL_HANDLER,
27232 : ZEND_NULL_HANDLER,
27233 : ZEND_NULL_HANDLER,
27234 : ZEND_NULL_HANDLER,
27235 : ZEND_NULL_HANDLER,
27236 : ZEND_NULL_HANDLER,
27237 : ZEND_NULL_HANDLER,
27238 : ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER,
27239 : ZEND_ASSIGN_DIV_SPEC_VAR_TMP_HANDLER,
27240 : ZEND_ASSIGN_DIV_SPEC_VAR_VAR_HANDLER,
27241 : ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_HANDLER,
27242 : ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER,
27243 : ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_HANDLER,
27244 : ZEND_ASSIGN_DIV_SPEC_UNUSED_TMP_HANDLER,
27245 : ZEND_ASSIGN_DIV_SPEC_UNUSED_VAR_HANDLER,
27246 : ZEND_ASSIGN_DIV_SPEC_UNUSED_UNUSED_HANDLER,
27247 : ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_HANDLER,
27248 : ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER,
27249 : ZEND_ASSIGN_DIV_SPEC_CV_TMP_HANDLER,
27250 : ZEND_ASSIGN_DIV_SPEC_CV_VAR_HANDLER,
27251 : ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_HANDLER,
27252 : ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER,
27253 : ZEND_NULL_HANDLER,
27254 : ZEND_NULL_HANDLER,
27255 : ZEND_NULL_HANDLER,
27256 : ZEND_NULL_HANDLER,
27257 : ZEND_NULL_HANDLER,
27258 : ZEND_NULL_HANDLER,
27259 : ZEND_NULL_HANDLER,
27260 : ZEND_NULL_HANDLER,
27261 : ZEND_NULL_HANDLER,
27262 : ZEND_NULL_HANDLER,
27263 : ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER,
27264 : ZEND_ASSIGN_MOD_SPEC_VAR_TMP_HANDLER,
27265 : ZEND_ASSIGN_MOD_SPEC_VAR_VAR_HANDLER,
27266 : ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_HANDLER,
27267 : ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER,
27268 : ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_HANDLER,
27269 : ZEND_ASSIGN_MOD_SPEC_UNUSED_TMP_HANDLER,
27270 : ZEND_ASSIGN_MOD_SPEC_UNUSED_VAR_HANDLER,
27271 : ZEND_ASSIGN_MOD_SPEC_UNUSED_UNUSED_HANDLER,
27272 : ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_HANDLER,
27273 : ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER,
27274 : ZEND_ASSIGN_MOD_SPEC_CV_TMP_HANDLER,
27275 : ZEND_ASSIGN_MOD_SPEC_CV_VAR_HANDLER,
27276 : ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_HANDLER,
27277 : ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER,
27278 : ZEND_NULL_HANDLER,
27279 : ZEND_NULL_HANDLER,
27280 : ZEND_NULL_HANDLER,
27281 : ZEND_NULL_HANDLER,
27282 : ZEND_NULL_HANDLER,
27283 : ZEND_NULL_HANDLER,
27284 : ZEND_NULL_HANDLER,
27285 : ZEND_NULL_HANDLER,
27286 : ZEND_NULL_HANDLER,
27287 : ZEND_NULL_HANDLER,
27288 : ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER,
27289 : ZEND_ASSIGN_SL_SPEC_VAR_TMP_HANDLER,
27290 : ZEND_ASSIGN_SL_SPEC_VAR_VAR_HANDLER,
27291 : ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_HANDLER,
27292 : ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER,
27293 : ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_HANDLER,
27294 : ZEND_ASSIGN_SL_SPEC_UNUSED_TMP_HANDLER,
27295 : ZEND_ASSIGN_SL_SPEC_UNUSED_VAR_HANDLER,
27296 : ZEND_ASSIGN_SL_SPEC_UNUSED_UNUSED_HANDLER,
27297 : ZEND_ASSIGN_SL_SPEC_UNUSED_CV_HANDLER,
27298 : ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER,
27299 : ZEND_ASSIGN_SL_SPEC_CV_TMP_HANDLER,
27300 : ZEND_ASSIGN_SL_SPEC_CV_VAR_HANDLER,
27301 : ZEND_ASSIGN_SL_SPEC_CV_UNUSED_HANDLER,
27302 : ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER,
27303 : ZEND_NULL_HANDLER,
27304 : ZEND_NULL_HANDLER,
27305 : ZEND_NULL_HANDLER,
27306 : ZEND_NULL_HANDLER,
27307 : ZEND_NULL_HANDLER,
27308 : ZEND_NULL_HANDLER,
27309 : ZEND_NULL_HANDLER,
27310 : ZEND_NULL_HANDLER,
27311 : ZEND_NULL_HANDLER,
27312 : ZEND_NULL_HANDLER,
27313 : ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER,
27314 : ZEND_ASSIGN_SR_SPEC_VAR_TMP_HANDLER,
27315 : ZEND_ASSIGN_SR_SPEC_VAR_VAR_HANDLER,
27316 : ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_HANDLER,
27317 : ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER,
27318 : ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_HANDLER,
27319 : ZEND_ASSIGN_SR_SPEC_UNUSED_TMP_HANDLER,
27320 : ZEND_ASSIGN_SR_SPEC_UNUSED_VAR_HANDLER,
27321 : ZEND_ASSIGN_SR_SPEC_UNUSED_UNUSED_HANDLER,
27322 : ZEND_ASSIGN_SR_SPEC_UNUSED_CV_HANDLER,
27323 : ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER,
27324 : ZEND_ASSIGN_SR_SPEC_CV_TMP_HANDLER,
27325 : ZEND_ASSIGN_SR_SPEC_CV_VAR_HANDLER,
27326 : ZEND_ASSIGN_SR_SPEC_CV_UNUSED_HANDLER,
27327 : ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER,
27328 : ZEND_NULL_HANDLER,
27329 : ZEND_NULL_HANDLER,
27330 : ZEND_NULL_HANDLER,
27331 : ZEND_NULL_HANDLER,
27332 : ZEND_NULL_HANDLER,
27333 : ZEND_NULL_HANDLER,
27334 : ZEND_NULL_HANDLER,
27335 : ZEND_NULL_HANDLER,
27336 : ZEND_NULL_HANDLER,
27337 : ZEND_NULL_HANDLER,
27338 : ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER,
27339 : ZEND_ASSIGN_CONCAT_SPEC_VAR_TMP_HANDLER,
27340 : ZEND_ASSIGN_CONCAT_SPEC_VAR_VAR_HANDLER,
27341 : ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_HANDLER,
27342 : ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER,
27343 : ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_HANDLER,
27344 : ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMP_HANDLER,
27345 : ZEND_ASSIGN_CONCAT_SPEC_UNUSED_VAR_HANDLER,
27346 : ZEND_ASSIGN_CONCAT_SPEC_UNUSED_UNUSED_HANDLER,
27347 : ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_HANDLER,
27348 : ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER,
27349 : ZEND_ASSIGN_CONCAT_SPEC_CV_TMP_HANDLER,
27350 : ZEND_ASSIGN_CONCAT_SPEC_CV_VAR_HANDLER,
27351 : ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_HANDLER,
27352 : ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER,
27353 : ZEND_NULL_HANDLER,
27354 : ZEND_NULL_HANDLER,
27355 : ZEND_NULL_HANDLER,
27356 : ZEND_NULL_HANDLER,
27357 : ZEND_NULL_HANDLER,
27358 : ZEND_NULL_HANDLER,
27359 : ZEND_NULL_HANDLER,
27360 : ZEND_NULL_HANDLER,
27361 : ZEND_NULL_HANDLER,
27362 : ZEND_NULL_HANDLER,
27363 : ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER,
27364 : ZEND_ASSIGN_BW_OR_SPEC_VAR_TMP_HANDLER,
27365 : ZEND_ASSIGN_BW_OR_SPEC_VAR_VAR_HANDLER,
27366 : ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_HANDLER,
27367 : ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER,
27368 : ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_HANDLER,
27369 : ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMP_HANDLER,
27370 : ZEND_ASSIGN_BW_OR_SPEC_UNUSED_VAR_HANDLER,
27371 : ZEND_ASSIGN_BW_OR_SPEC_UNUSED_UNUSED_HANDLER,
27372 : ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_HANDLER,
27373 : ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER,
27374 : ZEND_ASSIGN_BW_OR_SPEC_CV_TMP_HANDLER,
27375 : ZEND_ASSIGN_BW_OR_SPEC_CV_VAR_HANDLER,
27376 : ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_HANDLER,
27377 : ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER,
27378 : ZEND_NULL_HANDLER,
27379 : ZEND_NULL_HANDLER,
27380 : ZEND_NULL_HANDLER,
27381 : ZEND_NULL_HANDLER,
27382 : ZEND_NULL_HANDLER,
27383 : ZEND_NULL_HANDLER,
27384 : ZEND_NULL_HANDLER,
27385 : ZEND_NULL_HANDLER,
27386 : ZEND_NULL_HANDLER,
27387 : ZEND_NULL_HANDLER,
27388 : ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER,
27389 : ZEND_ASSIGN_BW_AND_SPEC_VAR_TMP_HANDLER,
27390 : ZEND_ASSIGN_BW_AND_SPEC_VAR_VAR_HANDLER,
27391 : ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_HANDLER,
27392 : ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER,
27393 : ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_HANDLER,
27394 : ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMP_HANDLER,
27395 : ZEND_ASSIGN_BW_AND_SPEC_UNUSED_VAR_HANDLER,
27396 : ZEND_ASSIGN_BW_AND_SPEC_UNUSED_UNUSED_HANDLER,
27397 : ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_HANDLER,
27398 : ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER,
27399 : ZEND_ASSIGN_BW_AND_SPEC_CV_TMP_HANDLER,
27400 : ZEND_ASSIGN_BW_AND_SPEC_CV_VAR_HANDLER,
27401 : ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_HANDLER,
27402 : ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER,
27403 : ZEND_NULL_HANDLER,
27404 : ZEND_NULL_HANDLER,
27405 : ZEND_NULL_HANDLER,
27406 : ZEND_NULL_HANDLER,
27407 : ZEND_NULL_HANDLER,
27408 : ZEND_NULL_HANDLER,
27409 : ZEND_NULL_HANDLER,
27410 : ZEND_NULL_HANDLER,
27411 : ZEND_NULL_HANDLER,
27412 : ZEND_NULL_HANDLER,
27413 : ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER,
27414 : ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMP_HANDLER,
27415 : ZEND_ASSIGN_BW_XOR_SPEC_VAR_VAR_HANDLER,
27416 : ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_HANDLER,
27417 : ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER,
27418 : ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_HANDLER,
27419 : ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMP_HANDLER,
27420 : ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_VAR_HANDLER,
27421 : ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_UNUSED_HANDLER,
27422 : ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_HANDLER,
27423 : ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER,
27424 : ZEND_ASSIGN_BW_XOR_SPEC_CV_TMP_HANDLER,
27425 : ZEND_ASSIGN_BW_XOR_SPEC_CV_VAR_HANDLER,
27426 : ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_HANDLER,
27427 : ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER,
27428 : ZEND_NULL_HANDLER,
27429 : ZEND_NULL_HANDLER,
27430 : ZEND_NULL_HANDLER,
27431 : ZEND_NULL_HANDLER,
27432 : ZEND_NULL_HANDLER,
27433 : ZEND_NULL_HANDLER,
27434 : ZEND_NULL_HANDLER,
27435 : ZEND_NULL_HANDLER,
27436 : ZEND_NULL_HANDLER,
27437 : ZEND_NULL_HANDLER,
27438 : ZEND_PRE_INC_SPEC_VAR_HANDLER,
27439 : ZEND_PRE_INC_SPEC_VAR_HANDLER,
27440 : ZEND_PRE_INC_SPEC_VAR_HANDLER,
27441 : ZEND_PRE_INC_SPEC_VAR_HANDLER,
27442 : ZEND_PRE_INC_SPEC_VAR_HANDLER,
27443 : ZEND_NULL_HANDLER,
27444 : ZEND_NULL_HANDLER,
27445 : ZEND_NULL_HANDLER,
27446 : ZEND_NULL_HANDLER,
27447 : ZEND_NULL_HANDLER,
27448 : ZEND_PRE_INC_SPEC_CV_HANDLER,
27449 : ZEND_PRE_INC_SPEC_CV_HANDLER,
27450 : ZEND_PRE_INC_SPEC_CV_HANDLER,
27451 : ZEND_PRE_INC_SPEC_CV_HANDLER,
27452 : ZEND_PRE_INC_SPEC_CV_HANDLER,
27453 : ZEND_NULL_HANDLER,
27454 : ZEND_NULL_HANDLER,
27455 : ZEND_NULL_HANDLER,
27456 : ZEND_NULL_HANDLER,
27457 : ZEND_NULL_HANDLER,
27458 : ZEND_NULL_HANDLER,
27459 : ZEND_NULL_HANDLER,
27460 : ZEND_NULL_HANDLER,
27461 : ZEND_NULL_HANDLER,
27462 : ZEND_NULL_HANDLER,
27463 : ZEND_PRE_DEC_SPEC_VAR_HANDLER,
27464 : ZEND_PRE_DEC_SPEC_VAR_HANDLER,
27465 : ZEND_PRE_DEC_SPEC_VAR_HANDLER,
27466 : ZEND_PRE_DEC_SPEC_VAR_HANDLER,
27467 : ZEND_PRE_DEC_SPEC_VAR_HANDLER,
27468 : ZEND_NULL_HANDLER,
27469 : ZEND_NULL_HANDLER,
27470 : ZEND_NULL_HANDLER,
27471 : ZEND_NULL_HANDLER,
27472 : ZEND_NULL_HANDLER,
27473 : ZEND_PRE_DEC_SPEC_CV_HANDLER,
27474 : ZEND_PRE_DEC_SPEC_CV_HANDLER,
27475 : ZEND_PRE_DEC_SPEC_CV_HANDLER,
27476 : ZEND_PRE_DEC_SPEC_CV_HANDLER,
27477 : ZEND_PRE_DEC_SPEC_CV_HANDLER,
27478 : ZEND_NULL_HANDLER,
27479 : ZEND_NULL_HANDLER,
27480 : ZEND_NULL_HANDLER,
27481 : ZEND_NULL_HANDLER,
27482 : ZEND_NULL_HANDLER,
27483 : ZEND_NULL_HANDLER,
27484 : ZEND_NULL_HANDLER,
27485 : ZEND_NULL_HANDLER,
27486 : ZEND_NULL_HANDLER,
27487 : ZEND_NULL_HANDLER,
27488 : ZEND_POST_INC_SPEC_VAR_HANDLER,
27489 : ZEND_POST_INC_SPEC_VAR_HANDLER,
27490 : ZEND_POST_INC_SPEC_VAR_HANDLER,
27491 : ZEND_POST_INC_SPEC_VAR_HANDLER,
27492 : ZEND_POST_INC_SPEC_VAR_HANDLER,
27493 : ZEND_NULL_HANDLER,
27494 : ZEND_NULL_HANDLER,
27495 : ZEND_NULL_HANDLER,
27496 : ZEND_NULL_HANDLER,
27497 : ZEND_NULL_HANDLER,
27498 : ZEND_POST_INC_SPEC_CV_HANDLER,
27499 : ZEND_POST_INC_SPEC_CV_HANDLER,
27500 : ZEND_POST_INC_SPEC_CV_HANDLER,
27501 : ZEND_POST_INC_SPEC_CV_HANDLER,
27502 : ZEND_POST_INC_SPEC_CV_HANDLER,
27503 : ZEND_NULL_HANDLER,
27504 : ZEND_NULL_HANDLER,
27505 : ZEND_NULL_HANDLER,
27506 : ZEND_NULL_HANDLER,
27507 : ZEND_NULL_HANDLER,
27508 : ZEND_NULL_HANDLER,
27509 : ZEND_NULL_HANDLER,
27510 : ZEND_NULL_HANDLER,
27511 : ZEND_NULL_HANDLER,
27512 : ZEND_NULL_HANDLER,
27513 : ZEND_POST_DEC_SPEC_VAR_HANDLER,
27514 : ZEND_POST_DEC_SPEC_VAR_HANDLER,
27515 : ZEND_POST_DEC_SPEC_VAR_HANDLER,
27516 : ZEND_POST_DEC_SPEC_VAR_HANDLER,
27517 : ZEND_POST_DEC_SPEC_VAR_HANDLER,
27518 : ZEND_NULL_HANDLER,
27519 : ZEND_NULL_HANDLER,
27520 : ZEND_NULL_HANDLER,
27521 : ZEND_NULL_HANDLER,
27522 : ZEND_NULL_HANDLER,
27523 : ZEND_POST_DEC_SPEC_CV_HANDLER,
27524 : ZEND_POST_DEC_SPEC_CV_HANDLER,
27525 : ZEND_POST_DEC_SPEC_CV_HANDLER,
27526 : ZEND_POST_DEC_SPEC_CV_HANDLER,
27527 : ZEND_POST_DEC_SPEC_CV_HANDLER,
27528 : ZEND_NULL_HANDLER,
27529 : ZEND_NULL_HANDLER,
27530 : ZEND_NULL_HANDLER,
27531 : ZEND_NULL_HANDLER,
27532 : ZEND_NULL_HANDLER,
27533 : ZEND_NULL_HANDLER,
27534 : ZEND_NULL_HANDLER,
27535 : ZEND_NULL_HANDLER,
27536 : ZEND_NULL_HANDLER,
27537 : ZEND_NULL_HANDLER,
27538 : ZEND_ASSIGN_SPEC_VAR_CONST_HANDLER,
27539 : ZEND_ASSIGN_SPEC_VAR_TMP_HANDLER,
27540 : ZEND_ASSIGN_SPEC_VAR_VAR_HANDLER,
27541 : ZEND_NULL_HANDLER,
27542 : ZEND_ASSIGN_SPEC_VAR_CV_HANDLER,
27543 : ZEND_NULL_HANDLER,
27544 : ZEND_NULL_HANDLER,
27545 : ZEND_NULL_HANDLER,
27546 : ZEND_NULL_HANDLER,
27547 : ZEND_NULL_HANDLER,
27548 : ZEND_ASSIGN_SPEC_CV_CONST_HANDLER,
27549 : ZEND_ASSIGN_SPEC_CV_TMP_HANDLER,
27550 : ZEND_ASSIGN_SPEC_CV_VAR_HANDLER,
27551 : ZEND_NULL_HANDLER,
27552 : ZEND_ASSIGN_SPEC_CV_CV_HANDLER,
27553 : ZEND_NULL_HANDLER,
27554 : ZEND_NULL_HANDLER,
27555 : ZEND_NULL_HANDLER,
27556 : ZEND_NULL_HANDLER,
27557 : ZEND_NULL_HANDLER,
27558 : ZEND_NULL_HANDLER,
27559 : ZEND_NULL_HANDLER,
27560 : ZEND_NULL_HANDLER,
27561 : ZEND_NULL_HANDLER,
27562 : ZEND_NULL_HANDLER,
27563 : ZEND_NULL_HANDLER,
27564 : ZEND_NULL_HANDLER,
27565 : ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER,
27566 : ZEND_NULL_HANDLER,
27567 : ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER,
27568 : ZEND_NULL_HANDLER,
27569 : ZEND_NULL_HANDLER,
27570 : ZEND_NULL_HANDLER,
27571 : ZEND_NULL_HANDLER,
27572 : ZEND_NULL_HANDLER,
27573 : ZEND_NULL_HANDLER,
27574 : ZEND_NULL_HANDLER,
27575 : ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER,
27576 : ZEND_NULL_HANDLER,
27577 : ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER,
27578 : ZEND_ECHO_SPEC_CONST_HANDLER,
27579 : ZEND_ECHO_SPEC_CONST_HANDLER,
27580 : ZEND_ECHO_SPEC_CONST_HANDLER,
27581 : ZEND_ECHO_SPEC_CONST_HANDLER,
27582 : ZEND_ECHO_SPEC_CONST_HANDLER,
27583 : ZEND_ECHO_SPEC_TMP_HANDLER,
27584 : ZEND_ECHO_SPEC_TMP_HANDLER,
27585 : ZEND_ECHO_SPEC_TMP_HANDLER,
27586 : ZEND_ECHO_SPEC_TMP_HANDLER,
27587 : ZEND_ECHO_SPEC_TMP_HANDLER,
27588 : ZEND_ECHO_SPEC_VAR_HANDLER,
27589 : ZEND_ECHO_SPEC_VAR_HANDLER,
27590 : ZEND_ECHO_SPEC_VAR_HANDLER,
27591 : ZEND_ECHO_SPEC_VAR_HANDLER,
27592 : ZEND_ECHO_SPEC_VAR_HANDLER,
27593 : ZEND_NULL_HANDLER,
27594 : ZEND_NULL_HANDLER,
27595 : ZEND_NULL_HANDLER,
27596 : ZEND_NULL_HANDLER,
27597 : ZEND_NULL_HANDLER,
27598 : ZEND_ECHO_SPEC_CV_HANDLER,
27599 : ZEND_ECHO_SPEC_CV_HANDLER,
27600 : ZEND_ECHO_SPEC_CV_HANDLER,
27601 : ZEND_ECHO_SPEC_CV_HANDLER,
27602 : ZEND_ECHO_SPEC_CV_HANDLER,
27603 : ZEND_PRINT_SPEC_CONST_HANDLER,
27604 : ZEND_PRINT_SPEC_CONST_HANDLER,
27605 : ZEND_PRINT_SPEC_CONST_HANDLER,
27606 : ZEND_PRINT_SPEC_CONST_HANDLER,
27607 : ZEND_PRINT_SPEC_CONST_HANDLER,
27608 : ZEND_PRINT_SPEC_TMP_HANDLER,
27609 : ZEND_PRINT_SPEC_TMP_HANDLER,
27610 : ZEND_PRINT_SPEC_TMP_HANDLER,
27611 : ZEND_PRINT_SPEC_TMP_HANDLER,
27612 : ZEND_PRINT_SPEC_TMP_HANDLER,
27613 : ZEND_PRINT_SPEC_VAR_HANDLER,
27614 : ZEND_PRINT_SPEC_VAR_HANDLER,
27615 : ZEND_PRINT_SPEC_VAR_HANDLER,
27616 : ZEND_PRINT_SPEC_VAR_HANDLER,
27617 : ZEND_PRINT_SPEC_VAR_HANDLER,
27618 : ZEND_NULL_HANDLER,
27619 : ZEND_NULL_HANDLER,
27620 : ZEND_NULL_HANDLER,
27621 : ZEND_NULL_HANDLER,
27622 : ZEND_NULL_HANDLER,
27623 : ZEND_PRINT_SPEC_CV_HANDLER,
27624 : ZEND_PRINT_SPEC_CV_HANDLER,
27625 : ZEND_PRINT_SPEC_CV_HANDLER,
27626 : ZEND_PRINT_SPEC_CV_HANDLER,
27627 : ZEND_PRINT_SPEC_CV_HANDLER,
27628 : ZEND_JMP_SPEC_HANDLER,
27629 : ZEND_JMP_SPEC_HANDLER,
27630 : ZEND_JMP_SPEC_HANDLER,
27631 : ZEND_JMP_SPEC_HANDLER,
27632 : ZEND_JMP_SPEC_HANDLER,
27633 : ZEND_JMP_SPEC_HANDLER,
27634 : ZEND_JMP_SPEC_HANDLER,
27635 : ZEND_JMP_SPEC_HANDLER,
27636 : ZEND_JMP_SPEC_HANDLER,
27637 : ZEND_JMP_SPEC_HANDLER,
27638 : ZEND_JMP_SPEC_HANDLER,
27639 : ZEND_JMP_SPEC_HANDLER,
27640 : ZEND_JMP_SPEC_HANDLER,
27641 : ZEND_JMP_SPEC_HANDLER,
27642 : ZEND_JMP_SPEC_HANDLER,
27643 : ZEND_JMP_SPEC_HANDLER,
27644 : ZEND_JMP_SPEC_HANDLER,
27645 : ZEND_JMP_SPEC_HANDLER,
27646 : ZEND_JMP_SPEC_HANDLER,
27647 : ZEND_JMP_SPEC_HANDLER,
27648 : ZEND_JMP_SPEC_HANDLER,
27649 : ZEND_JMP_SPEC_HANDLER,
27650 : ZEND_JMP_SPEC_HANDLER,
27651 : ZEND_JMP_SPEC_HANDLER,
27652 : ZEND_JMP_SPEC_HANDLER,
27653 : ZEND_JMPZ_SPEC_CONST_HANDLER,
27654 : ZEND_JMPZ_SPEC_CONST_HANDLER,
27655 : ZEND_JMPZ_SPEC_CONST_HANDLER,
27656 : ZEND_JMPZ_SPEC_CONST_HANDLER,
27657 : ZEND_JMPZ_SPEC_CONST_HANDLER,
27658 : ZEND_JMPZ_SPEC_TMP_HANDLER,
27659 : ZEND_JMPZ_SPEC_TMP_HANDLER,
27660 : ZEND_JMPZ_SPEC_TMP_HANDLER,
27661 : ZEND_JMPZ_SPEC_TMP_HANDLER,
27662 : ZEND_JMPZ_SPEC_TMP_HANDLER,
27663 : ZEND_JMPZ_SPEC_VAR_HANDLER,
27664 : ZEND_JMPZ_SPEC_VAR_HANDLER,
27665 : ZEND_JMPZ_SPEC_VAR_HANDLER,
27666 : ZEND_JMPZ_SPEC_VAR_HANDLER,
27667 : ZEND_JMPZ_SPEC_VAR_HANDLER,
27668 : ZEND_NULL_HANDLER,
27669 : ZEND_NULL_HANDLER,
27670 : ZEND_NULL_HANDLER,
27671 : ZEND_NULL_HANDLER,
27672 : ZEND_NULL_HANDLER,
27673 : ZEND_JMPZ_SPEC_CV_HANDLER,
27674 : ZEND_JMPZ_SPEC_CV_HANDLER,
27675 : ZEND_JMPZ_SPEC_CV_HANDLER,
27676 : ZEND_JMPZ_SPEC_CV_HANDLER,
27677 : ZEND_JMPZ_SPEC_CV_HANDLER,
27678 : ZEND_JMPNZ_SPEC_CONST_HANDLER,
27679 : ZEND_JMPNZ_SPEC_CONST_HANDLER,
27680 : ZEND_JMPNZ_SPEC_CONST_HANDLER,
27681 : ZEND_JMPNZ_SPEC_CONST_HANDLER,
27682 : ZEND_JMPNZ_SPEC_CONST_HANDLER,
27683 : ZEND_JMPNZ_SPEC_TMP_HANDLER,
27684 : ZEND_JMPNZ_SPEC_TMP_HANDLER,
27685 : ZEND_JMPNZ_SPEC_TMP_HANDLER,
27686 : ZEND_JMPNZ_SPEC_TMP_HANDLER,
27687 : ZEND_JMPNZ_SPEC_TMP_HANDLER,
27688 : ZEND_JMPNZ_SPEC_VAR_HANDLER,
27689 : ZEND_JMPNZ_SPEC_VAR_HANDLER,
27690 : ZEND_JMPNZ_SPEC_VAR_HANDLER,
27691 : ZEND_JMPNZ_SPEC_VAR_HANDLER,
27692 : ZEND_JMPNZ_SPEC_VAR_HANDLER,
27693 : ZEND_NULL_HANDLER,
27694 : ZEND_NULL_HANDLER,
27695 : ZEND_NULL_HANDLER,
27696 : ZEND_NULL_HANDLER,
27697 : ZEND_NULL_HANDLER,
27698 : ZEND_JMPNZ_SPEC_CV_HANDLER,
27699 : ZEND_JMPNZ_SPEC_CV_HANDLER,
27700 : ZEND_JMPNZ_SPEC_CV_HANDLER,
27701 : ZEND_JMPNZ_SPEC_CV_HANDLER,
27702 : ZEND_JMPNZ_SPEC_CV_HANDLER,
27703 : ZEND_JMPZNZ_SPEC_CONST_HANDLER,
27704 : ZEND_JMPZNZ_SPEC_CONST_HANDLER,
27705 : ZEND_JMPZNZ_SPEC_CONST_HANDLER,
27706 : ZEND_JMPZNZ_SPEC_CONST_HANDLER,
27707 : ZEND_JMPZNZ_SPEC_CONST_HANDLER,
27708 : ZEND_JMPZNZ_SPEC_TMP_HANDLER,
27709 : ZEND_JMPZNZ_SPEC_TMP_HANDLER,
27710 : ZEND_JMPZNZ_SPEC_TMP_HANDLER,
27711 : ZEND_JMPZNZ_SPEC_TMP_HANDLER,
27712 : ZEND_JMPZNZ_SPEC_TMP_HANDLER,
27713 : ZEND_JMPZNZ_SPEC_VAR_HANDLER,
27714 : ZEND_JMPZNZ_SPEC_VAR_HANDLER,
27715 : ZEND_JMPZNZ_SPEC_VAR_HANDLER,
27716 : ZEND_JMPZNZ_SPEC_VAR_HANDLER,
27717 : ZEND_JMPZNZ_SPEC_VAR_HANDLER,
27718 : ZEND_NULL_HANDLER,
27719 : ZEND_NULL_HANDLER,
27720 : ZEND_NULL_HANDLER,
27721 : ZEND_NULL_HANDLER,
27722 : ZEND_NULL_HANDLER,
27723 : ZEND_JMPZNZ_SPEC_CV_HANDLER,
27724 : ZEND_JMPZNZ_SPEC_CV_HANDLER,
27725 : ZEND_JMPZNZ_SPEC_CV_HANDLER,
27726 : ZEND_JMPZNZ_SPEC_CV_HANDLER,
27727 : ZEND_JMPZNZ_SPEC_CV_HANDLER,
27728 : ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
27729 : ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
27730 : ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
27731 : ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
27732 : ZEND_JMPZ_EX_SPEC_CONST_HANDLER,
27733 : ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
27734 : ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
27735 : ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
27736 : ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
27737 : ZEND_JMPZ_EX_SPEC_TMP_HANDLER,
27738 : ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
27739 : ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
27740 : ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
27741 : ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
27742 : ZEND_JMPZ_EX_SPEC_VAR_HANDLER,
27743 : ZEND_NULL_HANDLER,
27744 : ZEND_NULL_HANDLER,
27745 : ZEND_NULL_HANDLER,
27746 : ZEND_NULL_HANDLER,
27747 : ZEND_NULL_HANDLER,
27748 : ZEND_JMPZ_EX_SPEC_CV_HANDLER,
27749 : ZEND_JMPZ_EX_SPEC_CV_HANDLER,
27750 : ZEND_JMPZ_EX_SPEC_CV_HANDLER,
27751 : ZEND_JMPZ_EX_SPEC_CV_HANDLER,
27752 : ZEND_JMPZ_EX_SPEC_CV_HANDLER,
27753 : ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
27754 : ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
27755 : ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
27756 : ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
27757 : ZEND_JMPNZ_EX_SPEC_CONST_HANDLER,
27758 : ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
27759 : ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
27760 : ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
27761 : ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
27762 : ZEND_JMPNZ_EX_SPEC_TMP_HANDLER,
27763 : ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
27764 : ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
27765 : ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
27766 : ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
27767 : ZEND_JMPNZ_EX_SPEC_VAR_HANDLER,
27768 : ZEND_NULL_HANDLER,
27769 : ZEND_NULL_HANDLER,
27770 : ZEND_NULL_HANDLER,
27771 : ZEND_NULL_HANDLER,
27772 : ZEND_NULL_HANDLER,
27773 : ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
27774 : ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
27775 : ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
27776 : ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
27777 : ZEND_JMPNZ_EX_SPEC_CV_HANDLER,
27778 : ZEND_CASE_SPEC_CONST_CONST_HANDLER,
27779 : ZEND_CASE_SPEC_CONST_TMP_HANDLER,
27780 : ZEND_CASE_SPEC_CONST_VAR_HANDLER,
27781 : ZEND_NULL_HANDLER,
27782 : ZEND_CASE_SPEC_CONST_CV_HANDLER,
27783 : ZEND_CASE_SPEC_TMP_CONST_HANDLER,
27784 : ZEND_CASE_SPEC_TMP_TMP_HANDLER,
27785 : ZEND_CASE_SPEC_TMP_VAR_HANDLER,
27786 : ZEND_NULL_HANDLER,
27787 : ZEND_CASE_SPEC_TMP_CV_HANDLER,
27788 : ZEND_CASE_SPEC_VAR_CONST_HANDLER,
27789 : ZEND_CASE_SPEC_VAR_TMP_HANDLER,
27790 : ZEND_CASE_SPEC_VAR_VAR_HANDLER,
27791 : ZEND_NULL_HANDLER,
27792 : ZEND_CASE_SPEC_VAR_CV_HANDLER,
27793 : ZEND_NULL_HANDLER,
27794 : ZEND_NULL_HANDLER,
27795 : ZEND_NULL_HANDLER,
27796 : ZEND_NULL_HANDLER,
27797 : ZEND_NULL_HANDLER,
27798 : ZEND_CASE_SPEC_CV_CONST_HANDLER,
27799 : ZEND_CASE_SPEC_CV_TMP_HANDLER,
27800 : ZEND_CASE_SPEC_CV_VAR_HANDLER,
27801 : ZEND_NULL_HANDLER,
27802 : ZEND_CASE_SPEC_CV_CV_HANDLER,
27803 : ZEND_NULL_HANDLER,
27804 : ZEND_NULL_HANDLER,
27805 : ZEND_NULL_HANDLER,
27806 : ZEND_NULL_HANDLER,
27807 : ZEND_NULL_HANDLER,
27808 : ZEND_SWITCH_FREE_SPEC_TMP_HANDLER,
27809 : ZEND_SWITCH_FREE_SPEC_TMP_HANDLER,
27810 : ZEND_SWITCH_FREE_SPEC_TMP_HANDLER,
27811 : ZEND_SWITCH_FREE_SPEC_TMP_HANDLER,
27812 : ZEND_SWITCH_FREE_SPEC_TMP_HANDLER,
27813 : ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
27814 : ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
27815 : ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
27816 : ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
27817 : ZEND_SWITCH_FREE_SPEC_VAR_HANDLER,
27818 : ZEND_NULL_HANDLER,
27819 : ZEND_NULL_HANDLER,
27820 : ZEND_NULL_HANDLER,
27821 : ZEND_NULL_HANDLER,
27822 : ZEND_NULL_HANDLER,
27823 : ZEND_NULL_HANDLER,
27824 : ZEND_NULL_HANDLER,
27825 : ZEND_NULL_HANDLER,
27826 : ZEND_NULL_HANDLER,
27827 : ZEND_NULL_HANDLER,
27828 : ZEND_BRK_SPEC_CONST_HANDLER,
27829 : ZEND_BRK_SPEC_TMP_HANDLER,
27830 : ZEND_BRK_SPEC_VAR_HANDLER,
27831 : ZEND_NULL_HANDLER,
27832 : ZEND_BRK_SPEC_CV_HANDLER,
27833 : ZEND_BRK_SPEC_CONST_HANDLER,
27834 : ZEND_BRK_SPEC_TMP_HANDLER,
27835 : ZEND_BRK_SPEC_VAR_HANDLER,
27836 : ZEND_NULL_HANDLER,
27837 : ZEND_BRK_SPEC_CV_HANDLER,
27838 : ZEND_BRK_SPEC_CONST_HANDLER,
27839 : ZEND_BRK_SPEC_TMP_HANDLER,
27840 : ZEND_BRK_SPEC_VAR_HANDLER,
27841 : ZEND_NULL_HANDLER,
27842 : ZEND_BRK_SPEC_CV_HANDLER,
27843 : ZEND_BRK_SPEC_CONST_HANDLER,
27844 : ZEND_BRK_SPEC_TMP_HANDLER,
27845 : ZEND_BRK_SPEC_VAR_HANDLER,
27846 : ZEND_NULL_HANDLER,
27847 : ZEND_BRK_SPEC_CV_HANDLER,
27848 : ZEND_BRK_SPEC_CONST_HANDLER,
27849 : ZEND_BRK_SPEC_TMP_HANDLER,
27850 : ZEND_BRK_SPEC_VAR_HANDLER,
27851 : ZEND_NULL_HANDLER,
27852 : ZEND_BRK_SPEC_CV_HANDLER,
27853 : ZEND_CONT_SPEC_CONST_HANDLER,
27854 : ZEND_CONT_SPEC_TMP_HANDLER,
27855 : ZEND_CONT_SPEC_VAR_HANDLER,
27856 : ZEND_NULL_HANDLER,
27857 : ZEND_CONT_SPEC_CV_HANDLER,
27858 : ZEND_CONT_SPEC_CONST_HANDLER,
27859 : ZEND_CONT_SPEC_TMP_HANDLER,
27860 : ZEND_CONT_SPEC_VAR_HANDLER,
27861 : ZEND_NULL_HANDLER,
27862 : ZEND_CONT_SPEC_CV_HANDLER,
27863 : ZEND_CONT_SPEC_CONST_HANDLER,
27864 : ZEND_CONT_SPEC_TMP_HANDLER,
27865 : ZEND_CONT_SPEC_VAR_HANDLER,
27866 : ZEND_NULL_HANDLER,
27867 : ZEND_CONT_SPEC_CV_HANDLER,
27868 : ZEND_CONT_SPEC_CONST_HANDLER,
27869 : ZEND_CONT_SPEC_TMP_HANDLER,
27870 : ZEND_CONT_SPEC_VAR_HANDLER,
27871 : ZEND_NULL_HANDLER,
27872 : ZEND_CONT_SPEC_CV_HANDLER,
27873 : ZEND_CONT_SPEC_CONST_HANDLER,
27874 : ZEND_CONT_SPEC_TMP_HANDLER,
27875 : ZEND_CONT_SPEC_VAR_HANDLER,
27876 : ZEND_NULL_HANDLER,
27877 : ZEND_CONT_SPEC_CV_HANDLER,
27878 : ZEND_BOOL_SPEC_CONST_HANDLER,
27879 : ZEND_BOOL_SPEC_CONST_HANDLER,
27880 : ZEND_BOOL_SPEC_CONST_HANDLER,
27881 : ZEND_BOOL_SPEC_CONST_HANDLER,
27882 : ZEND_BOOL_SPEC_CONST_HANDLER,
27883 : ZEND_BOOL_SPEC_TMP_HANDLER,
27884 : ZEND_BOOL_SPEC_TMP_HANDLER,
27885 : ZEND_BOOL_SPEC_TMP_HANDLER,
27886 : ZEND_BOOL_SPEC_TMP_HANDLER,
27887 : ZEND_BOOL_SPEC_TMP_HANDLER,
27888 : ZEND_BOOL_SPEC_VAR_HANDLER,
27889 : ZEND_BOOL_SPEC_VAR_HANDLER,
27890 : ZEND_BOOL_SPEC_VAR_HANDLER,
27891 : ZEND_BOOL_SPEC_VAR_HANDLER,
27892 : ZEND_BOOL_SPEC_VAR_HANDLER,
27893 : ZEND_NULL_HANDLER,
27894 : ZEND_NULL_HANDLER,
27895 : ZEND_NULL_HANDLER,
27896 : ZEND_NULL_HANDLER,
27897 : ZEND_NULL_HANDLER,
27898 : ZEND_BOOL_SPEC_CV_HANDLER,
27899 : ZEND_BOOL_SPEC_CV_HANDLER,
27900 : ZEND_BOOL_SPEC_CV_HANDLER,
27901 : ZEND_BOOL_SPEC_CV_HANDLER,
27902 : ZEND_BOOL_SPEC_CV_HANDLER,
27903 : ZEND_INIT_STRING_SPEC_HANDLER,
27904 : ZEND_INIT_STRING_SPEC_HANDLER,
27905 : ZEND_INIT_STRING_SPEC_HANDLER,
27906 : ZEND_INIT_STRING_SPEC_HANDLER,
27907 : ZEND_INIT_STRING_SPEC_HANDLER,
27908 : ZEND_INIT_STRING_SPEC_HANDLER,
27909 : ZEND_INIT_STRING_SPEC_HANDLER,
27910 : ZEND_INIT_STRING_SPEC_HANDLER,
27911 : ZEND_INIT_STRING_SPEC_HANDLER,
27912 : ZEND_INIT_STRING_SPEC_HANDLER,
27913 : ZEND_INIT_STRING_SPEC_HANDLER,
27914 : ZEND_INIT_STRING_SPEC_HANDLER,
27915 : ZEND_INIT_STRING_SPEC_HANDLER,
27916 : ZEND_INIT_STRING_SPEC_HANDLER,
27917 : ZEND_INIT_STRING_SPEC_HANDLER,
27918 : ZEND_INIT_STRING_SPEC_HANDLER,
27919 : ZEND_INIT_STRING_SPEC_HANDLER,
27920 : ZEND_INIT_STRING_SPEC_HANDLER,
27921 : ZEND_INIT_STRING_SPEC_HANDLER,
27922 : ZEND_INIT_STRING_SPEC_HANDLER,
27923 : ZEND_INIT_STRING_SPEC_HANDLER,
27924 : ZEND_INIT_STRING_SPEC_HANDLER,
27925 : ZEND_INIT_STRING_SPEC_HANDLER,
27926 : ZEND_INIT_STRING_SPEC_HANDLER,
27927 : ZEND_INIT_STRING_SPEC_HANDLER,
27928 : ZEND_NULL_HANDLER,
27929 : ZEND_NULL_HANDLER,
27930 : ZEND_NULL_HANDLER,
27931 : ZEND_NULL_HANDLER,
27932 : ZEND_NULL_HANDLER,
27933 : ZEND_ADD_CHAR_SPEC_TMP_CONST_HANDLER,
27934 : ZEND_NULL_HANDLER,
27935 : ZEND_NULL_HANDLER,
27936 : ZEND_NULL_HANDLER,
27937 : ZEND_NULL_HANDLER,
27938 : ZEND_NULL_HANDLER,
27939 : ZEND_NULL_HANDLER,
27940 : ZEND_NULL_HANDLER,
27941 : ZEND_NULL_HANDLER,
27942 : ZEND_NULL_HANDLER,
27943 : ZEND_NULL_HANDLER,
27944 : ZEND_NULL_HANDLER,
27945 : ZEND_NULL_HANDLER,
27946 : ZEND_NULL_HANDLER,
27947 : ZEND_NULL_HANDLER,
27948 : ZEND_NULL_HANDLER,
27949 : ZEND_NULL_HANDLER,
27950 : ZEND_NULL_HANDLER,
27951 : ZEND_NULL_HANDLER,
27952 : ZEND_NULL_HANDLER,
27953 : ZEND_NULL_HANDLER,
27954 : ZEND_NULL_HANDLER,
27955 : ZEND_NULL_HANDLER,
27956 : ZEND_NULL_HANDLER,
27957 : ZEND_NULL_HANDLER,
27958 : ZEND_ADD_STRING_SPEC_TMP_CONST_HANDLER,
27959 : ZEND_NULL_HANDLER,
27960 : ZEND_NULL_HANDLER,
27961 : ZEND_NULL_HANDLER,
27962 : ZEND_NULL_HANDLER,
27963 : ZEND_NULL_HANDLER,
27964 : ZEND_NULL_HANDLER,
27965 : ZEND_NULL_HANDLER,
27966 : ZEND_NULL_HANDLER,
27967 : ZEND_NULL_HANDLER,
27968 : ZEND_NULL_HANDLER,
27969 : ZEND_NULL_HANDLER,
27970 : ZEND_NULL_HANDLER,
27971 : ZEND_NULL_HANDLER,
27972 : ZEND_NULL_HANDLER,
27973 : ZEND_NULL_HANDLER,
27974 : ZEND_NULL_HANDLER,
27975 : ZEND_NULL_HANDLER,
27976 : ZEND_NULL_HANDLER,
27977 : ZEND_NULL_HANDLER,
27978 : ZEND_NULL_HANDLER,
27979 : ZEND_NULL_HANDLER,
27980 : ZEND_NULL_HANDLER,
27981 : ZEND_NULL_HANDLER,
27982 : ZEND_NULL_HANDLER,
27983 : ZEND_NULL_HANDLER,
27984 : ZEND_ADD_VAR_SPEC_TMP_TMP_HANDLER,
27985 : ZEND_ADD_VAR_SPEC_TMP_VAR_HANDLER,
27986 : ZEND_NULL_HANDLER,
27987 : ZEND_ADD_VAR_SPEC_TMP_CV_HANDLER,
27988 : ZEND_NULL_HANDLER,
27989 : ZEND_NULL_HANDLER,
27990 : ZEND_NULL_HANDLER,
27991 : ZEND_NULL_HANDLER,
27992 : ZEND_NULL_HANDLER,
27993 : ZEND_NULL_HANDLER,
27994 : ZEND_NULL_HANDLER,
27995 : ZEND_NULL_HANDLER,
27996 : ZEND_NULL_HANDLER,
27997 : ZEND_NULL_HANDLER,
27998 : ZEND_NULL_HANDLER,
27999 : ZEND_NULL_HANDLER,
28000 : ZEND_NULL_HANDLER,
28001 : ZEND_NULL_HANDLER,
28002 : ZEND_NULL_HANDLER,
28003 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28004 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28005 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28006 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28007 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28008 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28009 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28010 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28011 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28012 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28013 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28014 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28015 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28016 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28017 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28018 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28019 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28020 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28021 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28022 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28023 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28024 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28025 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28026 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28027 : ZEND_BEGIN_SILENCE_SPEC_HANDLER,
28028 : ZEND_NULL_HANDLER,
28029 : ZEND_NULL_HANDLER,
28030 : ZEND_NULL_HANDLER,
28031 : ZEND_NULL_HANDLER,
28032 : ZEND_NULL_HANDLER,
28033 : ZEND_END_SILENCE_SPEC_TMP_HANDLER,
28034 : ZEND_END_SILENCE_SPEC_TMP_HANDLER,
28035 : ZEND_END_SILENCE_SPEC_TMP_HANDLER,
28036 : ZEND_END_SILENCE_SPEC_TMP_HANDLER,
28037 : ZEND_END_SILENCE_SPEC_TMP_HANDLER,
28038 : ZEND_NULL_HANDLER,
28039 : ZEND_NULL_HANDLER,
28040 : ZEND_NULL_HANDLER,
28041 : ZEND_NULL_HANDLER,
28042 : ZEND_NULL_HANDLER,
28043 : ZEND_NULL_HANDLER,
28044 : ZEND_NULL_HANDLER,
28045 : ZEND_NULL_HANDLER,
28046 : ZEND_NULL_HANDLER,
28047 : ZEND_NULL_HANDLER,
28048 : ZEND_NULL_HANDLER,
28049 : ZEND_NULL_HANDLER,
28050 : ZEND_NULL_HANDLER,
28051 : ZEND_NULL_HANDLER,
28052 : ZEND_NULL_HANDLER,
28053 : ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
28054 : ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
28055 : ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
28056 : ZEND_NULL_HANDLER,
28057 : ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
28058 : ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
28059 : ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
28060 : ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
28061 : ZEND_NULL_HANDLER,
28062 : ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
28063 : ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
28064 : ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
28065 : ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
28066 : ZEND_NULL_HANDLER,
28067 : ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
28068 : ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
28069 : ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
28070 : ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
28071 : ZEND_NULL_HANDLER,
28072 : ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
28073 : ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER,
28074 : ZEND_INIT_FCALL_BY_NAME_SPEC_TMP_HANDLER,
28075 : ZEND_INIT_FCALL_BY_NAME_SPEC_VAR_HANDLER,
28076 : ZEND_NULL_HANDLER,
28077 : ZEND_INIT_FCALL_BY_NAME_SPEC_CV_HANDLER,
28078 : ZEND_DO_FCALL_SPEC_CONST_HANDLER,
28079 : ZEND_DO_FCALL_SPEC_CONST_HANDLER,
28080 : ZEND_DO_FCALL_SPEC_CONST_HANDLER,
28081 : ZEND_DO_FCALL_SPEC_CONST_HANDLER,
28082 : ZEND_DO_FCALL_SPEC_CONST_HANDLER,
28083 : ZEND_NULL_HANDLER,
28084 : ZEND_NULL_HANDLER,
28085 : ZEND_NULL_HANDLER,
28086 : ZEND_NULL_HANDLER,
28087 : ZEND_NULL_HANDLER,
28088 : ZEND_NULL_HANDLER,
28089 : ZEND_NULL_HANDLER,
28090 : ZEND_NULL_HANDLER,
28091 : ZEND_NULL_HANDLER,
28092 : ZEND_NULL_HANDLER,
28093 : ZEND_NULL_HANDLER,
28094 : ZEND_NULL_HANDLER,
28095 : ZEND_NULL_HANDLER,
28096 : ZEND_NULL_HANDLER,
28097 : ZEND_NULL_HANDLER,
28098 : ZEND_NULL_HANDLER,
28099 : ZEND_NULL_HANDLER,
28100 : ZEND_NULL_HANDLER,
28101 : ZEND_NULL_HANDLER,
28102 : ZEND_NULL_HANDLER,
28103 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28104 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28105 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28106 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28107 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28108 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28109 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28110 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28111 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28112 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28113 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28114 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28115 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28116 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28117 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28118 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28119 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28120 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28121 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28122 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28123 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28124 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28125 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28126 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28127 : ZEND_DO_FCALL_BY_NAME_SPEC_HANDLER,
28128 : ZEND_RETURN_SPEC_CONST_HANDLER,
28129 : ZEND_RETURN_SPEC_CONST_HANDLER,
28130 : ZEND_RETURN_SPEC_CONST_HANDLER,
28131 : ZEND_RETURN_SPEC_CONST_HANDLER,
28132 : ZEND_RETURN_SPEC_CONST_HANDLER,
28133 : ZEND_RETURN_SPEC_TMP_HANDLER,
28134 : ZEND_RETURN_SPEC_TMP_HANDLER,
28135 : ZEND_RETURN_SPEC_TMP_HANDLER,
28136 : ZEND_RETURN_SPEC_TMP_HANDLER,
28137 : ZEND_RETURN_SPEC_TMP_HANDLER,
28138 : ZEND_RETURN_SPEC_VAR_HANDLER,
28139 : ZEND_RETURN_SPEC_VAR_HANDLER,
28140 : ZEND_RETURN_SPEC_VAR_HANDLER,
28141 : ZEND_RETURN_SPEC_VAR_HANDLER,
28142 : ZEND_RETURN_SPEC_VAR_HANDLER,
28143 : ZEND_NULL_HANDLER,
28144 : ZEND_NULL_HANDLER,
28145 : ZEND_NULL_HANDLER,
28146 : ZEND_NULL_HANDLER,
28147 : ZEND_NULL_HANDLER,
28148 : ZEND_RETURN_SPEC_CV_HANDLER,
28149 : ZEND_RETURN_SPEC_CV_HANDLER,
28150 : ZEND_RETURN_SPEC_CV_HANDLER,
28151 : ZEND_RETURN_SPEC_CV_HANDLER,
28152 : ZEND_RETURN_SPEC_CV_HANDLER,
28153 : ZEND_RECV_SPEC_HANDLER,
28154 : ZEND_RECV_SPEC_HANDLER,
28155 : ZEND_RECV_SPEC_HANDLER,
28156 : ZEND_RECV_SPEC_HANDLER,
28157 : ZEND_RECV_SPEC_HANDLER,
28158 : ZEND_RECV_SPEC_HANDLER,
28159 : ZEND_RECV_SPEC_HANDLER,
28160 : ZEND_RECV_SPEC_HANDLER,
28161 : ZEND_RECV_SPEC_HANDLER,
28162 : ZEND_RECV_SPEC_HANDLER,
28163 : ZEND_RECV_SPEC_HANDLER,
28164 : ZEND_RECV_SPEC_HANDLER,
28165 : ZEND_RECV_SPEC_HANDLER,
28166 : ZEND_RECV_SPEC_HANDLER,
28167 : ZEND_RECV_SPEC_HANDLER,
28168 : ZEND_RECV_SPEC_HANDLER,
28169 : ZEND_RECV_SPEC_HANDLER,
28170 : ZEND_RECV_SPEC_HANDLER,
28171 : ZEND_RECV_SPEC_HANDLER,
28172 : ZEND_RECV_SPEC_HANDLER,
28173 : ZEND_RECV_SPEC_HANDLER,
28174 : ZEND_RECV_SPEC_HANDLER,
28175 : ZEND_RECV_SPEC_HANDLER,
28176 : ZEND_RECV_SPEC_HANDLER,
28177 : ZEND_RECV_SPEC_HANDLER,
28178 : ZEND_RECV_INIT_SPEC_CONST_HANDLER,
28179 : ZEND_NULL_HANDLER,
28180 : ZEND_NULL_HANDLER,
28181 : ZEND_NULL_HANDLER,
28182 : ZEND_NULL_HANDLER,
28183 : ZEND_RECV_INIT_SPEC_CONST_HANDLER,
28184 : ZEND_NULL_HANDLER,
28185 : ZEND_NULL_HANDLER,
28186 : ZEND_NULL_HANDLER,
28187 : ZEND_NULL_HANDLER,
28188 : ZEND_RECV_INIT_SPEC_CONST_HANDLER,
28189 : ZEND_NULL_HANDLER,
28190 : ZEND_NULL_HANDLER,
28191 : ZEND_NULL_HANDLER,
28192 : ZEND_NULL_HANDLER,
28193 : ZEND_RECV_INIT_SPEC_CONST_HANDLER,
28194 : ZEND_NULL_HANDLER,
28195 : ZEND_NULL_HANDLER,
28196 : ZEND_NULL_HANDLER,
28197 : ZEND_NULL_HANDLER,
28198 : ZEND_RECV_INIT_SPEC_CONST_HANDLER,
28199 : ZEND_NULL_HANDLER,
28200 : ZEND_NULL_HANDLER,
28201 : ZEND_NULL_HANDLER,
28202 : ZEND_NULL_HANDLER,
28203 : ZEND_SEND_VAL_SPEC_CONST_HANDLER,
28204 : ZEND_SEND_VAL_SPEC_CONST_HANDLER,
28205 : ZEND_SEND_VAL_SPEC_CONST_HANDLER,
28206 : ZEND_SEND_VAL_SPEC_CONST_HANDLER,
28207 : ZEND_SEND_VAL_SPEC_CONST_HANDLER,
28208 : ZEND_SEND_VAL_SPEC_TMP_HANDLER,
28209 : ZEND_SEND_VAL_SPEC_TMP_HANDLER,
28210 : ZEND_SEND_VAL_SPEC_TMP_HANDLER,
28211 : ZEND_SEND_VAL_SPEC_TMP_HANDLER,
28212 : ZEND_SEND_VAL_SPEC_TMP_HANDLER,
28213 : ZEND_SEND_VAL_SPEC_VAR_HANDLER,
28214 : ZEND_SEND_VAL_SPEC_VAR_HANDLER,
28215 : ZEND_SEND_VAL_SPEC_VAR_HANDLER,
28216 : ZEND_SEND_VAL_SPEC_VAR_HANDLER,
28217 : ZEND_SEND_VAL_SPEC_VAR_HANDLER,
28218 : ZEND_NULL_HANDLER,
28219 : ZEND_NULL_HANDLER,
28220 : ZEND_NULL_HANDLER,
28221 : ZEND_NULL_HANDLER,
28222 : ZEND_NULL_HANDLER,
28223 : ZEND_SEND_VAL_SPEC_CV_HANDLER,
28224 : ZEND_SEND_VAL_SPEC_CV_HANDLER,
28225 : ZEND_SEND_VAL_SPEC_CV_HANDLER,
28226 : ZEND_SEND_VAL_SPEC_CV_HANDLER,
28227 : ZEND_SEND_VAL_SPEC_CV_HANDLER,
28228 : ZEND_NULL_HANDLER,
28229 : ZEND_NULL_HANDLER,
28230 : ZEND_NULL_HANDLER,
28231 : ZEND_NULL_HANDLER,
28232 : ZEND_NULL_HANDLER,
28233 : ZEND_NULL_HANDLER,
28234 : ZEND_NULL_HANDLER,
28235 : ZEND_NULL_HANDLER,
28236 : ZEND_NULL_HANDLER,
28237 : ZEND_NULL_HANDLER,
28238 : ZEND_SEND_VAR_SPEC_VAR_HANDLER,
28239 : ZEND_SEND_VAR_SPEC_VAR_HANDLER,
28240 : ZEND_SEND_VAR_SPEC_VAR_HANDLER,
28241 : ZEND_SEND_VAR_SPEC_VAR_HANDLER,
28242 : ZEND_SEND_VAR_SPEC_VAR_HANDLER,
28243 : ZEND_NULL_HANDLER,
28244 : ZEND_NULL_HANDLER,
28245 : ZEND_NULL_HANDLER,
28246 : ZEND_NULL_HANDLER,
28247 : ZEND_NULL_HANDLER,
28248 : ZEND_SEND_VAR_SPEC_CV_HANDLER,
28249 : ZEND_SEND_VAR_SPEC_CV_HANDLER,
28250 : ZEND_SEND_VAR_SPEC_CV_HANDLER,
28251 : ZEND_SEND_VAR_SPEC_CV_HANDLER,
28252 : ZEND_SEND_VAR_SPEC_CV_HANDLER,
28253 : ZEND_NULL_HANDLER,
28254 : ZEND_NULL_HANDLER,
28255 : ZEND_NULL_HANDLER,
28256 : ZEND_NULL_HANDLER,
28257 : ZEND_NULL_HANDLER,
28258 : ZEND_NULL_HANDLER,
28259 : ZEND_NULL_HANDLER,
28260 : ZEND_NULL_HANDLER,
28261 : ZEND_NULL_HANDLER,
28262 : ZEND_NULL_HANDLER,
28263 : ZEND_SEND_REF_SPEC_VAR_HANDLER,
28264 : ZEND_SEND_REF_SPEC_VAR_HANDLER,
28265 : ZEND_SEND_REF_SPEC_VAR_HANDLER,
28266 : ZEND_SEND_REF_SPEC_VAR_HANDLER,
28267 : ZEND_SEND_REF_SPEC_VAR_HANDLER,
28268 : ZEND_NULL_HANDLER,
28269 : ZEND_NULL_HANDLER,
28270 : ZEND_NULL_HANDLER,
28271 : ZEND_NULL_HANDLER,
28272 : ZEND_NULL_HANDLER,
28273 : ZEND_SEND_REF_SPEC_CV_HANDLER,
28274 : ZEND_SEND_REF_SPEC_CV_HANDLER,
28275 : ZEND_SEND_REF_SPEC_CV_HANDLER,
28276 : ZEND_SEND_REF_SPEC_CV_HANDLER,
28277 : ZEND_SEND_REF_SPEC_CV_HANDLER,
28278 : ZEND_NEW_SPEC_HANDLER,
28279 : ZEND_NEW_SPEC_HANDLER,
28280 : ZEND_NEW_SPEC_HANDLER,
28281 : ZEND_NEW_SPEC_HANDLER,
28282 : ZEND_NEW_SPEC_HANDLER,
28283 : ZEND_NEW_SPEC_HANDLER,
28284 : ZEND_NEW_SPEC_HANDLER,
28285 : ZEND_NEW_SPEC_HANDLER,
28286 : ZEND_NEW_SPEC_HANDLER,
28287 : ZEND_NEW_SPEC_HANDLER,
28288 : ZEND_NEW_SPEC_HANDLER,
28289 : ZEND_NEW_SPEC_HANDLER,
28290 : ZEND_NEW_SPEC_HANDLER,
28291 : ZEND_NEW_SPEC_HANDLER,
28292 : ZEND_NEW_SPEC_HANDLER,
28293 : ZEND_NEW_SPEC_HANDLER,
28294 : ZEND_NEW_SPEC_HANDLER,
28295 : ZEND_NEW_SPEC_HANDLER,
28296 : ZEND_NEW_SPEC_HANDLER,
28297 : ZEND_NEW_SPEC_HANDLER,
28298 : ZEND_NEW_SPEC_HANDLER,
28299 : ZEND_NEW_SPEC_HANDLER,
28300 : ZEND_NEW_SPEC_HANDLER,
28301 : ZEND_NEW_SPEC_HANDLER,
28302 : ZEND_NEW_SPEC_HANDLER,
28303 : ZEND_NULL_HANDLER,
28304 : ZEND_NULL_HANDLER,
28305 : ZEND_NULL_HANDLER,
28306 : ZEND_NULL_HANDLER,
28307 : ZEND_NULL_HANDLER,
28308 : ZEND_NULL_HANDLER,
28309 : ZEND_NULL_HANDLER,
28310 : ZEND_NULL_HANDLER,
28311 : ZEND_NULL_HANDLER,
28312 : ZEND_NULL_HANDLER,
28313 : ZEND_NULL_HANDLER,
28314 : ZEND_NULL_HANDLER,
28315 : ZEND_NULL_HANDLER,
28316 : ZEND_NULL_HANDLER,
28317 : ZEND_NULL_HANDLER,
28318 : ZEND_NULL_HANDLER,
28319 : ZEND_NULL_HANDLER,
28320 : ZEND_NULL_HANDLER,
28321 : ZEND_NULL_HANDLER,
28322 : ZEND_NULL_HANDLER,
28323 : ZEND_NULL_HANDLER,
28324 : ZEND_NULL_HANDLER,
28325 : ZEND_NULL_HANDLER,
28326 : ZEND_NULL_HANDLER,
28327 : ZEND_NULL_HANDLER,
28328 : ZEND_NULL_HANDLER,
28329 : ZEND_NULL_HANDLER,
28330 : ZEND_NULL_HANDLER,
28331 : ZEND_NULL_HANDLER,
28332 : ZEND_NULL_HANDLER,
28333 : ZEND_FREE_SPEC_TMP_HANDLER,
28334 : ZEND_FREE_SPEC_TMP_HANDLER,
28335 : ZEND_FREE_SPEC_TMP_HANDLER,
28336 : ZEND_FREE_SPEC_TMP_HANDLER,
28337 : ZEND_FREE_SPEC_TMP_HANDLER,
28338 : ZEND_NULL_HANDLER,
28339 : ZEND_NULL_HANDLER,
28340 : ZEND_NULL_HANDLER,
28341 : ZEND_NULL_HANDLER,
28342 : ZEND_NULL_HANDLER,
28343 : ZEND_NULL_HANDLER,
28344 : ZEND_NULL_HANDLER,
28345 : ZEND_NULL_HANDLER,
28346 : ZEND_NULL_HANDLER,
28347 : ZEND_NULL_HANDLER,
28348 : ZEND_NULL_HANDLER,
28349 : ZEND_NULL_HANDLER,
28350 : ZEND_NULL_HANDLER,
28351 : ZEND_NULL_HANDLER,
28352 : ZEND_NULL_HANDLER,
28353 : ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER,
28354 : ZEND_INIT_ARRAY_SPEC_CONST_TMP_HANDLER,
28355 : ZEND_INIT_ARRAY_SPEC_CONST_VAR_HANDLER,
28356 : ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER,
28357 : ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER,
28358 : ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER,
28359 : ZEND_INIT_ARRAY_SPEC_TMP_TMP_HANDLER,
28360 : ZEND_INIT_ARRAY_SPEC_TMP_VAR_HANDLER,
28361 : ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER,
28362 : ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER,
28363 : ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER,
28364 : ZEND_INIT_ARRAY_SPEC_VAR_TMP_HANDLER,
28365 : ZEND_INIT_ARRAY_SPEC_VAR_VAR_HANDLER,
28366 : ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER,
28367 : ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER,
28368 : ZEND_INIT_ARRAY_SPEC_UNUSED_CONST_HANDLER,
28369 : ZEND_INIT_ARRAY_SPEC_UNUSED_TMP_HANDLER,
28370 : ZEND_INIT_ARRAY_SPEC_UNUSED_VAR_HANDLER,
28371 : ZEND_INIT_ARRAY_SPEC_UNUSED_UNUSED_HANDLER,
28372 : ZEND_INIT_ARRAY_SPEC_UNUSED_CV_HANDLER,
28373 : ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER,
28374 : ZEND_INIT_ARRAY_SPEC_CV_TMP_HANDLER,
28375 : ZEND_INIT_ARRAY_SPEC_CV_VAR_HANDLER,
28376 : ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER,
28377 : ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER,
28378 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER,
28379 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMP_HANDLER,
28380 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_VAR_HANDLER,
28381 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER,
28382 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER,
28383 : ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER,
28384 : ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMP_HANDLER,
28385 : ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_VAR_HANDLER,
28386 : ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER,
28387 : ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER,
28388 : ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER,
28389 : ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMP_HANDLER,
28390 : ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_VAR_HANDLER,
28391 : ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER,
28392 : ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER,
28393 : ZEND_NULL_HANDLER,
28394 : ZEND_NULL_HANDLER,
28395 : ZEND_NULL_HANDLER,
28396 : ZEND_NULL_HANDLER,
28397 : ZEND_NULL_HANDLER,
28398 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER,
28399 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMP_HANDLER,
28400 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_VAR_HANDLER,
28401 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER,
28402 : ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER,
28403 : ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
28404 : ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
28405 : ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
28406 : ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
28407 : ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER,
28408 : ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
28409 : ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
28410 : ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
28411 : ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
28412 : ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER,
28413 : ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
28414 : ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
28415 : ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
28416 : ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
28417 : ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER,
28418 : ZEND_NULL_HANDLER,
28419 : ZEND_NULL_HANDLER,
28420 : ZEND_NULL_HANDLER,
28421 : ZEND_NULL_HANDLER,
28422 : ZEND_NULL_HANDLER,
28423 : ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
28424 : ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
28425 : ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
28426 : ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
28427 : ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER,
28428 : ZEND_UNSET_VAR_SPEC_CONST_HANDLER,
28429 : ZEND_UNSET_VAR_SPEC_CONST_HANDLER,
28430 : ZEND_UNSET_VAR_SPEC_CONST_HANDLER,
28431 : ZEND_UNSET_VAR_SPEC_CONST_HANDLER,
28432 : ZEND_UNSET_VAR_SPEC_CONST_HANDLER,
28433 : ZEND_UNSET_VAR_SPEC_TMP_HANDLER,
28434 : ZEND_UNSET_VAR_SPEC_TMP_HANDLER,
28435 : ZEND_UNSET_VAR_SPEC_TMP_HANDLER,
28436 : ZEND_UNSET_VAR_SPEC_TMP_HANDLER,
28437 : ZEND_UNSET_VAR_SPEC_TMP_HANDLER,
28438 : ZEND_UNSET_VAR_SPEC_VAR_HANDLER,
28439 : ZEND_UNSET_VAR_SPEC_VAR_HANDLER,
28440 : ZEND_UNSET_VAR_SPEC_VAR_HANDLER,
28441 : ZEND_UNSET_VAR_SPEC_VAR_HANDLER,
28442 : ZEND_UNSET_VAR_SPEC_VAR_HANDLER,
28443 : ZEND_NULL_HANDLER,
28444 : ZEND_NULL_HANDLER,
28445 : ZEND_NULL_HANDLER,
28446 : ZEND_NULL_HANDLER,
28447 : ZEND_NULL_HANDLER,
28448 : ZEND_UNSET_VAR_SPEC_CV_HANDLER,
28449 : ZEND_UNSET_VAR_SPEC_CV_HANDLER,
28450 : ZEND_UNSET_VAR_SPEC_CV_HANDLER,
28451 : ZEND_UNSET_VAR_SPEC_CV_HANDLER,
28452 : ZEND_UNSET_VAR_SPEC_CV_HANDLER,
28453 : ZEND_NULL_HANDLER,
28454 : ZEND_NULL_HANDLER,
28455 : ZEND_NULL_HANDLER,
28456 : ZEND_NULL_HANDLER,
28457 : ZEND_NULL_HANDLER,
28458 : ZEND_NULL_HANDLER,
28459 : ZEND_NULL_HANDLER,
28460 : ZEND_NULL_HANDLER,
28461 : ZEND_NULL_HANDLER,
28462 : ZEND_NULL_HANDLER,
28463 : ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER,
28464 : ZEND_UNSET_DIM_SPEC_VAR_TMP_HANDLER,
28465 : ZEND_UNSET_DIM_SPEC_VAR_VAR_HANDLER,
28466 : ZEND_NULL_HANDLER,
28467 : ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER,
28468 : ZEND_UNSET_DIM_SPEC_UNUSED_CONST_HANDLER,
28469 : ZEND_UNSET_DIM_SPEC_UNUSED_TMP_HANDLER,
28470 : ZEND_UNSET_DIM_SPEC_UNUSED_VAR_HANDLER,
28471 : ZEND_NULL_HANDLER,
28472 : ZEND_UNSET_DIM_SPEC_UNUSED_CV_HANDLER,
28473 : ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER,
28474 : ZEND_UNSET_DIM_SPEC_CV_TMP_HANDLER,
28475 : ZEND_UNSET_DIM_SPEC_CV_VAR_HANDLER,
28476 : ZEND_NULL_HANDLER,
28477 : ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER,
28478 : ZEND_NULL_HANDLER,
28479 : ZEND_NULL_HANDLER,
28480 : ZEND_NULL_HANDLER,
28481 : ZEND_NULL_HANDLER,
28482 : ZEND_NULL_HANDLER,
28483 : ZEND_NULL_HANDLER,
28484 : ZEND_NULL_HANDLER,
28485 : ZEND_NULL_HANDLER,
28486 : ZEND_NULL_HANDLER,
28487 : ZEND_NULL_HANDLER,
28488 : ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER,
28489 : ZEND_UNSET_OBJ_SPEC_VAR_TMP_HANDLER,
28490 : ZEND_UNSET_OBJ_SPEC_VAR_VAR_HANDLER,
28491 : ZEND_NULL_HANDLER,
28492 : ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER,
28493 : ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER,
28494 : ZEND_UNSET_OBJ_SPEC_UNUSED_TMP_HANDLER,
28495 : ZEND_UNSET_OBJ_SPEC_UNUSED_VAR_HANDLER,
28496 : ZEND_NULL_HANDLER,
28497 : ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER,
28498 : ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER,
28499 : ZEND_UNSET_OBJ_SPEC_CV_TMP_HANDLER,
28500 : ZEND_UNSET_OBJ_SPEC_CV_VAR_HANDLER,
28501 : ZEND_NULL_HANDLER,
28502 : ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER,
28503 : ZEND_FE_RESET_SPEC_CONST_HANDLER,
28504 : ZEND_FE_RESET_SPEC_CONST_HANDLER,
28505 : ZEND_FE_RESET_SPEC_CONST_HANDLER,
28506 : ZEND_FE_RESET_SPEC_CONST_HANDLER,
28507 : ZEND_FE_RESET_SPEC_CONST_HANDLER,
28508 : ZEND_FE_RESET_SPEC_TMP_HANDLER,
28509 : ZEND_FE_RESET_SPEC_TMP_HANDLER,
28510 : ZEND_FE_RESET_SPEC_TMP_HANDLER,
28511 : ZEND_FE_RESET_SPEC_TMP_HANDLER,
28512 : ZEND_FE_RESET_SPEC_TMP_HANDLER,
28513 : ZEND_FE_RESET_SPEC_VAR_HANDLER,
28514 : ZEND_FE_RESET_SPEC_VAR_HANDLER,
28515 : ZEND_FE_RESET_SPEC_VAR_HANDLER,
28516 : ZEND_FE_RESET_SPEC_VAR_HANDLER,
28517 : ZEND_FE_RESET_SPEC_VAR_HANDLER,
28518 : ZEND_NULL_HANDLER,
28519 : ZEND_NULL_HANDLER,
28520 : ZEND_NULL_HANDLER,
28521 : ZEND_NULL_HANDLER,
28522 : ZEND_NULL_HANDLER,
28523 : ZEND_FE_RESET_SPEC_CV_HANDLER,
28524 : ZEND_FE_RESET_SPEC_CV_HANDLER,
28525 : ZEND_FE_RESET_SPEC_CV_HANDLER,
28526 : ZEND_FE_RESET_SPEC_CV_HANDLER,
28527 : ZEND_FE_RESET_SPEC_CV_HANDLER,
28528 : ZEND_NULL_HANDLER,
28529 : ZEND_NULL_HANDLER,
28530 : ZEND_NULL_HANDLER,
28531 : ZEND_NULL_HANDLER,
28532 : ZEND_NULL_HANDLER,
28533 : ZEND_NULL_HANDLER,
28534 : ZEND_NULL_HANDLER,
28535 : ZEND_NULL_HANDLER,
28536 : ZEND_NULL_HANDLER,
28537 : ZEND_NULL_HANDLER,
28538 : ZEND_FE_FETCH_SPEC_VAR_HANDLER,
28539 : ZEND_FE_FETCH_SPEC_VAR_HANDLER,
28540 : ZEND_FE_FETCH_SPEC_VAR_HANDLER,
28541 : ZEND_FE_FETCH_SPEC_VAR_HANDLER,
28542 : ZEND_FE_FETCH_SPEC_VAR_HANDLER,
28543 : ZEND_NULL_HANDLER,
28544 : ZEND_NULL_HANDLER,
28545 : ZEND_NULL_HANDLER,
28546 : ZEND_NULL_HANDLER,
28547 : ZEND_NULL_HANDLER,
28548 : ZEND_NULL_HANDLER,
28549 : ZEND_NULL_HANDLER,
28550 : ZEND_NULL_HANDLER,
28551 : ZEND_NULL_HANDLER,
28552 : ZEND_NULL_HANDLER,
28553 : ZEND_EXIT_SPEC_CONST_HANDLER,
28554 : ZEND_EXIT_SPEC_CONST_HANDLER,
28555 : ZEND_EXIT_SPEC_CONST_HANDLER,
28556 : ZEND_EXIT_SPEC_CONST_HANDLER,
28557 : ZEND_EXIT_SPEC_CONST_HANDLER,
28558 : ZEND_EXIT_SPEC_TMP_HANDLER,
28559 : ZEND_EXIT_SPEC_TMP_HANDLER,
28560 : ZEND_EXIT_SPEC_TMP_HANDLER,
28561 : ZEND_EXIT_SPEC_TMP_HANDLER,
28562 : ZEND_EXIT_SPEC_TMP_HANDLER,
28563 : ZEND_EXIT_SPEC_VAR_HANDLER,
28564 : ZEND_EXIT_SPEC_VAR_HANDLER,
28565 : ZEND_EXIT_SPEC_VAR_HANDLER,
28566 : ZEND_EXIT_SPEC_VAR_HANDLER,
28567 : ZEND_EXIT_SPEC_VAR_HANDLER,
28568 : ZEND_EXIT_SPEC_UNUSED_HANDLER,
28569 : ZEND_EXIT_SPEC_UNUSED_HANDLER,
28570 : ZEND_EXIT_SPEC_UNUSED_HANDLER,
28571 : ZEND_EXIT_SPEC_UNUSED_HANDLER,
28572 : ZEND_EXIT_SPEC_UNUSED_HANDLER,
28573 : ZEND_EXIT_SPEC_CV_HANDLER,
28574 : ZEND_EXIT_SPEC_CV_HANDLER,
28575 : ZEND_EXIT_SPEC_CV_HANDLER,
28576 : ZEND_EXIT_SPEC_CV_HANDLER,
28577 : ZEND_EXIT_SPEC_CV_HANDLER,
28578 : ZEND_FETCH_R_SPEC_CONST_HANDLER,
28579 : ZEND_FETCH_R_SPEC_CONST_HANDLER,
28580 : ZEND_FETCH_R_SPEC_CONST_HANDLER,
28581 : ZEND_FETCH_R_SPEC_CONST_HANDLER,
28582 : ZEND_FETCH_R_SPEC_CONST_HANDLER,
28583 : ZEND_FETCH_R_SPEC_TMP_HANDLER,
28584 : ZEND_FETCH_R_SPEC_TMP_HANDLER,
28585 : ZEND_FETCH_R_SPEC_TMP_HANDLER,
28586 : ZEND_FETCH_R_SPEC_TMP_HANDLER,
28587 : ZEND_FETCH_R_SPEC_TMP_HANDLER,
28588 : ZEND_FETCH_R_SPEC_VAR_HANDLER,
28589 : ZEND_FETCH_R_SPEC_VAR_HANDLER,
28590 : ZEND_FETCH_R_SPEC_VAR_HANDLER,
28591 : ZEND_FETCH_R_SPEC_VAR_HANDLER,
28592 : ZEND_FETCH_R_SPEC_VAR_HANDLER,
28593 : ZEND_NULL_HANDLER,
28594 : ZEND_NULL_HANDLER,
28595 : ZEND_NULL_HANDLER,
28596 : ZEND_NULL_HANDLER,
28597 : ZEND_NULL_HANDLER,
28598 : ZEND_FETCH_R_SPEC_CV_HANDLER,
28599 : ZEND_FETCH_R_SPEC_CV_HANDLER,
28600 : ZEND_FETCH_R_SPEC_CV_HANDLER,
28601 : ZEND_FETCH_R_SPEC_CV_HANDLER,
28602 : ZEND_FETCH_R_SPEC_CV_HANDLER,
28603 : ZEND_NULL_HANDLER,
28604 : ZEND_NULL_HANDLER,
28605 : ZEND_NULL_HANDLER,
28606 : ZEND_NULL_HANDLER,
28607 : ZEND_NULL_HANDLER,
28608 : ZEND_NULL_HANDLER,
28609 : ZEND_NULL_HANDLER,
28610 : ZEND_NULL_HANDLER,
28611 : ZEND_NULL_HANDLER,
28612 : ZEND_NULL_HANDLER,
28613 : ZEND_FETCH_DIM_R_SPEC_VAR_CONST_HANDLER,
28614 : ZEND_FETCH_DIM_R_SPEC_VAR_TMP_HANDLER,
28615 : ZEND_FETCH_DIM_R_SPEC_VAR_VAR_HANDLER,
28616 : ZEND_NULL_HANDLER,
28617 : ZEND_FETCH_DIM_R_SPEC_VAR_CV_HANDLER,
28618 : ZEND_NULL_HANDLER,
28619 : ZEND_NULL_HANDLER,
28620 : ZEND_NULL_HANDLER,
28621 : ZEND_NULL_HANDLER,
28622 : ZEND_NULL_HANDLER,
28623 : ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER,
28624 : ZEND_FETCH_DIM_R_SPEC_CV_TMP_HANDLER,
28625 : ZEND_FETCH_DIM_R_SPEC_CV_VAR_HANDLER,
28626 : ZEND_NULL_HANDLER,
28627 : ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER,
28628 : ZEND_NULL_HANDLER,
28629 : ZEND_NULL_HANDLER,
28630 : ZEND_NULL_HANDLER,
28631 : ZEND_NULL_HANDLER,
28632 : ZEND_NULL_HANDLER,
28633 : ZEND_NULL_HANDLER,
28634 : ZEND_NULL_HANDLER,
28635 : ZEND_NULL_HANDLER,
28636 : ZEND_NULL_HANDLER,
28637 : ZEND_NULL_HANDLER,
28638 : ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HANDLER,
28639 : ZEND_FETCH_OBJ_R_SPEC_VAR_TMP_HANDLER,
28640 : ZEND_FETCH_OBJ_R_SPEC_VAR_VAR_HANDLER,
28641 : ZEND_NULL_HANDLER,
28642 : ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLER,
28643 : ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER,
28644 : ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMP_HANDLER,
28645 : ZEND_FETCH_OBJ_R_SPEC_UNUSED_VAR_HANDLER,
28646 : ZEND_NULL_HANDLER,
28647 : ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER,
28648 : ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER,
28649 : ZEND_FETCH_OBJ_R_SPEC_CV_TMP_HANDLER,
28650 : ZEND_FETCH_OBJ_R_SPEC_CV_VAR_HANDLER,
28651 : ZEND_NULL_HANDLER,
28652 : ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER,
28653 : ZEND_FETCH_W_SPEC_CONST_HANDLER,
28654 : ZEND_FETCH_W_SPEC_CONST_HANDLER,
28655 : ZEND_FETCH_W_SPEC_CONST_HANDLER,
28656 : ZEND_FETCH_W_SPEC_CONST_HANDLER,
28657 : ZEND_FETCH_W_SPEC_CONST_HANDLER,
28658 : ZEND_FETCH_W_SPEC_TMP_HANDLER,
28659 : ZEND_FETCH_W_SPEC_TMP_HANDLER,
28660 : ZEND_FETCH_W_SPEC_TMP_HANDLER,
28661 : ZEND_FETCH_W_SPEC_TMP_HANDLER,
28662 : ZEND_FETCH_W_SPEC_TMP_HANDLER,
28663 : ZEND_FETCH_W_SPEC_VAR_HANDLER,
28664 : ZEND_FETCH_W_SPEC_VAR_HANDLER,
28665 : ZEND_FETCH_W_SPEC_VAR_HANDLER,
28666 : ZEND_FETCH_W_SPEC_VAR_HANDLER,
28667 : ZEND_FETCH_W_SPEC_VAR_HANDLER,
28668 : ZEND_NULL_HANDLER,
28669 : ZEND_NULL_HANDLER,
28670 : ZEND_NULL_HANDLER,
28671 : ZEND_NULL_HANDLER,
28672 : ZEND_NULL_HANDLER,
28673 : ZEND_FETCH_W_SPEC_CV_HANDLER,
28674 : ZEND_FETCH_W_SPEC_CV_HANDLER,
28675 : ZEND_FETCH_W_SPEC_CV_HANDLER,
28676 : ZEND_FETCH_W_SPEC_CV_HANDLER,
28677 : ZEND_FETCH_W_SPEC_CV_HANDLER,
28678 : ZEND_NULL_HANDLER,
28679 : ZEND_NULL_HANDLER,
28680 : ZEND_NULL_HANDLER,
28681 : ZEND_NULL_HANDLER,
28682 : ZEND_NULL_HANDLER,
28683 : ZEND_NULL_HANDLER,
28684 : ZEND_NULL_HANDLER,
28685 : ZEND_NULL_HANDLER,
28686 : ZEND_NULL_HANDLER,
28687 : ZEND_NULL_HANDLER,
28688 : ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER,
28689 : ZEND_FETCH_DIM_W_SPEC_VAR_TMP_HANDLER,
28690 : ZEND_FETCH_DIM_W_SPEC_VAR_VAR_HANDLER,
28691 : ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER,
28692 : ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER,
28693 : ZEND_NULL_HANDLER,
28694 : ZEND_NULL_HANDLER,
28695 : ZEND_NULL_HANDLER,
28696 : ZEND_NULL_HANDLER,
28697 : ZEND_NULL_HANDLER,
28698 : ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER,
28699 : ZEND_FETCH_DIM_W_SPEC_CV_TMP_HANDLER,
28700 : ZEND_FETCH_DIM_W_SPEC_CV_VAR_HANDLER,
28701 : ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER,
28702 : ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER,
28703 : ZEND_NULL_HANDLER,
28704 : ZEND_NULL_HANDLER,
28705 : ZEND_NULL_HANDLER,
28706 : ZEND_NULL_HANDLER,
28707 : ZEND_NULL_HANDLER,
28708 : ZEND_NULL_HANDLER,
28709 : ZEND_NULL_HANDLER,
28710 : ZEND_NULL_HANDLER,
28711 : ZEND_NULL_HANDLER,
28712 : ZEND_NULL_HANDLER,
28713 : ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER,
28714 : ZEND_FETCH_OBJ_W_SPEC_VAR_TMP_HANDLER,
28715 : ZEND_FETCH_OBJ_W_SPEC_VAR_VAR_HANDLER,
28716 : ZEND_NULL_HANDLER,
28717 : ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER,
28718 : ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER,
28719 : ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMP_HANDLER,
28720 : ZEND_FETCH_OBJ_W_SPEC_UNUSED_VAR_HANDLER,
28721 : ZEND_NULL_HANDLER,
28722 : ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER,
28723 : ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER,
28724 : ZEND_FETCH_OBJ_W_SPEC_CV_TMP_HANDLER,
28725 : ZEND_FETCH_OBJ_W_SPEC_CV_VAR_HANDLER,
28726 : ZEND_NULL_HANDLER,
28727 : ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER,
28728 : ZEND_FETCH_RW_SPEC_CONST_HANDLER,
28729 : ZEND_FETCH_RW_SPEC_CONST_HANDLER,
28730 : ZEND_FETCH_RW_SPEC_CONST_HANDLER,
28731 : ZEND_FETCH_RW_SPEC_CONST_HANDLER,
28732 : ZEND_FETCH_RW_SPEC_CONST_HANDLER,
28733 : ZEND_FETCH_RW_SPEC_TMP_HANDLER,
28734 : ZEND_FETCH_RW_SPEC_TMP_HANDLER,
28735 : ZEND_FETCH_RW_SPEC_TMP_HANDLER,
28736 : ZEND_FETCH_RW_SPEC_TMP_HANDLER,
28737 : ZEND_FETCH_RW_SPEC_TMP_HANDLER,
28738 : ZEND_FETCH_RW_SPEC_VAR_HANDLER,
28739 : ZEND_FETCH_RW_SPEC_VAR_HANDLER,
28740 : ZEND_FETCH_RW_SPEC_VAR_HANDLER,
28741 : ZEND_FETCH_RW_SPEC_VAR_HANDLER,
28742 : ZEND_FETCH_RW_SPEC_VAR_HANDLER,
28743 : ZEND_NULL_HANDLER,
28744 : ZEND_NULL_HANDLER,
28745 : ZEND_NULL_HANDLER,
28746 : ZEND_NULL_HANDLER,
28747 : ZEND_NULL_HANDLER,
28748 : ZEND_FETCH_RW_SPEC_CV_HANDLER,
28749 : ZEND_FETCH_RW_SPEC_CV_HANDLER,
28750 : ZEND_FETCH_RW_SPEC_CV_HANDLER,
28751 : ZEND_FETCH_RW_SPEC_CV_HANDLER,
28752 : ZEND_FETCH_RW_SPEC_CV_HANDLER,
28753 : ZEND_NULL_HANDLER,
28754 : ZEND_NULL_HANDLER,
28755 : ZEND_NULL_HANDLER,
28756 : ZEND_NULL_HANDLER,
28757 : ZEND_NULL_HANDLER,
28758 : ZEND_NULL_HANDLER,
28759 : ZEND_NULL_HANDLER,
28760 : ZEND_NULL_HANDLER,
28761 : ZEND_NULL_HANDLER,
28762 : ZEND_NULL_HANDLER,
28763 : ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER,
28764 : ZEND_FETCH_DIM_RW_SPEC_VAR_TMP_HANDLER,
28765 : ZEND_FETCH_DIM_RW_SPEC_VAR_VAR_HANDLER,
28766 : ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER,
28767 : ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER,
28768 : ZEND_NULL_HANDLER,
28769 : ZEND_NULL_HANDLER,
28770 : ZEND_NULL_HANDLER,
28771 : ZEND_NULL_HANDLER,
28772 : ZEND_NULL_HANDLER,
28773 : ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER,
28774 : ZEND_FETCH_DIM_RW_SPEC_CV_TMP_HANDLER,
28775 : ZEND_FETCH_DIM_RW_SPEC_CV_VAR_HANDLER,
28776 : ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER,
28777 : ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER,
28778 : ZEND_NULL_HANDLER,
28779 : ZEND_NULL_HANDLER,
28780 : ZEND_NULL_HANDLER,
28781 : ZEND_NULL_HANDLER,
28782 : ZEND_NULL_HANDLER,
28783 : ZEND_NULL_HANDLER,
28784 : ZEND_NULL_HANDLER,
28785 : ZEND_NULL_HANDLER,
28786 : ZEND_NULL_HANDLER,
28787 : ZEND_NULL_HANDLER,
28788 : ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER,
28789 : ZEND_FETCH_OBJ_RW_SPEC_VAR_TMP_HANDLER,
28790 : ZEND_FETCH_OBJ_RW_SPEC_VAR_VAR_HANDLER,
28791 : ZEND_NULL_HANDLER,
28792 : ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER,
28793 : ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER,
28794 : ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMP_HANDLER,
28795 : ZEND_FETCH_OBJ_RW_SPEC_UNUSED_VAR_HANDLER,
28796 : ZEND_NULL_HANDLER,
28797 : ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER,
28798 : ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER,
28799 : ZEND_FETCH_OBJ_RW_SPEC_CV_TMP_HANDLER,
28800 : ZEND_FETCH_OBJ_RW_SPEC_CV_VAR_HANDLER,
28801 : ZEND_NULL_HANDLER,
28802 : ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER,
28803 : ZEND_FETCH_IS_SPEC_CONST_HANDLER,
28804 : ZEND_FETCH_IS_SPEC_CONST_HANDLER,
28805 : ZEND_FETCH_IS_SPEC_CONST_HANDLER,
28806 : ZEND_FETCH_IS_SPEC_CONST_HANDLER,
28807 : ZEND_FETCH_IS_SPEC_CONST_HANDLER,
28808 : ZEND_FETCH_IS_SPEC_TMP_HANDLER,
28809 : ZEND_FETCH_IS_SPEC_TMP_HANDLER,
28810 : ZEND_FETCH_IS_SPEC_TMP_HANDLER,
28811 : ZEND_FETCH_IS_SPEC_TMP_HANDLER,
28812 : ZEND_FETCH_IS_SPEC_TMP_HANDLER,
28813 : ZEND_FETCH_IS_SPEC_VAR_HANDLER,
28814 : ZEND_FETCH_IS_SPEC_VAR_HANDLER,
28815 : ZEND_FETCH_IS_SPEC_VAR_HANDLER,
28816 : ZEND_FETCH_IS_SPEC_VAR_HANDLER,
28817 : ZEND_FETCH_IS_SPEC_VAR_HANDLER,
28818 : ZEND_NULL_HANDLER,
28819 : ZEND_NULL_HANDLER,
28820 : ZEND_NULL_HANDLER,
28821 : ZEND_NULL_HANDLER,
28822 : ZEND_NULL_HANDLER,
28823 : ZEND_FETCH_IS_SPEC_CV_HANDLER,
28824 : ZEND_FETCH_IS_SPEC_CV_HANDLER,
28825 : ZEND_FETCH_IS_SPEC_CV_HANDLER,
28826 : ZEND_FETCH_IS_SPEC_CV_HANDLER,
28827 : ZEND_FETCH_IS_SPEC_CV_HANDLER,
28828 : ZEND_NULL_HANDLER,
28829 : ZEND_NULL_HANDLER,
28830 : ZEND_NULL_HANDLER,
28831 : ZEND_NULL_HANDLER,
28832 : ZEND_NULL_HANDLER,
28833 : ZEND_NULL_HANDLER,
28834 : ZEND_NULL_HANDLER,
28835 : ZEND_NULL_HANDLER,
28836 : ZEND_NULL_HANDLER,
28837 : ZEND_NULL_HANDLER,
28838 : ZEND_FETCH_DIM_IS_SPEC_VAR_CONST_HANDLER,
28839 : ZEND_FETCH_DIM_IS_SPEC_VAR_TMP_HANDLER,
28840 : ZEND_FETCH_DIM_IS_SPEC_VAR_VAR_HANDLER,
28841 : ZEND_NULL_HANDLER,
28842 : ZEND_FETCH_DIM_IS_SPEC_VAR_CV_HANDLER,
28843 : ZEND_NULL_HANDLER,
28844 : ZEND_NULL_HANDLER,
28845 : ZEND_NULL_HANDLER,
28846 : ZEND_NULL_HANDLER,
28847 : ZEND_NULL_HANDLER,
28848 : ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER,
28849 : ZEND_FETCH_DIM_IS_SPEC_CV_TMP_HANDLER,
28850 : ZEND_FETCH_DIM_IS_SPEC_CV_VAR_HANDLER,
28851 : ZEND_NULL_HANDLER,
28852 : ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER,
28853 : ZEND_NULL_HANDLER,
28854 : ZEND_NULL_HANDLER,
28855 : ZEND_NULL_HANDLER,
28856 : ZEND_NULL_HANDLER,
28857 : ZEND_NULL_HANDLER,
28858 : ZEND_NULL_HANDLER,
28859 : ZEND_NULL_HANDLER,
28860 : ZEND_NULL_HANDLER,
28861 : ZEND_NULL_HANDLER,
28862 : ZEND_NULL_HANDLER,
28863 : ZEND_FETCH_OBJ_IS_SPEC_VAR_CONST_HANDLER,
28864 : ZEND_FETCH_OBJ_IS_SPEC_VAR_TMP_HANDLER,
28865 : ZEND_FETCH_OBJ_IS_SPEC_VAR_VAR_HANDLER,
28866 : ZEND_NULL_HANDLER,
28867 : ZEND_FETCH_OBJ_IS_SPEC_VAR_CV_HANDLER,
28868 : ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER,
28869 : ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMP_HANDLER,
28870 : ZEND_FETCH_OBJ_IS_SPEC_UNUSED_VAR_HANDLER,
28871 : ZEND_NULL_HANDLER,
28872 : ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER,
28873 : ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER,
28874 : ZEND_FETCH_OBJ_IS_SPEC_CV_TMP_HANDLER,
28875 : ZEND_FETCH_OBJ_IS_SPEC_CV_VAR_HANDLER,
28876 : ZEND_NULL_HANDLER,
28877 : ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER,
28878 : ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER,
28879 : ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER,
28880 : ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER,
28881 : ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER,
28882 : ZEND_FETCH_FUNC_ARG_SPEC_CONST_HANDLER,
28883 : ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER,
28884 : ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER,
28885 : ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER,
28886 : ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER,
28887 : ZEND_FETCH_FUNC_ARG_SPEC_TMP_HANDLER,
28888 : ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER,
28889 : ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER,
28890 : ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER,
28891 : ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER,
28892 : ZEND_FETCH_FUNC_ARG_SPEC_VAR_HANDLER,
28893 : ZEND_NULL_HANDLER,
28894 : ZEND_NULL_HANDLER,
28895 : ZEND_NULL_HANDLER,
28896 : ZEND_NULL_HANDLER,
28897 : ZEND_NULL_HANDLER,
28898 : ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER,
28899 : ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER,
28900 : ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER,
28901 : ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER,
28902 : ZEND_FETCH_FUNC_ARG_SPEC_CV_HANDLER,
28903 : ZEND_NULL_HANDLER,
28904 : ZEND_NULL_HANDLER,
28905 : ZEND_NULL_HANDLER,
28906 : ZEND_NULL_HANDLER,
28907 : ZEND_NULL_HANDLER,
28908 : ZEND_NULL_HANDLER,
28909 : ZEND_NULL_HANDLER,
28910 : ZEND_NULL_HANDLER,
28911 : ZEND_NULL_HANDLER,
28912 : ZEND_NULL_HANDLER,
28913 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
28914 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMP_HANDLER,
28915 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_VAR_HANDLER,
28916 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER,
28917 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER,
28918 : ZEND_NULL_HANDLER,
28919 : ZEND_NULL_HANDLER,
28920 : ZEND_NULL_HANDLER,
28921 : ZEND_NULL_HANDLER,
28922 : ZEND_NULL_HANDLER,
28923 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER,
28924 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMP_HANDLER,
28925 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_VAR_HANDLER,
28926 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER,
28927 : ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER,
28928 : ZEND_NULL_HANDLER,
28929 : ZEND_NULL_HANDLER,
28930 : ZEND_NULL_HANDLER,
28931 : ZEND_NULL_HANDLER,
28932 : ZEND_NULL_HANDLER,
28933 : ZEND_NULL_HANDLER,
28934 : ZEND_NULL_HANDLER,
28935 : ZEND_NULL_HANDLER,
28936 : ZEND_NULL_HANDLER,
28937 : ZEND_NULL_HANDLER,
28938 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER,
28939 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMP_HANDLER,
28940 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_VAR_HANDLER,
28941 : ZEND_NULL_HANDLER,
28942 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER,
28943 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER,
28944 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMP_HANDLER,
28945 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_VAR_HANDLER,
28946 : ZEND_NULL_HANDLER,
28947 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER,
28948 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER,
28949 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMP_HANDLER,
28950 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_VAR_HANDLER,
28951 : ZEND_NULL_HANDLER,
28952 : ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER,
28953 : ZEND_FETCH_UNSET_SPEC_CONST_HANDLER,
28954 : ZEND_FETCH_UNSET_SPEC_CONST_HANDLER,
28955 : ZEND_FETCH_UNSET_SPEC_CONST_HANDLER,
28956 : ZEND_FETCH_UNSET_SPEC_CONST_HANDLER,
28957 : ZEND_FETCH_UNSET_SPEC_CONST_HANDLER,
28958 : ZEND_FETCH_UNSET_SPEC_TMP_HANDLER,
28959 : ZEND_FETCH_UNSET_SPEC_TMP_HANDLER,
28960 : ZEND_FETCH_UNSET_SPEC_TMP_HANDLER,
28961 : ZEND_FETCH_UNSET_SPEC_TMP_HANDLER,
28962 : ZEND_FETCH_UNSET_SPEC_TMP_HANDLER,
28963 : ZEND_FETCH_UNSET_SPEC_VAR_HANDLER,
28964 : ZEND_FETCH_UNSET_SPEC_VAR_HANDLER,
28965 : ZEND_FETCH_UNSET_SPEC_VAR_HANDLER,
28966 : ZEND_FETCH_UNSET_SPEC_VAR_HANDLER,
28967 : ZEND_FETCH_UNSET_SPEC_VAR_HANDLER,
28968 : ZEND_NULL_HANDLER,
28969 : ZEND_NULL_HANDLER,
28970 : ZEND_NULL_HANDLER,
28971 : ZEND_NULL_HANDLER,
28972 : ZEND_NULL_HANDLER,
28973 : ZEND_FETCH_UNSET_SPEC_CV_HANDLER,
28974 : ZEND_FETCH_UNSET_SPEC_CV_HANDLER,
28975 : ZEND_FETCH_UNSET_SPEC_CV_HANDLER,
28976 : ZEND_FETCH_UNSET_SPEC_CV_HANDLER,
28977 : ZEND_FETCH_UNSET_SPEC_CV_HANDLER,
28978 : ZEND_NULL_HANDLER,
28979 : ZEND_NULL_HANDLER,
28980 : ZEND_NULL_HANDLER,
28981 : ZEND_NULL_HANDLER,
28982 : ZEND_NULL_HANDLER,
28983 : ZEND_NULL_HANDLER,
28984 : ZEND_NULL_HANDLER,
28985 : ZEND_NULL_HANDLER,
28986 : ZEND_NULL_HANDLER,
28987 : ZEND_NULL_HANDLER,
28988 : ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER,
28989 : ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMP_HANDLER,
28990 : ZEND_FETCH_DIM_UNSET_SPEC_VAR_VAR_HANDLER,
28991 : ZEND_NULL_HANDLER,
28992 : ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER,
28993 : ZEND_NULL_HANDLER,
28994 : ZEND_NULL_HANDLER,
28995 : ZEND_NULL_HANDLER,
28996 : ZEND_NULL_HANDLER,
28997 : ZEND_NULL_HANDLER,
28998 : ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER,
28999 : ZEND_FETCH_DIM_UNSET_SPEC_CV_TMP_HANDLER,
29000 : ZEND_FETCH_DIM_UNSET_SPEC_CV_VAR_HANDLER,
29001 : ZEND_NULL_HANDLER,
29002 : ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER,
29003 : ZEND_NULL_HANDLER,
29004 : ZEND_NULL_HANDLER,
29005 : ZEND_NULL_HANDLER,
29006 : ZEND_NULL_HANDLER,
29007 : ZEND_NULL_HANDLER,
29008 : ZEND_NULL_HANDLER,
29009 : ZEND_NULL_HANDLER,
29010 : ZEND_NULL_HANDLER,
29011 : ZEND_NULL_HANDLER,
29012 : ZEND_NULL_HANDLER,
29013 : ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER,
29014 : ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMP_HANDLER,
29015 : ZEND_FETCH_OBJ_UNSET_SPEC_VAR_VAR_HANDLER,
29016 : ZEND_NULL_HANDLER,
29017 : ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER,
29018 : ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER,
29019 : ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMP_HANDLER,
29020 : ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_VAR_HANDLER,
29021 : ZEND_NULL_HANDLER,
29022 : ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER,
29023 : ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER,
29024 : ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMP_HANDLER,
29025 : ZEND_FETCH_OBJ_UNSET_SPEC_CV_VAR_HANDLER,
29026 : ZEND_NULL_HANDLER,
29027 : ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER,
29028 : ZEND_FETCH_DIM_TMP_VAR_SPEC_CONST_CONST_HANDLER,
29029 : ZEND_NULL_HANDLER,
29030 : ZEND_NULL_HANDLER,
29031 : ZEND_NULL_HANDLER,
29032 : ZEND_NULL_HANDLER,
29033 : ZEND_FETCH_DIM_TMP_VAR_SPEC_TMP_CONST_HANDLER,
29034 : ZEND_NULL_HANDLER,
29035 : ZEND_NULL_HANDLER,
29036 : ZEND_NULL_HANDLER,
29037 : ZEND_NULL_HANDLER,
29038 : ZEND_NULL_HANDLER,
29039 : ZEND_NULL_HANDLER,
29040 : ZEND_NULL_HANDLER,
29041 : ZEND_NULL_HANDLER,
29042 : ZEND_NULL_HANDLER,
29043 : ZEND_NULL_HANDLER,
29044 : ZEND_NULL_HANDLER,
29045 : ZEND_NULL_HANDLER,
29046 : ZEND_NULL_HANDLER,
29047 : ZEND_NULL_HANDLER,
29048 : ZEND_NULL_HANDLER,
29049 : ZEND_NULL_HANDLER,
29050 : ZEND_NULL_HANDLER,
29051 : ZEND_NULL_HANDLER,
29052 : ZEND_NULL_HANDLER,
29053 : ZEND_FETCH_CONSTANT_SPEC_CONST_CONST_HANDLER,
29054 : ZEND_NULL_HANDLER,
29055 : ZEND_NULL_HANDLER,
29056 : ZEND_NULL_HANDLER,
29057 : ZEND_NULL_HANDLER,
29058 : ZEND_NULL_HANDLER,
29059 : ZEND_NULL_HANDLER,
29060 : ZEND_NULL_HANDLER,
29061 : ZEND_NULL_HANDLER,
29062 : ZEND_NULL_HANDLER,
29063 : ZEND_NULL_HANDLER,
29064 : ZEND_NULL_HANDLER,
29065 : ZEND_NULL_HANDLER,
29066 : ZEND_NULL_HANDLER,
29067 : ZEND_NULL_HANDLER,
29068 : ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER,
29069 : ZEND_NULL_HANDLER,
29070 : ZEND_NULL_HANDLER,
29071 : ZEND_NULL_HANDLER,
29072 : ZEND_NULL_HANDLER,
29073 : ZEND_NULL_HANDLER,
29074 : ZEND_NULL_HANDLER,
29075 : ZEND_NULL_HANDLER,
29076 : ZEND_NULL_HANDLER,
29077 : ZEND_NULL_HANDLER,
29078 : ZEND_NULL_HANDLER,
29079 : ZEND_NULL_HANDLER,
29080 : ZEND_NULL_HANDLER,
29081 : ZEND_NULL_HANDLER,
29082 : ZEND_NULL_HANDLER,
29083 : ZEND_NULL_HANDLER,
29084 : ZEND_NULL_HANDLER,
29085 : ZEND_NULL_HANDLER,
29086 : ZEND_NULL_HANDLER,
29087 : ZEND_NULL_HANDLER,
29088 : ZEND_NULL_HANDLER,
29089 : ZEND_NULL_HANDLER,
29090 : ZEND_NULL_HANDLER,
29091 : ZEND_NULL_HANDLER,
29092 : ZEND_NULL_HANDLER,
29093 : ZEND_NULL_HANDLER,
29094 : ZEND_NULL_HANDLER,
29095 : ZEND_NULL_HANDLER,
29096 : ZEND_NULL_HANDLER,
29097 : ZEND_NULL_HANDLER,
29098 : ZEND_NULL_HANDLER,
29099 : ZEND_NULL_HANDLER,
29100 : ZEND_NULL_HANDLER,
29101 : ZEND_NULL_HANDLER,
29102 : ZEND_NULL_HANDLER,
29103 : ZEND_EXT_STMT_SPEC_HANDLER,
29104 : ZEND_EXT_STMT_SPEC_HANDLER,
29105 : ZEND_EXT_STMT_SPEC_HANDLER,
29106 : ZEND_EXT_STMT_SPEC_HANDLER,
29107 : ZEND_EXT_STMT_SPEC_HANDLER,
29108 : ZEND_EXT_STMT_SPEC_HANDLER,
29109 : ZEND_EXT_STMT_SPEC_HANDLER,
29110 : ZEND_EXT_STMT_SPEC_HANDLER,
29111 : ZEND_EXT_STMT_SPEC_HANDLER,
29112 : ZEND_EXT_STMT_SPEC_HANDLER,
29113 : ZEND_EXT_STMT_SPEC_HANDLER,
29114 : ZEND_EXT_STMT_SPEC_HANDLER,
29115 : ZEND_EXT_STMT_SPEC_HANDLER,
29116 : ZEND_EXT_STMT_SPEC_HANDLER,
29117 : ZEND_EXT_STMT_SPEC_HANDLER,
29118 : ZEND_EXT_STMT_SPEC_HANDLER,
29119 : ZEND_EXT_STMT_SPEC_HANDLER,
29120 : ZEND_EXT_STMT_SPEC_HANDLER,
29121 : ZEND_EXT_STMT_SPEC_HANDLER,
29122 : ZEND_EXT_STMT_SPEC_HANDLER,
29123 : ZEND_EXT_STMT_SPEC_HANDLER,
29124 : ZEND_EXT_STMT_SPEC_HANDLER,
29125 : ZEND_EXT_STMT_SPEC_HANDLER,
29126 : ZEND_EXT_STMT_SPEC_HANDLER,
29127 : ZEND_EXT_STMT_SPEC_HANDLER,
29128 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29129 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29130 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29131 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29132 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29133 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29134 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29135 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29136 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29137 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29138 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29139 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29140 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29141 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29142 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29143 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29144 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29145 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29146 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29147 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29148 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29149 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29150 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29151 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29152 : ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER,
29153 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29154 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29155 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29156 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29157 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29158 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29159 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29160 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29161 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29162 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29163 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29164 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29165 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29166 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29167 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29168 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29169 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29170 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29171 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29172 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29173 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29174 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29175 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29176 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29177 : ZEND_EXT_FCALL_END_SPEC_HANDLER,
29178 : ZEND_EXT_NOP_SPEC_HANDLER,
29179 : ZEND_EXT_NOP_SPEC_HANDLER,
29180 : ZEND_EXT_NOP_SPEC_HANDLER,
29181 : ZEND_EXT_NOP_SPEC_HANDLER,
29182 : ZEND_EXT_NOP_SPEC_HANDLER,
29183 : ZEND_EXT_NOP_SPEC_HANDLER,
29184 : ZEND_EXT_NOP_SPEC_HANDLER,
29185 : ZEND_EXT_NOP_SPEC_HANDLER,
29186 : ZEND_EXT_NOP_SPEC_HANDLER,
29187 : ZEND_EXT_NOP_SPEC_HANDLER,
29188 : ZEND_EXT_NOP_SPEC_HANDLER,
29189 : ZEND_EXT_NOP_SPEC_HANDLER,
29190 : ZEND_EXT_NOP_SPEC_HANDLER,
29191 : ZEND_EXT_NOP_SPEC_HANDLER,
29192 : ZEND_EXT_NOP_SPEC_HANDLER,
29193 : ZEND_EXT_NOP_SPEC_HANDLER,
29194 : ZEND_EXT_NOP_SPEC_HANDLER,
29195 : ZEND_EXT_NOP_SPEC_HANDLER,
29196 : ZEND_EXT_NOP_SPEC_HANDLER,
29197 : ZEND_EXT_NOP_SPEC_HANDLER,
29198 : ZEND_EXT_NOP_SPEC_HANDLER,
29199 : ZEND_EXT_NOP_SPEC_HANDLER,
29200 : ZEND_EXT_NOP_SPEC_HANDLER,
29201 : ZEND_EXT_NOP_SPEC_HANDLER,
29202 : ZEND_EXT_NOP_SPEC_HANDLER,
29203 : ZEND_TICKS_SPEC_CONST_HANDLER,
29204 : ZEND_TICKS_SPEC_CONST_HANDLER,
29205 : ZEND_TICKS_SPEC_CONST_HANDLER,
29206 : ZEND_TICKS_SPEC_CONST_HANDLER,
29207 : ZEND_TICKS_SPEC_CONST_HANDLER,
29208 : ZEND_NULL_HANDLER,
29209 : ZEND_NULL_HANDLER,
29210 : ZEND_NULL_HANDLER,
29211 : ZEND_NULL_HANDLER,
29212 : ZEND_NULL_HANDLER,
29213 : ZEND_NULL_HANDLER,
29214 : ZEND_NULL_HANDLER,
29215 : ZEND_NULL_HANDLER,
29216 : ZEND_NULL_HANDLER,
29217 : ZEND_NULL_HANDLER,
29218 : ZEND_NULL_HANDLER,
29219 : ZEND_NULL_HANDLER,
29220 : ZEND_NULL_HANDLER,
29221 : ZEND_NULL_HANDLER,
29222 : ZEND_NULL_HANDLER,
29223 : ZEND_NULL_HANDLER,
29224 : ZEND_NULL_HANDLER,
29225 : ZEND_NULL_HANDLER,
29226 : ZEND_NULL_HANDLER,
29227 : ZEND_NULL_HANDLER,
29228 : ZEND_NULL_HANDLER,
29229 : ZEND_NULL_HANDLER,
29230 : ZEND_NULL_HANDLER,
29231 : ZEND_NULL_HANDLER,
29232 : ZEND_NULL_HANDLER,
29233 : ZEND_NULL_HANDLER,
29234 : ZEND_NULL_HANDLER,
29235 : ZEND_NULL_HANDLER,
29236 : ZEND_NULL_HANDLER,
29237 : ZEND_NULL_HANDLER,
29238 : ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
29239 : ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
29240 : ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
29241 : ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
29242 : ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER,
29243 : ZEND_NULL_HANDLER,
29244 : ZEND_NULL_HANDLER,
29245 : ZEND_NULL_HANDLER,
29246 : ZEND_NULL_HANDLER,
29247 : ZEND_NULL_HANDLER,
29248 : ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
29249 : ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
29250 : ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
29251 : ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
29252 : ZEND_SEND_VAR_NO_REF_SPEC_CV_HANDLER,
29253 : ZEND_CATCH_SPEC_HANDLER,
29254 : ZEND_CATCH_SPEC_HANDLER,
29255 : ZEND_CATCH_SPEC_HANDLER,
29256 : ZEND_CATCH_SPEC_HANDLER,
29257 : ZEND_CATCH_SPEC_HANDLER,
29258 : ZEND_CATCH_SPEC_HANDLER,
29259 : ZEND_CATCH_SPEC_HANDLER,
29260 : ZEND_CATCH_SPEC_HANDLER,
29261 : ZEND_CATCH_SPEC_HANDLER,
29262 : ZEND_CATCH_SPEC_HANDLER,
29263 : ZEND_CATCH_SPEC_HANDLER,
29264 : ZEND_CATCH_SPEC_HANDLER,
29265 : ZEND_CATCH_SPEC_HANDLER,
29266 : ZEND_CATCH_SPEC_HANDLER,
29267 : ZEND_CATCH_SPEC_HANDLER,
29268 : ZEND_CATCH_SPEC_HANDLER,
29269 : ZEND_CATCH_SPEC_HANDLER,
29270 : ZEND_CATCH_SPEC_HANDLER,
29271 : ZEND_CATCH_SPEC_HANDLER,
29272 : ZEND_CATCH_SPEC_HANDLER,
29273 : ZEND_CATCH_SPEC_HANDLER,
29274 : ZEND_CATCH_SPEC_HANDLER,
29275 : ZEND_CATCH_SPEC_HANDLER,
29276 : ZEND_CATCH_SPEC_HANDLER,
29277 : ZEND_CATCH_SPEC_HANDLER,
29278 : ZEND_THROW_SPEC_CONST_HANDLER,
29279 : ZEND_THROW_SPEC_CONST_HANDLER,
29280 : ZEND_THROW_SPEC_CONST_HANDLER,
29281 : ZEND_THROW_SPEC_CONST_HANDLER,
29282 : ZEND_THROW_SPEC_CONST_HANDLER,
29283 : ZEND_THROW_SPEC_TMP_HANDLER,
29284 : ZEND_THROW_SPEC_TMP_HANDLER,
29285 : ZEND_THROW_SPEC_TMP_HANDLER,
29286 : ZEND_THROW_SPEC_TMP_HANDLER,
29287 : ZEND_THROW_SPEC_TMP_HANDLER,
29288 : ZEND_THROW_SPEC_VAR_HANDLER,
29289 : ZEND_THROW_SPEC_VAR_HANDLER,
29290 : ZEND_THROW_SPEC_VAR_HANDLER,
29291 : ZEND_THROW_SPEC_VAR_HANDLER,
29292 : ZEND_THROW_SPEC_VAR_HANDLER,
29293 : ZEND_NULL_HANDLER,
29294 : ZEND_NULL_HANDLER,
29295 : ZEND_NULL_HANDLER,
29296 : ZEND_NULL_HANDLER,
29297 : ZEND_NULL_HANDLER,
29298 : ZEND_THROW_SPEC_CV_HANDLER,
29299 : ZEND_THROW_SPEC_CV_HANDLER,
29300 : ZEND_THROW_SPEC_CV_HANDLER,
29301 : ZEND_THROW_SPEC_CV_HANDLER,
29302 : ZEND_THROW_SPEC_CV_HANDLER,
29303 : ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
29304 : ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
29305 : ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
29306 : ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
29307 : ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
29308 : ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
29309 : ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
29310 : ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
29311 : ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
29312 : ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
29313 : ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
29314 : ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
29315 : ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
29316 : ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
29317 : ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
29318 : ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
29319 : ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
29320 : ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
29321 : ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
29322 : ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
29323 : ZEND_FETCH_CLASS_SPEC_CONST_HANDLER,
29324 : ZEND_FETCH_CLASS_SPEC_TMP_HANDLER,
29325 : ZEND_FETCH_CLASS_SPEC_VAR_HANDLER,
29326 : ZEND_FETCH_CLASS_SPEC_UNUSED_HANDLER,
29327 : ZEND_FETCH_CLASS_SPEC_CV_HANDLER,
29328 : ZEND_CLONE_SPEC_CONST_HANDLER,
29329 : ZEND_CLONE_SPEC_CONST_HANDLER,
29330 : ZEND_CLONE_SPEC_CONST_HANDLER,
29331 : ZEND_CLONE_SPEC_CONST_HANDLER,
29332 : ZEND_CLONE_SPEC_CONST_HANDLER,
29333 : ZEND_CLONE_SPEC_TMP_HANDLER,
29334 : ZEND_CLONE_SPEC_TMP_HANDLER,
29335 : ZEND_CLONE_SPEC_TMP_HANDLER,
29336 : ZEND_CLONE_SPEC_TMP_HANDLER,
29337 : ZEND_CLONE_SPEC_TMP_HANDLER,
29338 : ZEND_CLONE_SPEC_VAR_HANDLER,
29339 : ZEND_CLONE_SPEC_VAR_HANDLER,
29340 : ZEND_CLONE_SPEC_VAR_HANDLER,
29341 : ZEND_CLONE_SPEC_VAR_HANDLER,
29342 : ZEND_CLONE_SPEC_VAR_HANDLER,
29343 : ZEND_CLONE_SPEC_UNUSED_HANDLER,
29344 : ZEND_CLONE_SPEC_UNUSED_HANDLER,
29345 : ZEND_CLONE_SPEC_UNUSED_HANDLER,
29346 : ZEND_CLONE_SPEC_UNUSED_HANDLER,
29347 : ZEND_CLONE_SPEC_UNUSED_HANDLER,
29348 : ZEND_CLONE_SPEC_CV_HANDLER,
29349 : ZEND_CLONE_SPEC_CV_HANDLER,
29350 : ZEND_CLONE_SPEC_CV_HANDLER,
29351 : ZEND_CLONE_SPEC_CV_HANDLER,
29352 : ZEND_CLONE_SPEC_CV_HANDLER,
29353 : ZEND_NULL_HANDLER,
29354 : ZEND_NULL_HANDLER,
29355 : ZEND_NULL_HANDLER,
29356 : ZEND_NULL_HANDLER,
29357 : ZEND_NULL_HANDLER,
29358 : ZEND_NULL_HANDLER,
29359 : ZEND_NULL_HANDLER,
29360 : ZEND_NULL_HANDLER,
29361 : ZEND_NULL_HANDLER,
29362 : ZEND_NULL_HANDLER,
29363 : ZEND_NULL_HANDLER,
29364 : ZEND_NULL_HANDLER,
29365 : ZEND_NULL_HANDLER,
29366 : ZEND_NULL_HANDLER,
29367 : ZEND_NULL_HANDLER,
29368 : ZEND_NULL_HANDLER,
29369 : ZEND_NULL_HANDLER,
29370 : ZEND_NULL_HANDLER,
29371 : ZEND_NULL_HANDLER,
29372 : ZEND_NULL_HANDLER,
29373 : ZEND_NULL_HANDLER,
29374 : ZEND_NULL_HANDLER,
29375 : ZEND_NULL_HANDLER,
29376 : ZEND_NULL_HANDLER,
29377 : ZEND_NULL_HANDLER,
29378 : ZEND_NULL_HANDLER,
29379 : ZEND_NULL_HANDLER,
29380 : ZEND_NULL_HANDLER,
29381 : ZEND_NULL_HANDLER,
29382 : ZEND_NULL_HANDLER,
29383 : ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER,
29384 : ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER,
29385 : ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER,
29386 : ZEND_NULL_HANDLER,
29387 : ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER,
29388 : ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER,
29389 : ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER,
29390 : ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER,
29391 : ZEND_NULL_HANDLER,
29392 : ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER,
29393 : ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER,
29394 : ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER,
29395 : ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER,
29396 : ZEND_NULL_HANDLER,
29397 : ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER,
29398 : ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER,
29399 : ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER,
29400 : ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER,
29401 : ZEND_NULL_HANDLER,
29402 : ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER,
29403 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER,
29404 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER,
29405 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER,
29406 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER,
29407 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER,
29408 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER,
29409 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER,
29410 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER,
29411 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER,
29412 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER,
29413 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER,
29414 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER,
29415 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER,
29416 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER,
29417 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER,
29418 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER,
29419 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER,
29420 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER,
29421 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER,
29422 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER,
29423 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER,
29424 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_TMP_HANDLER,
29425 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_HANDLER,
29426 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_HANDLER,
29427 : ZEND_INIT_STATIC_METHOD_CALL_SPEC_CV_HANDLER,
29428 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER,
29429 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER,
29430 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER,
29431 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER,
29432 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_HANDLER,
29433 : ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER,
29434 : ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER,
29435 : ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER,
29436 : ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER,
29437 : ZEND_ISSET_ISEMPTY_VAR_SPEC_TMP_HANDLER,
29438 : ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER,
29439 : ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER,
29440 : ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER,
29441 : ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER,
29442 : ZEND_ISSET_ISEMPTY_VAR_SPEC_VAR_HANDLER,
29443 : ZEND_NULL_HANDLER,
29444 : ZEND_NULL_HANDLER,
29445 : ZEND_NULL_HANDLER,
29446 : ZEND_NULL_HANDLER,
29447 : ZEND_NULL_HANDLER,
29448 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER,
29449 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER,
29450 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER,
29451 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER,
29452 : ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_HANDLER,
29453 : ZEND_NULL_HANDLER,
29454 : ZEND_NULL_HANDLER,
29455 : ZEND_NULL_HANDLER,
29456 : ZEND_NULL_HANDLER,
29457 : ZEND_NULL_HANDLER,
29458 : ZEND_NULL_HANDLER,
29459 : ZEND_NULL_HANDLER,
29460 : ZEND_NULL_HANDLER,
29461 : ZEND_NULL_HANDLER,
29462 : ZEND_NULL_HANDLER,
29463 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CONST_HANDLER,
29464 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_TMP_HANDLER,
29465 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_VAR_HANDLER,
29466 : ZEND_NULL_HANDLER,
29467 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_VAR_CV_HANDLER,
29468 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CONST_HANDLER,
29469 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_TMP_HANDLER,
29470 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_VAR_HANDLER,
29471 : ZEND_NULL_HANDLER,
29472 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_UNUSED_CV_HANDLER,
29473 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER,
29474 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMP_HANDLER,
29475 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_VAR_HANDLER,
29476 : ZEND_NULL_HANDLER,
29477 : ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER,
29478 : ZEND_NULL_HANDLER,
29479 : ZEND_NULL_HANDLER,
29480 : ZEND_NULL_HANDLER,
29481 : ZEND_NULL_HANDLER,
29482 : ZEND_NULL_HANDLER,
29483 : ZEND_NULL_HANDLER,
29484 : ZEND_NULL_HANDLER,
29485 : ZEND_NULL_HANDLER,
29486 : ZEND_NULL_HANDLER,
29487 : ZEND_NULL_HANDLER,
29488 : ZEND_NULL_HANDLER,
29489 : ZEND_NULL_HANDLER,
29490 : ZEND_NULL_HANDLER,
29491 : ZEND_NULL_HANDLER,
29492 : ZEND_NULL_HANDLER,
29493 : ZEND_NULL_HANDLER,
29494 : ZEND_NULL_HANDLER,
29495 : ZEND_NULL_HANDLER,
29496 : ZEND_NULL_HANDLER,
29497 : ZEND_NULL_HANDLER,
29498 : ZEND_NULL_HANDLER,
29499 : ZEND_NULL_HANDLER,
29500 : ZEND_NULL_HANDLER,
29501 : ZEND_NULL_HANDLER,
29502 : ZEND_NULL_HANDLER,
29503 : ZEND_NULL_HANDLER,
29504 : ZEND_NULL_HANDLER,
29505 : ZEND_NULL_HANDLER,
29506 : ZEND_NULL_HANDLER,
29507 : ZEND_NULL_HANDLER,
29508 : ZEND_NULL_HANDLER,
29509 : ZEND_NULL_HANDLER,
29510 : ZEND_NULL_HANDLER,
29511 : ZEND_NULL_HANDLER,
29512 : ZEND_NULL_HANDLER,
29513 : ZEND_NULL_HANDLER,
29514 : ZEND_NULL_HANDLER,
29515 : ZEND_NULL_HANDLER,
29516 : ZEND_NULL_HANDLER,
29517 : ZEND_NULL_HANDLER,
29518 : ZEND_NULL_HANDLER,
29519 : ZEND_NULL_HANDLER,
29520 : ZEND_NULL_HANDLER,
29521 : ZEND_NULL_HANDLER,
29522 : ZEND_NULL_HANDLER,
29523 : ZEND_NULL_HANDLER,
29524 : ZEND_NULL_HANDLER,
29525 : ZEND_NULL_HANDLER,
29526 : ZEND_NULL_HANDLER,
29527 : ZEND_NULL_HANDLER,
29528 : ZEND_NULL_HANDLER,
29529 : ZEND_NULL_HANDLER,
29530 : ZEND_NULL_HANDLER,
29531 : ZEND_NULL_HANDLER,
29532 : ZEND_NULL_HANDLER,
29533 : ZEND_NULL_HANDLER,
29534 : ZEND_NULL_HANDLER,
29535 : ZEND_NULL_HANDLER,
29536 : ZEND_NULL_HANDLER,
29537 : ZEND_NULL_HANDLER,
29538 : ZEND_NULL_HANDLER,
29539 : ZEND_NULL_HANDLER,
29540 : ZEND_NULL_HANDLER,
29541 : ZEND_NULL_HANDLER,
29542 : ZEND_NULL_HANDLER,
29543 : ZEND_NULL_HANDLER,
29544 : ZEND_NULL_HANDLER,
29545 : ZEND_NULL_HANDLER,
29546 : ZEND_NULL_HANDLER,
29547 : ZEND_NULL_HANDLER,
29548 : ZEND_NULL_HANDLER,
29549 : ZEND_NULL_HANDLER,
29550 : ZEND_NULL_HANDLER,
29551 : ZEND_NULL_HANDLER,
29552 : ZEND_NULL_HANDLER,
29553 : ZEND_NULL_HANDLER,
29554 : ZEND_NULL_HANDLER,
29555 : ZEND_NULL_HANDLER,
29556 : ZEND_NULL_HANDLER,
29557 : ZEND_NULL_HANDLER,
29558 : ZEND_NULL_HANDLER,
29559 : ZEND_NULL_HANDLER,
29560 : ZEND_NULL_HANDLER,
29561 : ZEND_NULL_HANDLER,
29562 : ZEND_NULL_HANDLER,
29563 : ZEND_NULL_HANDLER,
29564 : ZEND_NULL_HANDLER,
29565 : ZEND_NULL_HANDLER,
29566 : ZEND_NULL_HANDLER,
29567 : ZEND_NULL_HANDLER,
29568 : ZEND_NULL_HANDLER,
29569 : ZEND_NULL_HANDLER,
29570 : ZEND_NULL_HANDLER,
29571 : ZEND_NULL_HANDLER,
29572 : ZEND_NULL_HANDLER,
29573 : ZEND_NULL_HANDLER,
29574 : ZEND_NULL_HANDLER,
29575 : ZEND_NULL_HANDLER,
29576 : ZEND_NULL_HANDLER,
29577 : ZEND_NULL_HANDLER,
29578 : ZEND_NULL_HANDLER,
29579 : ZEND_NULL_HANDLER,
29580 : ZEND_NULL_HANDLER,
29581 : ZEND_NULL_HANDLER,
29582 : ZEND_NULL_HANDLER,
29583 : ZEND_NULL_HANDLER,
29584 : ZEND_NULL_HANDLER,
29585 : ZEND_NULL_HANDLER,
29586 : ZEND_NULL_HANDLER,
29587 : ZEND_NULL_HANDLER,
29588 : ZEND_NULL_HANDLER,
29589 : ZEND_NULL_HANDLER,
29590 : ZEND_NULL_HANDLER,
29591 : ZEND_NULL_HANDLER,
29592 : ZEND_NULL_HANDLER,
29593 : ZEND_NULL_HANDLER,
29594 : ZEND_NULL_HANDLER,
29595 : ZEND_NULL_HANDLER,
29596 : ZEND_NULL_HANDLER,
29597 : ZEND_NULL_HANDLER,
29598 : ZEND_NULL_HANDLER,
29599 : ZEND_NULL_HANDLER,
29600 : ZEND_NULL_HANDLER,
29601 : ZEND_NULL_HANDLER,
29602 : ZEND_NULL_HANDLER,
29603 : ZEND_NULL_HANDLER,
29604 : ZEND_NULL_HANDLER,
29605 : ZEND_NULL_HANDLER,
29606 : ZEND_NULL_HANDLER,
29607 : ZEND_NULL_HANDLER,
29608 : ZEND_NULL_HANDLER,
29609 : ZEND_NULL_HANDLER,
29610 : ZEND_NULL_HANDLER,
29611 : ZEND_NULL_HANDLER,
29612 : ZEND_NULL_HANDLER,
29613 : ZEND_NULL_HANDLER,
29614 : ZEND_NULL_HANDLER,
29615 : ZEND_NULL_HANDLER,
29616 : ZEND_NULL_HANDLER,
29617 : ZEND_NULL_HANDLER,
29618 : ZEND_NULL_HANDLER,
29619 : ZEND_NULL_HANDLER,
29620 : ZEND_NULL_HANDLER,
29621 : ZEND_NULL_HANDLER,
29622 : ZEND_NULL_HANDLER,
29623 : ZEND_NULL_HANDLER,
29624 : ZEND_NULL_HANDLER,
29625 : ZEND_NULL_HANDLER,
29626 : ZEND_NULL_HANDLER,
29627 : ZEND_NULL_HANDLER,
29628 : ZEND_NULL_HANDLER,
29629 : ZEND_NULL_HANDLER,
29630 : ZEND_NULL_HANDLER,
29631 : ZEND_NULL_HANDLER,
29632 : ZEND_NULL_HANDLER,
29633 : ZEND_NULL_HANDLER,
29634 : ZEND_NULL_HANDLER,
29635 : ZEND_NULL_HANDLER,
29636 : ZEND_NULL_HANDLER,
29637 : ZEND_NULL_HANDLER,
29638 : ZEND_NULL_HANDLER,
29639 : ZEND_NULL_HANDLER,
29640 : ZEND_NULL_HANDLER,
29641 : ZEND_NULL_HANDLER,
29642 : ZEND_NULL_HANDLER,
29643 : ZEND_NULL_HANDLER,
29644 : ZEND_NULL_HANDLER,
29645 : ZEND_NULL_HANDLER,
29646 : ZEND_NULL_HANDLER,
29647 : ZEND_NULL_HANDLER,
29648 : ZEND_NULL_HANDLER,
29649 : ZEND_NULL_HANDLER,
29650 : ZEND_NULL_HANDLER,
29651 : ZEND_NULL_HANDLER,
29652 : ZEND_NULL_HANDLER,
29653 : ZEND_NULL_HANDLER,
29654 : ZEND_NULL_HANDLER,
29655 : ZEND_NULL_HANDLER,
29656 : ZEND_NULL_HANDLER,
29657 : ZEND_NULL_HANDLER,
29658 : ZEND_NULL_HANDLER,
29659 : ZEND_NULL_HANDLER,
29660 : ZEND_NULL_HANDLER,
29661 : ZEND_NULL_HANDLER,
29662 : ZEND_NULL_HANDLER,
29663 : ZEND_NULL_HANDLER,
29664 : ZEND_NULL_HANDLER,
29665 : ZEND_NULL_HANDLER,
29666 : ZEND_NULL_HANDLER,
29667 : ZEND_NULL_HANDLER,
29668 : ZEND_NULL_HANDLER,
29669 : ZEND_NULL_HANDLER,
29670 : ZEND_NULL_HANDLER,
29671 : ZEND_NULL_HANDLER,
29672 : ZEND_NULL_HANDLER,
29673 : ZEND_NULL_HANDLER,
29674 : ZEND_NULL_HANDLER,
29675 : ZEND_NULL_HANDLER,
29676 : ZEND_NULL_HANDLER,
29677 : ZEND_NULL_HANDLER,
29678 : ZEND_NULL_HANDLER,
29679 : ZEND_NULL_HANDLER,
29680 : ZEND_NULL_HANDLER,
29681 : ZEND_NULL_HANDLER,
29682 : ZEND_NULL_HANDLER,
29683 : ZEND_NULL_HANDLER,
29684 : ZEND_NULL_HANDLER,
29685 : ZEND_NULL_HANDLER,
29686 : ZEND_NULL_HANDLER,
29687 : ZEND_NULL_HANDLER,
29688 : ZEND_NULL_HANDLER,
29689 : ZEND_NULL_HANDLER,
29690 : ZEND_NULL_HANDLER,
29691 : ZEND_NULL_HANDLER,
29692 : ZEND_NULL_HANDLER,
29693 : ZEND_NULL_HANDLER,
29694 : ZEND_NULL_HANDLER,
29695 : ZEND_NULL_HANDLER,
29696 : ZEND_NULL_HANDLER,
29697 : ZEND_NULL_HANDLER,
29698 : ZEND_NULL_HANDLER,
29699 : ZEND_NULL_HANDLER,
29700 : ZEND_NULL_HANDLER,
29701 : ZEND_NULL_HANDLER,
29702 : ZEND_NULL_HANDLER,
29703 : ZEND_NULL_HANDLER,
29704 : ZEND_NULL_HANDLER,
29705 : ZEND_NULL_HANDLER,
29706 : ZEND_NULL_HANDLER,
29707 : ZEND_NULL_HANDLER,
29708 : ZEND_NULL_HANDLER,
29709 : ZEND_NULL_HANDLER,
29710 : ZEND_NULL_HANDLER,
29711 : ZEND_NULL_HANDLER,
29712 : ZEND_NULL_HANDLER,
29713 : ZEND_NULL_HANDLER,
29714 : ZEND_NULL_HANDLER,
29715 : ZEND_NULL_HANDLER,
29716 : ZEND_NULL_HANDLER,
29717 : ZEND_NULL_HANDLER,
29718 : ZEND_NULL_HANDLER,
29719 : ZEND_NULL_HANDLER,
29720 : ZEND_NULL_HANDLER,
29721 : ZEND_NULL_HANDLER,
29722 : ZEND_NULL_HANDLER,
29723 : ZEND_NULL_HANDLER,
29724 : ZEND_NULL_HANDLER,
29725 : ZEND_NULL_HANDLER,
29726 : ZEND_NULL_HANDLER,
29727 : ZEND_NULL_HANDLER,
29728 : ZEND_NULL_HANDLER,
29729 : ZEND_NULL_HANDLER,
29730 : ZEND_NULL_HANDLER,
29731 : ZEND_NULL_HANDLER,
29732 : ZEND_NULL_HANDLER,
29733 : ZEND_NULL_HANDLER,
29734 : ZEND_NULL_HANDLER,
29735 : ZEND_NULL_HANDLER,
29736 : ZEND_NULL_HANDLER,
29737 : ZEND_NULL_HANDLER,
29738 : ZEND_NULL_HANDLER,
29739 : ZEND_NULL_HANDLER,
29740 : ZEND_NULL_HANDLER,
29741 : ZEND_NULL_HANDLER,
29742 : ZEND_NULL_HANDLER,
29743 : ZEND_NULL_HANDLER,
29744 : ZEND_NULL_HANDLER,
29745 : ZEND_NULL_HANDLER,
29746 : ZEND_NULL_HANDLER,
29747 : ZEND_NULL_HANDLER,
29748 : ZEND_NULL_HANDLER,
29749 : ZEND_NULL_HANDLER,
29750 : ZEND_NULL_HANDLER,
29751 : ZEND_NULL_HANDLER,
29752 : ZEND_NULL_HANDLER,
29753 : ZEND_NULL_HANDLER,
29754 : ZEND_NULL_HANDLER,
29755 : ZEND_NULL_HANDLER,
29756 : ZEND_NULL_HANDLER,
29757 : ZEND_NULL_HANDLER,
29758 : ZEND_NULL_HANDLER,
29759 : ZEND_NULL_HANDLER,
29760 : ZEND_NULL_HANDLER,
29761 : ZEND_NULL_HANDLER,
29762 : ZEND_NULL_HANDLER,
29763 : ZEND_NULL_HANDLER,
29764 : ZEND_NULL_HANDLER,
29765 : ZEND_NULL_HANDLER,
29766 : ZEND_NULL_HANDLER,
29767 : ZEND_NULL_HANDLER,
29768 : ZEND_NULL_HANDLER,
29769 : ZEND_NULL_HANDLER,
29770 : ZEND_NULL_HANDLER,
29771 : ZEND_NULL_HANDLER,
29772 : ZEND_NULL_HANDLER,
29773 : ZEND_NULL_HANDLER,
29774 : ZEND_NULL_HANDLER,
29775 : ZEND_NULL_HANDLER,
29776 : ZEND_NULL_HANDLER,
29777 : ZEND_NULL_HANDLER,
29778 : ZEND_NULL_HANDLER,
29779 : ZEND_NULL_HANDLER,
29780 : ZEND_NULL_HANDLER,
29781 : ZEND_NULL_HANDLER,
29782 : ZEND_NULL_HANDLER,
29783 : ZEND_NULL_HANDLER,
29784 : ZEND_NULL_HANDLER,
29785 : ZEND_NULL_HANDLER,
29786 : ZEND_NULL_HANDLER,
29787 : ZEND_NULL_HANDLER,
29788 : ZEND_NULL_HANDLER,
29789 : ZEND_NULL_HANDLER,
29790 : ZEND_NULL_HANDLER,
29791 : ZEND_NULL_HANDLER,
29792 : ZEND_NULL_HANDLER,
29793 : ZEND_NULL_HANDLER,
29794 : ZEND_NULL_HANDLER,
29795 : ZEND_NULL_HANDLER,
29796 : ZEND_NULL_HANDLER,
29797 : ZEND_NULL_HANDLER,
29798 : ZEND_NULL_HANDLER,
29799 : ZEND_NULL_HANDLER,
29800 : ZEND_NULL_HANDLER,
29801 : ZEND_NULL_HANDLER,
29802 : ZEND_NULL_HANDLER,
29803 : ZEND_NULL_HANDLER,
29804 : ZEND_NULL_HANDLER,
29805 : ZEND_NULL_HANDLER,
29806 : ZEND_NULL_HANDLER,
29807 : ZEND_NULL_HANDLER,
29808 : ZEND_NULL_HANDLER,
29809 : ZEND_NULL_HANDLER,
29810 : ZEND_NULL_HANDLER,
29811 : ZEND_NULL_HANDLER,
29812 : ZEND_NULL_HANDLER,
29813 : ZEND_NULL_HANDLER,
29814 : ZEND_NULL_HANDLER,
29815 : ZEND_NULL_HANDLER,
29816 : ZEND_NULL_HANDLER,
29817 : ZEND_NULL_HANDLER,
29818 : ZEND_NULL_HANDLER,
29819 : ZEND_NULL_HANDLER,
29820 : ZEND_NULL_HANDLER,
29821 : ZEND_NULL_HANDLER,
29822 : ZEND_NULL_HANDLER,
29823 : ZEND_NULL_HANDLER,
29824 : ZEND_NULL_HANDLER,
29825 : ZEND_NULL_HANDLER,
29826 : ZEND_NULL_HANDLER,
29827 : ZEND_NULL_HANDLER,
29828 : ZEND_NULL_HANDLER,
29829 : ZEND_NULL_HANDLER,
29830 : ZEND_NULL_HANDLER,
29831 : ZEND_NULL_HANDLER,
29832 : ZEND_NULL_HANDLER,
29833 : ZEND_NULL_HANDLER,
29834 : ZEND_NULL_HANDLER,
29835 : ZEND_NULL_HANDLER,
29836 : ZEND_NULL_HANDLER,
29837 : ZEND_NULL_HANDLER,
29838 : ZEND_NULL_HANDLER,
29839 : ZEND_NULL_HANDLER,
29840 : ZEND_NULL_HANDLER,
29841 : ZEND_NULL_HANDLER,
29842 : ZEND_NULL_HANDLER,
29843 : ZEND_NULL_HANDLER,
29844 : ZEND_NULL_HANDLER,
29845 : ZEND_NULL_HANDLER,
29846 : ZEND_NULL_HANDLER,
29847 : ZEND_NULL_HANDLER,
29848 : ZEND_NULL_HANDLER,
29849 : ZEND_NULL_HANDLER,
29850 : ZEND_NULL_HANDLER,
29851 : ZEND_NULL_HANDLER,
29852 : ZEND_NULL_HANDLER,
29853 : ZEND_NULL_HANDLER,
29854 : ZEND_NULL_HANDLER,
29855 : ZEND_NULL_HANDLER,
29856 : ZEND_NULL_HANDLER,
29857 : ZEND_NULL_HANDLER,
29858 : ZEND_NULL_HANDLER,
29859 : ZEND_NULL_HANDLER,
29860 : ZEND_NULL_HANDLER,
29861 : ZEND_NULL_HANDLER,
29862 : ZEND_NULL_HANDLER,
29863 : ZEND_NULL_HANDLER,
29864 : ZEND_NULL_HANDLER,
29865 : ZEND_NULL_HANDLER,
29866 : ZEND_NULL_HANDLER,
29867 : ZEND_NULL_HANDLER,
29868 : ZEND_NULL_HANDLER,
29869 : ZEND_NULL_HANDLER,
29870 : ZEND_NULL_HANDLER,
29871 : ZEND_NULL_HANDLER,
29872 : ZEND_NULL_HANDLER,
29873 : ZEND_NULL_HANDLER,
29874 : ZEND_NULL_HANDLER,
29875 : ZEND_NULL_HANDLER,
29876 : ZEND_NULL_HANDLER,
29877 : ZEND_NULL_HANDLER,
29878 : ZEND_NULL_HANDLER,
29879 : ZEND_NULL_HANDLER,
29880 : ZEND_NULL_HANDLER,
29881 : ZEND_NULL_HANDLER,
29882 : ZEND_NULL_HANDLER,
29883 : ZEND_NULL_HANDLER,
29884 : ZEND_NULL_HANDLER,
29885 : ZEND_NULL_HANDLER,
29886 : ZEND_NULL_HANDLER,
29887 : ZEND_NULL_HANDLER,
29888 : ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER,
29889 : ZEND_PRE_INC_OBJ_SPEC_VAR_TMP_HANDLER,
29890 : ZEND_PRE_INC_OBJ_SPEC_VAR_VAR_HANDLER,
29891 : ZEND_NULL_HANDLER,
29892 : ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER,
29893 : ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
29894 : ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMP_HANDLER,
29895 : ZEND_PRE_INC_OBJ_SPEC_UNUSED_VAR_HANDLER,
29896 : ZEND_NULL_HANDLER,
29897 : ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
29898 : ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER,
29899 : ZEND_PRE_INC_OBJ_SPEC_CV_TMP_HANDLER,
29900 : ZEND_PRE_INC_OBJ_SPEC_CV_VAR_HANDLER,
29901 : ZEND_NULL_HANDLER,
29902 : ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER,
29903 : ZEND_NULL_HANDLER,
29904 : ZEND_NULL_HANDLER,
29905 : ZEND_NULL_HANDLER,
29906 : ZEND_NULL_HANDLER,
29907 : ZEND_NULL_HANDLER,
29908 : ZEND_NULL_HANDLER,
29909 : ZEND_NULL_HANDLER,
29910 : ZEND_NULL_HANDLER,
29911 : ZEND_NULL_HANDLER,
29912 : ZEND_NULL_HANDLER,
29913 : ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
29914 : ZEND_PRE_DEC_OBJ_SPEC_VAR_TMP_HANDLER,
29915 : ZEND_PRE_DEC_OBJ_SPEC_VAR_VAR_HANDLER,
29916 : ZEND_NULL_HANDLER,
29917 : ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER,
29918 : ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
29919 : ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER,
29920 : ZEND_PRE_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER,
29921 : ZEND_NULL_HANDLER,
29922 : ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
29923 : ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER,
29924 : ZEND_PRE_DEC_OBJ_SPEC_CV_TMP_HANDLER,
29925 : ZEND_PRE_DEC_OBJ_SPEC_CV_VAR_HANDLER,
29926 : ZEND_NULL_HANDLER,
29927 : ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER,
29928 : ZEND_NULL_HANDLER,
29929 : ZEND_NULL_HANDLER,
29930 : ZEND_NULL_HANDLER,
29931 : ZEND_NULL_HANDLER,
29932 : ZEND_NULL_HANDLER,
29933 : ZEND_NULL_HANDLER,
29934 : ZEND_NULL_HANDLER,
29935 : ZEND_NULL_HANDLER,
29936 : ZEND_NULL_HANDLER,
29937 : ZEND_NULL_HANDLER,
29938 : ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER,
29939 : ZEND_POST_INC_OBJ_SPEC_VAR_TMP_HANDLER,
29940 : ZEND_POST_INC_OBJ_SPEC_VAR_VAR_HANDLER,
29941 : ZEND_NULL_HANDLER,
29942 : ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER,
29943 : ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER,
29944 : ZEND_POST_INC_OBJ_SPEC_UNUSED_TMP_HANDLER,
29945 : ZEND_POST_INC_OBJ_SPEC_UNUSED_VAR_HANDLER,
29946 : ZEND_NULL_HANDLER,
29947 : ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER,
29948 : ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER,
29949 : ZEND_POST_INC_OBJ_SPEC_CV_TMP_HANDLER,
29950 : ZEND_POST_INC_OBJ_SPEC_CV_VAR_HANDLER,
29951 : ZEND_NULL_HANDLER,
29952 : ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER,
29953 : ZEND_NULL_HANDLER,
29954 : ZEND_NULL_HANDLER,
29955 : ZEND_NULL_HANDLER,
29956 : ZEND_NULL_HANDLER,
29957 : ZEND_NULL_HANDLER,
29958 : ZEND_NULL_HANDLER,
29959 : ZEND_NULL_HANDLER,
29960 : ZEND_NULL_HANDLER,
29961 : ZEND_NULL_HANDLER,
29962 : ZEND_NULL_HANDLER,
29963 : ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER,
29964 : ZEND_POST_DEC_OBJ_SPEC_VAR_TMP_HANDLER,
29965 : ZEND_POST_DEC_OBJ_SPEC_VAR_VAR_HANDLER,
29966 : ZEND_NULL_HANDLER,
29967 : ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER,
29968 : ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER,
29969 : ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMP_HANDLER,
29970 : ZEND_POST_DEC_OBJ_SPEC_UNUSED_VAR_HANDLER,
29971 : ZEND_NULL_HANDLER,
29972 : ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER,
29973 : ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER,
29974 : ZEND_POST_DEC_OBJ_SPEC_CV_TMP_HANDLER,
29975 : ZEND_POST_DEC_OBJ_SPEC_CV_VAR_HANDLER,
29976 : ZEND_NULL_HANDLER,
29977 : ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER,
29978 : ZEND_NULL_HANDLER,
29979 : ZEND_NULL_HANDLER,
29980 : ZEND_NULL_HANDLER,
29981 : ZEND_NULL_HANDLER,
29982 : ZEND_NULL_HANDLER,
29983 : ZEND_NULL_HANDLER,
29984 : ZEND_NULL_HANDLER,
29985 : ZEND_NULL_HANDLER,
29986 : ZEND_NULL_HANDLER,
29987 : ZEND_NULL_HANDLER,
29988 : ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_HANDLER,
29989 : ZEND_ASSIGN_OBJ_SPEC_VAR_TMP_HANDLER,
29990 : ZEND_ASSIGN_OBJ_SPEC_VAR_VAR_HANDLER,
29991 : ZEND_NULL_HANDLER,
29992 : ZEND_ASSIGN_OBJ_SPEC_VAR_CV_HANDLER,
29993 : ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_HANDLER,
29994 : ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMP_HANDLER,
29995 : ZEND_ASSIGN_OBJ_SPEC_UNUSED_VAR_HANDLER,
29996 : ZEND_NULL_HANDLER,
29997 : ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_HANDLER,
29998 : ZEND_ASSIGN_OBJ_SPEC_CV_CONST_HANDLER,
29999 : ZEND_ASSIGN_OBJ_SPEC_CV_TMP_HANDLER,
30000 : ZEND_ASSIGN_OBJ_SPEC_CV_VAR_HANDLER,
30001 : ZEND_NULL_HANDLER,
30002 : ZEND_ASSIGN_OBJ_SPEC_CV_CV_HANDLER,
30003 : ZEND_NULL_HANDLER,
30004 : ZEND_NULL_HANDLER,
30005 : ZEND_NULL_HANDLER,
30006 : ZEND_NULL_HANDLER,
30007 : ZEND_NULL_HANDLER,
30008 : ZEND_NULL_HANDLER,
30009 : ZEND_NULL_HANDLER,
30010 : ZEND_NULL_HANDLER,
30011 : ZEND_NULL_HANDLER,
30012 : ZEND_NULL_HANDLER,
30013 : ZEND_NULL_HANDLER,
30014 : ZEND_NULL_HANDLER,
30015 : ZEND_NULL_HANDLER,
30016 : ZEND_NULL_HANDLER,
30017 : ZEND_NULL_HANDLER,
30018 : ZEND_NULL_HANDLER,
30019 : ZEND_NULL_HANDLER,
30020 : ZEND_NULL_HANDLER,
30021 : ZEND_NULL_HANDLER,
30022 : ZEND_NULL_HANDLER,
30023 : ZEND_NULL_HANDLER,
30024 : ZEND_NULL_HANDLER,
30025 : ZEND_NULL_HANDLER,
30026 : ZEND_NULL_HANDLER,
30027 : ZEND_NULL_HANDLER,
30028 : ZEND_NULL_HANDLER,
30029 : ZEND_NULL_HANDLER,
30030 : ZEND_NULL_HANDLER,
30031 : ZEND_NULL_HANDLER,
30032 : ZEND_NULL_HANDLER,
30033 : ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
30034 : ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
30035 : ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
30036 : ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
30037 : ZEND_INSTANCEOF_SPEC_TMP_HANDLER,
30038 : ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
30039 : ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
30040 : ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
30041 : ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
30042 : ZEND_INSTANCEOF_SPEC_VAR_HANDLER,
30043 : ZEND_NULL_HANDLER,
30044 : ZEND_NULL_HANDLER,
30045 : ZEND_NULL_HANDLER,
30046 : ZEND_NULL_HANDLER,
30047 : ZEND_NULL_HANDLER,
30048 : ZEND_INSTANCEOF_SPEC_CV_HANDLER,
30049 : ZEND_INSTANCEOF_SPEC_CV_HANDLER,
30050 : ZEND_INSTANCEOF_SPEC_CV_HANDLER,
30051 : ZEND_INSTANCEOF_SPEC_CV_HANDLER,
30052 : ZEND_INSTANCEOF_SPEC_CV_HANDLER,
30053 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30054 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30055 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30056 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30057 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30058 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30059 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30060 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30061 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30062 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30063 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30064 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30065 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30066 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30067 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30068 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30069 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30070 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30071 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30072 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30073 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30074 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30075 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30076 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30077 : ZEND_DECLARE_CLASS_SPEC_HANDLER,
30078 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30079 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30080 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30081 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30082 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30083 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30084 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30085 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30086 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30087 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30088 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30089 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30090 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30091 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30092 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30093 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30094 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30095 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30096 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30097 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30098 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30099 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30100 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30101 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30102 : ZEND_DECLARE_INHERITED_CLASS_SPEC_HANDLER,
30103 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30104 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30105 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30106 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30107 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30108 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30109 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30110 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30111 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30112 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30113 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30114 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30115 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30116 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30117 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30118 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30119 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30120 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30121 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30122 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30123 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30124 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30125 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30126 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30127 : ZEND_DECLARE_FUNCTION_SPEC_HANDLER,
30128 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30129 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30130 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30131 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30132 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30133 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30134 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30135 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30136 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30137 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30138 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30139 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30140 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30141 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30142 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30143 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30144 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30145 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30146 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30147 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30148 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30149 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30150 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30151 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30152 : ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER,
30153 : ZEND_NULL_HANDLER,
30154 : ZEND_NULL_HANDLER,
30155 : ZEND_NULL_HANDLER,
30156 : ZEND_NULL_HANDLER,
30157 : ZEND_NULL_HANDLER,
30158 : ZEND_NULL_HANDLER,
30159 : ZEND_NULL_HANDLER,
30160 : ZEND_NULL_HANDLER,
30161 : ZEND_NULL_HANDLER,
30162 : ZEND_NULL_HANDLER,
30163 : ZEND_NULL_HANDLER,
30164 : ZEND_NULL_HANDLER,
30165 : ZEND_NULL_HANDLER,
30166 : ZEND_NULL_HANDLER,
30167 : ZEND_NULL_HANDLER,
30168 : ZEND_NULL_HANDLER,
30169 : ZEND_NULL_HANDLER,
30170 : ZEND_NULL_HANDLER,
30171 : ZEND_NULL_HANDLER,
30172 : ZEND_NULL_HANDLER,
30173 : ZEND_NULL_HANDLER,
30174 : ZEND_NULL_HANDLER,
30175 : ZEND_NULL_HANDLER,
30176 : ZEND_NULL_HANDLER,
30177 : ZEND_NULL_HANDLER,
30178 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30179 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30180 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30181 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30182 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30183 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30184 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30185 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30186 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30187 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30188 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30189 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30190 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30191 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30192 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30193 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30194 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30195 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30196 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30197 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30198 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30199 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30200 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30201 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30202 : ZEND_ADD_INTERFACE_SPEC_HANDLER,
30203 : ZEND_NULL_HANDLER,
30204 : ZEND_NULL_HANDLER,
30205 : ZEND_NULL_HANDLER,
30206 : ZEND_NULL_HANDLER,
30207 : ZEND_NULL_HANDLER,
30208 : ZEND_NULL_HANDLER,
30209 : ZEND_NULL_HANDLER,
30210 : ZEND_NULL_HANDLER,
30211 : ZEND_NULL_HANDLER,
30212 : ZEND_NULL_HANDLER,
30213 : ZEND_NULL_HANDLER,
30214 : ZEND_NULL_HANDLER,
30215 : ZEND_NULL_HANDLER,
30216 : ZEND_NULL_HANDLER,
30217 : ZEND_NULL_HANDLER,
30218 : ZEND_NULL_HANDLER,
30219 : ZEND_NULL_HANDLER,
30220 : ZEND_NULL_HANDLER,
30221 : ZEND_NULL_HANDLER,
30222 : ZEND_NULL_HANDLER,
30223 : ZEND_NULL_HANDLER,
30224 : ZEND_NULL_HANDLER,
30225 : ZEND_NULL_HANDLER,
30226 : ZEND_NULL_HANDLER,
30227 : ZEND_NULL_HANDLER,
30228 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30229 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30230 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30231 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30232 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30233 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30234 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30235 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30236 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30237 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30238 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30239 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30240 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30241 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30242 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30243 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30244 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30245 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30246 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30247 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30248 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30249 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30250 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30251 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30252 : ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER,
30253 : ZEND_NULL_HANDLER,
30254 : ZEND_NULL_HANDLER,
30255 : ZEND_NULL_HANDLER,
30256 : ZEND_NULL_HANDLER,
30257 : ZEND_NULL_HANDLER,
30258 : ZEND_NULL_HANDLER,
30259 : ZEND_NULL_HANDLER,
30260 : ZEND_NULL_HANDLER,
30261 : ZEND_NULL_HANDLER,
30262 : ZEND_NULL_HANDLER,
30263 : ZEND_ASSIGN_DIM_SPEC_VAR_CONST_HANDLER,
30264 : ZEND_ASSIGN_DIM_SPEC_VAR_TMP_HANDLER,
30265 : ZEND_ASSIGN_DIM_SPEC_VAR_VAR_HANDLER,
30266 : ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_HANDLER,
30267 : ZEND_ASSIGN_DIM_SPEC_VAR_CV_HANDLER,
30268 : ZEND_NULL_HANDLER,
30269 : ZEND_NULL_HANDLER,
30270 : ZEND_NULL_HANDLER,
30271 : ZEND_NULL_HANDLER,
30272 : ZEND_NULL_HANDLER,
30273 : ZEND_ASSIGN_DIM_SPEC_CV_CONST_HANDLER,
30274 : ZEND_ASSIGN_DIM_SPEC_CV_TMP_HANDLER,
30275 : ZEND_ASSIGN_DIM_SPEC_CV_VAR_HANDLER,
30276 : ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_HANDLER,
30277 : ZEND_ASSIGN_DIM_SPEC_CV_CV_HANDLER,
30278 : ZEND_NULL_HANDLER,
30279 : ZEND_NULL_HANDLER,
30280 : ZEND_NULL_HANDLER,
30281 : ZEND_NULL_HANDLER,
30282 : ZEND_NULL_HANDLER,
30283 : ZEND_NULL_HANDLER,
30284 : ZEND_NULL_HANDLER,
30285 : ZEND_NULL_HANDLER,
30286 : ZEND_NULL_HANDLER,
30287 : ZEND_NULL_HANDLER,
30288 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CONST_HANDLER,
30289 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_TMP_HANDLER,
30290 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_VAR_HANDLER,
30291 : ZEND_NULL_HANDLER,
30292 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_VAR_CV_HANDLER,
30293 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER,
30294 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMP_HANDLER,
30295 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_VAR_HANDLER,
30296 : ZEND_NULL_HANDLER,
30297 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER,
30298 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER,
30299 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMP_HANDLER,
30300 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_VAR_HANDLER,
30301 : ZEND_NULL_HANDLER,
30302 : ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER,
30303 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30304 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30305 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30306 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30307 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30308 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30309 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30310 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30311 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30312 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30313 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30314 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30315 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30316 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30317 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30318 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30319 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30320 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30321 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30322 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30323 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30324 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30325 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30326 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30327 : ZEND_HANDLE_EXCEPTION_SPEC_HANDLER,
30328 : ZEND_USER_OPCODE_SPEC_HANDLER,
30329 : ZEND_USER_OPCODE_SPEC_HANDLER,
30330 : ZEND_USER_OPCODE_SPEC_HANDLER,
30331 : ZEND_USER_OPCODE_SPEC_HANDLER,
30332 : ZEND_USER_OPCODE_SPEC_HANDLER,
30333 : ZEND_USER_OPCODE_SPEC_HANDLER,
30334 : ZEND_USER_OPCODE_SPEC_HANDLER,
30335 : ZEND_USER_OPCODE_SPEC_HANDLER,
30336 : ZEND_USER_OPCODE_SPEC_HANDLER,
30337 : ZEND_USER_OPCODE_SPEC_HANDLER,
30338 : ZEND_USER_OPCODE_SPEC_HANDLER,
30339 : ZEND_USER_OPCODE_SPEC_HANDLER,
30340 : ZEND_USER_OPCODE_SPEC_HANDLER,
30341 : ZEND_USER_OPCODE_SPEC_HANDLER,
30342 : ZEND_USER_OPCODE_SPEC_HANDLER,
30343 : ZEND_USER_OPCODE_SPEC_HANDLER,
30344 : ZEND_USER_OPCODE_SPEC_HANDLER,
30345 : ZEND_USER_OPCODE_SPEC_HANDLER,
30346 : ZEND_USER_OPCODE_SPEC_HANDLER,
30347 : ZEND_USER_OPCODE_SPEC_HANDLER,
30348 : ZEND_USER_OPCODE_SPEC_HANDLER,
30349 : ZEND_USER_OPCODE_SPEC_HANDLER,
30350 : ZEND_USER_OPCODE_SPEC_HANDLER,
30351 : ZEND_USER_OPCODE_SPEC_HANDLER,
30352 : ZEND_USER_OPCODE_SPEC_HANDLER,
30353 : ZEND_NULL_HANDLER
30354 : };
30355 220 : zend_opcode_handlers = (opcode_handler_t*)labels;
30356 220 : }
30357 : static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op)
30358 25849 : {
30359 : static const int zend_vm_decode[] = {
30360 : _UNUSED_CODE, /* 0 */
30361 : _CONST_CODE, /* 1 = IS_CONST */
30362 : _TMP_CODE, /* 2 = IS_TMP_VAR */
30363 : _UNUSED_CODE, /* 3 */
30364 : _VAR_CODE, /* 4 = IS_VAR */
30365 : _UNUSED_CODE, /* 5 */
30366 : _UNUSED_CODE, /* 6 */
30367 : _UNUSED_CODE, /* 7 */
30368 : _UNUSED_CODE, /* 8 = IS_UNUSED */
30369 : _UNUSED_CODE, /* 9 */
30370 : _UNUSED_CODE, /* 10 */
30371 : _UNUSED_CODE, /* 11 */
30372 : _UNUSED_CODE, /* 12 */
30373 : _UNUSED_CODE, /* 13 */
30374 : _UNUSED_CODE, /* 14 */
30375 : _UNUSED_CODE, /* 15 */
30376 : _CV_CODE /* 16 = IS_CV */
30377 : };
30378 25849 : return zend_opcode_handlers[opcode * 25 + zend_vm_decode[op->op1.op_type] * 5 + zend_vm_decode[op->op2.op_type]];
30379 : }
30380 :
30381 : ZEND_API void zend_vm_set_opcode_handler(zend_op* op)
30382 25849 : {
30383 25849 : op->handler = zend_vm_get_opcode_handler(zend_user_opcodes[op->opcode], op);
30384 25849 : }
30385 :
30386 : ZEND_API int zend_do_fcall(ZEND_OPCODE_HANDLER_ARGS)
30387 0 : {
30388 0 : return zend_do_fcall_common_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
30389 : }
30390 :
|