]> granicus.if.org Git - php/commitdiff
Fixed bug #43323 (Wrong count abstract methods). (Felipe, Dmitry)
authorDmitry Stogov <dmitry@php.net>
Tue, 29 Jan 2008 11:13:52 +0000 (11:13 +0000)
committerDmitry Stogov <dmitry@php.net>
Tue, 29 Jan 2008 11:13:52 +0000 (11:13 +0000)
Zend/tests/bug43323.phpt [new file with mode: 0644]
Zend/zend_execute_API.c

diff --git a/Zend/tests/bug43323.phpt b/Zend/tests/bug43323.phpt
new file mode 100644 (file)
index 0000000..d366a6d
--- /dev/null
@@ -0,0 +1,12 @@
+--TEST--
+Bug #43323 (Wrong count abstract methods)
+--FILE--
+<?php
+abstract class bar {
+    abstract public function bar();
+}
+
+class foo extends bar {
+}
+--EXPECTF--
+Fatal error: Class foo contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (bar::bar) in %sbug43323.php on line 7
index 412875165df09bf052cdd8347bd9dfa637fb8682..a4a2183d76354c72e7eb7f6b402d7761daae0855 100644 (file)
@@ -1877,6 +1877,7 @@ zend_class_entry *zend_fetch_class(char *class_name, uint class_name_len, int fe
 typedef struct _zend_abstract_info {
        zend_function *afn[MAX_ABSTRACT_INFO_CNT + 1];
        int cnt;
+       int ctor;
 } zend_abstract_info;
 
 static int zend_verify_abstract_class_function(zend_function *fn, zend_abstract_info *ai TSRMLS_DC) /* {{{ */
@@ -1885,7 +1886,16 @@ static int zend_verify_abstract_class_function(zend_function *fn, zend_abstract_
                if (ai->cnt < MAX_ABSTRACT_INFO_CNT) {
                        ai->afn[ai->cnt] = fn;
                }
-               ai->cnt++;
+               if (fn->common.fn_flags & ZEND_ACC_CTOR) {
+                       if (!ai->ctor) {
+                               ai->cnt++;
+                               ai->ctor = 1;
+                       } else {
+                               ai->afn[ai->cnt] = NULL;
+                       }
+               } else {
+                       ai->cnt++;
+               }
        }
        return 0;
 }