Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_compile.c

From: Date: Tue, 19 Dec 2006 05:35:02 +0000
Subject: Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_compile.c
Groups: php.zend-engine.cvs 
Request: Send a blank email to php-zend-engine-cvs+get-5479@lists.php.net to get a copy of this message
The primary reason I went this route rather than handling it in the parser (I did consider it), was so that a clearer error message could be given than "Unexpected T_STRING". If you'd rather, I'd be happy to move this fix over there... -Sara
Not sure this is the right fix. It probably makes more sense to fix the parser itself and use r_variable instead of expr for the instanceof rule. Did you try and have problems doing so? I just took a quick look so it might be a bit more involved than that.
-----Original Message----- From: Sara Golemon [mailto:pollita@php.net] Sent: Tuesday, December 12, 2006 3:25 PM To: zend-engine-cvs@lists.php.net Subject: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_compile.c pollita Tue Dec 12 23:25:23 2006 UTC
  Modified files:              (Branch: PHP_5_2)
    /ZendEngine2	zend_compile.c   Log:
MFH: Bugfix# 39435: 'foo' instanceof bar gives invalid opcode error http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.
647.2.27.2.21&r2=1.647.2.27.2.22&diff_format=u
Index: ZendEngine2/zend_compile.c diff -u ZendEngine2/zend_compile.c:1.647.2.27.2.21 ZendEngine2/zend_compile.c:1.647.2.27.2.22 --- ZendEngine2/zend_compile.c:1.647.2.27.2.21 Tue Dec 5 19:03:51 2006 +++ ZendEngine2/zend_compile.c Tue Dec 12 23:25:23 2006 @@ -17,7 +17,7 @@
    +-------------------------------------------------------------
---------+ */ -/* $Id: zend_compile.c,v 1.647.2.27.2.21 2006/12/05 19:03:51 dmitry Exp $ */ +/* $Id: zend_compile.c,v 1.647.2.27.2.22 2006/12/12 23:25:23 pollita +Exp $ */ #include <zend_language_parser.h> #include "zend.h" @@ -3627,6 +3627,10 @@ } } + if (expr->op_type == IS_CONST) { + zend_error(E_COMPILE_ERROR, "instanceof expects an object instance, constant given"); + } + opline = get_next_op(CG(active_op_array) TSRMLS_CC); opline->opcode = ZEND_INSTANCEOF; opline->result.op_type = IS_TMP_VAR;


« previous php.zend-engine.cvs (#5479) next »