Commit:    d4650c5d69ffb49d476a2969c6200879bd424caf
Author:    Dmitry Stogov <dmi...@zend.com>         Wed, 9 Jan 2013 17:16:47 
+0400
Parents:   c05ee74e7ff28b49018bf3e8f452bfd5386d1b68
Branches:  PHP-5.3 PHP-5.4 PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=d4650c5d69ffb49d476a2969c6200879bd424caf

Log:
Fixed compilator bug that might cause jump depended on unitialized value

Changed paths:
  M  Zend/zend_compile.c
  M  Zend/zend_language_parser.y


Diff:
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index e395795..8382b48 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -3414,6 +3414,7 @@ void zend_do_begin_class_declaration(const znode 
*class_token, znode *class_name
                /* Prefix class name with name of current namespace */
                znode tmp;
 
+               tmp.op_type = IS_CONST;
                tmp.u.constant = *CG(current_namespace);
                zval_copy_ctor(&tmp.u.constant);
                zend_do_build_namespace_name(&tmp, &tmp, class_name TSRMLS_CC);
@@ -3529,7 +3530,7 @@ void zend_do_end_class_declaration(const znode 
*class_token, const znode *parent
        ce->line_end = zend_get_compiled_lineno(TSRMLS_C);
 
        if (!(ce->ce_flags & 
(ZEND_ACC_INTERFACE|ZEND_ACC_EXPLICIT_ABSTRACT_CLASS))
-               && ((parent_token->op_type != IS_UNUSED) || (ce->num_interfaces 
> 0))) {
+               && (parent_token || (ce->num_interfaces > 0))) {
                zend_verify_abstract_class(ce TSRMLS_CC);
                if (ce->num_interfaces) {
                        do_verify_abstract_class(TSRMLS_C);
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index 2533f60..d24fc9c 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -316,13 +316,13 @@ unticked_class_declaration_statement:
                        implements_list
                        '{'
                                class_statement_list
-                       '}' { zend_do_end_class_declaration(&$1, &$2 
TSRMLS_CC); }
+                       '}' { zend_do_end_class_declaration(&$1, &$3 
TSRMLS_CC); }
        |       interface_entry T_STRING
                        { zend_do_begin_class_declaration(&$1, &$2, NULL 
TSRMLS_CC); }
                        interface_extends_list
                        '{'
                                class_statement_list
-                       '}' { zend_do_end_class_declaration(&$1, &$2 
TSRMLS_CC); }
+                       '}' { zend_do_end_class_declaration(&$1, NULL 
TSRMLS_CC); }
 ;


--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to