tony2001 Tue Nov 13 16:52:14 2007 UTC
Added files: (Branch: PHP_5_3)
/ZendEngine2/tests access_modifiers_001.phpt
access_modifiers_002.phpt
access_modifiers_003.phpt
access_modifiers_004.phpt
access_modifiers_005.phpt
access_modifiers_006.phpt
access_modifiers_007.phpt
Modified files:
/ZendEngine2 zend_compile.c
Log:
MFH: disallow multiple access modifiers and 'abstract abstract' methods
(patch by Etienne Kneuss)
add tests
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.647.2.27.2.41.2.20&r2=1.647.2.27.2.41.2.21&diff_format=u
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.20
ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.21
--- ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.20 Mon Nov 12 17:52:15 2007
+++ ZendEngine2/zend_compile.c Tue Nov 13 16:52:13 2007
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_compile.c,v 1.647.2.27.2.41.2.20 2007/11/12 17:52:15 dmitry Exp $
*/
+/* $Id: zend_compile.c,v 1.647.2.27.2.41.2.21 2007/11/13 16:52:13 tony2001 Exp
$ */
#include <zend_language_parser.h>
#include "zend.h"
@@ -1057,10 +1057,21 @@
int zend_do_verify_access_types(znode *current_access_type, znode
*new_modifier)
{
if ((Z_LVAL(current_access_type->u.constant) & ZEND_ACC_PPP_MASK)
- && (Z_LVAL(new_modifier->u.constant) & ZEND_ACC_PPP_MASK)
- && ((Z_LVAL(current_access_type->u.constant) &
ZEND_ACC_PPP_MASK) != (Z_LVAL(new_modifier->u.constant) & ZEND_ACC_PPP_MASK))) {
+ && (Z_LVAL(new_modifier->u.constant) & ZEND_ACC_PPP_MASK)) {
zend_error(E_COMPILE_ERROR, "Multiple access type modifiers are
not allowed");
}
+ if ((Z_LVAL(current_access_type->u.constant) & ZEND_ACC_ABSTRACT)
+ && (Z_LVAL(new_modifier->u.constant) & ZEND_ACC_ABSTRACT)) {
+ zend_error(E_COMPILE_ERROR, "Multiple abstract modifiers are
not allowed");
+ }
+ if ((Z_LVAL(current_access_type->u.constant) & ZEND_ACC_STATIC)
+ && (Z_LVAL(new_modifier->u.constant) & ZEND_ACC_STATIC)) {
+ zend_error(E_COMPILE_ERROR, "Multiple static modifiers are not
allowed");
+ }
+ if ((Z_LVAL(current_access_type->u.constant) & ZEND_ACC_FINAL)
+ && (Z_LVAL(new_modifier->u.constant) & ZEND_ACC_FINAL)) {
+ zend_error(E_COMPILE_ERROR, "Multiple final modifiers are not
allowed");
+ }
if (((Z_LVAL(current_access_type->u.constant) |
Z_LVAL(new_modifier->u.constant)) & (ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL)) ==
(ZEND_ACC_ABSTRACT | ZEND_ACC_FINAL)) {
zend_error(E_COMPILE_ERROR, "Cannot use the final modifier on
an abstract class member");
}
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/access_modifiers_001.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/access_modifiers_001.phpt
+++ ZendEngine2/tests/access_modifiers_001.phpt
--TEST--
using multiple access modifiers (methods)
--FILE--
<?php
class test {
static public public static final public final function foo() {
}
}
echo "Done\n";
?>
--EXPECTF--
Fatal error: Multiple access type modifiers are not allowed in %s on line %d
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/access_modifiers_002.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/access_modifiers_002.phpt
+++ ZendEngine2/tests/access_modifiers_002.phpt
--TEST--
using multiple access modifiers (attributes)
--FILE--
<?php
class test {
static public public static final public final $var;
}
echo "Done\n";
?>
--EXPECTF--
Fatal error: Multiple access type modifiers are not allowed in %s on line %d
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/access_modifiers_003.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/access_modifiers_003.phpt
+++ ZendEngine2/tests/access_modifiers_003.phpt
--TEST--
using multiple access modifiers (classes)
--FILE--
<?php
final final class test {
function foo() {}
}
echo "Done\n";
?>
--EXPECTF--
Parse error: syntax error, unexpected T_FINAL, expecting T_CLASS in %s on line
%d
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/access_modifiers_004.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/access_modifiers_004.phpt
+++ ZendEngine2/tests/access_modifiers_004.phpt
--TEST--
using multiple access modifiers (abstract methods)
--FILE--
<?php
class test {
abstract abstract function foo() {
}
}
echo "Done\n";
?>
--EXPECTF--
Fatal error: Multiple abstract modifiers are not allowed in %s on line %d
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/access_modifiers_005.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/access_modifiers_005.phpt
+++ ZendEngine2/tests/access_modifiers_005.phpt
--TEST--
using multiple access modifiers (final methods)
--FILE--
<?php
class test {
final final function foo() {
}
}
echo "Done\n";
?>
--EXPECTF--
Fatal error: Multiple final modifiers are not allowed in %s on line %d
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/access_modifiers_006.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/access_modifiers_006.phpt
+++ ZendEngine2/tests/access_modifiers_006.phpt
--TEST--
using multiple access modifiers (static methods)
--FILE--
<?php
class test {
static static function foo() {
}
}
echo "Done\n";
?>
--EXPECTF--
Fatal error: Multiple static modifiers are not allowed in %s on line %d
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/access_modifiers_007.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/access_modifiers_007.phpt
+++ ZendEngine2/tests/access_modifiers_007.phpt
--TEST--
abstract final methods errmsg
--FILE--
<?php
class test {
final abstract function foo();
}
echo "Done\n";
?>
--EXPECTF--
Fatal error: Cannot use the final modifier on an abstract class member in %s on
line %d
--
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
|