]> granicus.if.org Git - php/commitdiff
Fix FETCH_CLASS_SELF comparisons
authorNikita Popov <nikic@php.net>
Sat, 26 Mar 2016 21:43:58 +0000 (22:43 +0100)
committerNikita Popov <nikic@php.net>
Sat, 26 Mar 2016 21:45:23 +0000 (22:45 +0100)
Turns out those don't form a bitfield.

Zend/zend_compile.c
ext/opcache/Optimizer/optimize_func_calls.c

index 521cd08f36faca25a3afd678ac9ba3ddfacfcc68..64e0e0d1e3667194f1fb0526cd0b73e6d3bafef8 100644 (file)
@@ -3738,7 +3738,8 @@ void zend_compile_static_call(znode *result, zend_ast *ast, uint32_t type) /* {{
                                        && zend_string_equals_ci(CG(active_class_entry)->name, lcname)) {
                                ce = CG(active_class_entry);
                        }
-               } else if (opline->op1_type == IS_UNUSED && (opline->op1.num & ZEND_FETCH_CLASS_SELF)
+               } else if (opline->op1_type == IS_UNUSED
+                               && (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF
                                && zend_is_scope_known()) {
                        ce = CG(active_class_entry);
                }
index 22829ad20d1de71ae5591bebdf34fe17b2097347..5982df5f516ffd9b69be431e20af775c7c656e25 100644 (file)
@@ -77,7 +77,7 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
                                                zend_string *class_name = Z_STR_P(&ZEND_OP1_LITERAL(opline) + 1);
                                                ce = zend_hash_find_ptr(&ctx->script->class_table, class_name);
                                        } else if (opline->op1_type == IS_UNUSED && op_array->scope
-                                                       && (opline->op1.num & ZEND_FETCH_CLASS_SELF)) {
+                                                       && (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) {
                                                ce = op_array->scope;
                                        }
                                        if (ce) {