summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2013-01-09 17:36:44 +0400
committerDmitry Stogov <dmitry@zend.com>2013-01-09 17:36:44 +0400
commit625000ab442dd4c1bfc6975a4a979f2c5f60a78d (patch)
treee5704937076cc2290eb21f7ed1f9ae03638b7632
parentf9e8678dd3a41ed8a100d8201153a41d6fd25f2e (diff)
parentd4650c5d69ffb49d476a2969c6200879bd424caf (diff)
downloadphp-git-625000ab442dd4c1bfc6975a4a979f2c5f60a78d.tar.gz
Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3: Fixed compilator bug that might cause jump depended on unitialized value
-rw-r--r--Zend/zend_compile.c3
-rw-r--r--Zend/zend_language_parser.y4
2 files changed, 4 insertions, 3 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index 9acdc5b35a..8f4f9c47b8 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -4795,6 +4795,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);
@@ -4931,7 +4932,7 @@ void zend_do_end_class_declaration(const znode *class_token, const znode *parent
}
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 && !(ce->ce_flags & ZEND_ACC_IMPLEMENT_TRAITS)) {
do_verify_abstract_class(TSRMLS_C);
diff --git a/Zend/zend_language_parser.y b/Zend/zend_language_parser.y
index b37822903b..1f5d73296f 100644
--- a/Zend/zend_language_parser.y
+++ b/Zend/zend_language_parser.y
@@ -375,13 +375,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); }
;