stas Sun, 04 Apr 2010 23:28:20 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=297482
Log:
change namespaced ctors - only __construct would work
Changed paths:
U php/php-src/branches/PHP_5_3/NEWS
U php/php-src/branches/PHP_5_3/Zend/tests/ns_063.phpt
U php/php-src/branches/PHP_5_3/Zend/zend_compile.c
U php/php-src/trunk/Zend/tests/ns_063.phpt
U php/php-src/trunk/Zend/zend_compile.c
Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS 2010-04-04 22:10:06 UTC (rev 297481)
+++ php/php-src/branches/PHP_5_3/NEWS 2010-04-04 23:28:20 UTC (rev 297482)
@@ -8,6 +8,9 @@
mcrypt_filter). (Stas)
- Added full_special_chars filter to ext/filter (Rasmus)
+- Changed namespaced classes so that the ctor can only be named
+ __construct now. (Stas)
+
- Fixed a NULL pointer dereference when processing invalid XML-RPC
requests (Fixes CVE-2010-0397, bug #51288). (Raphael Geissert)
Modified: php/php-src/branches/PHP_5_3/Zend/tests/ns_063.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/Zend/tests/ns_063.phpt 2010-04-04 22:10:06 UTC
(rev 297481)
+++ php/php-src/branches/PHP_5_3/Zend/tests/ns_063.phpt 2010-04-04 23:28:20 UTC
(rev 297482)
@@ -1,5 +1,5 @@
--TEST--
-063: Support for old-style constructors in namesapces
+063: Old-style constructors in namesapces (not supported!)
--FILE--
<?php
namespace Foo;
@@ -9,5 +9,6 @@
}
}
new Bar();
+echo "ok\n";
--EXPECT--
ok
Modified: php/php-src/branches/PHP_5_3/Zend/zend_compile.c
===================================================================
--- php/php-src/branches/PHP_5_3/Zend/zend_compile.c 2010-04-04 22:10:06 UTC
(rev 297481)
+++ php/php-src/branches/PHP_5_3/Zend/zend_compile.c 2010-04-04 23:28:20 UTC
(rev 297482)
@@ -1270,22 +1270,13 @@
}
}
} else {
- char *short_class_name;
- int short_class_name_length;
- char *short_class_lcname;
-
- if ((short_class_name =
zend_memrchr(CG(active_class_entry)->name, '\\',
CG(active_class_entry)->name_length))) {
- short_class_name_length =
CG(active_class_entry)->name_length - (short_class_name -
CG(active_class_entry)->name) - 1;
- ++short_class_name;
- } else {
- short_class_name = CG(active_class_entry)->name;
- short_class_name_length =
CG(active_class_entry)->name_length;
- }
- short_class_lcname = do_alloca(short_class_name_length
+ 1, use_heap);
- zend_str_tolower_copy(short_class_lcname,
short_class_name, short_class_name_length);
+ char *class_lcname;
+
+ class_lcname =
do_alloca(CG(active_class_entry)->name_length + 1, use_heap);
+ zend_str_tolower_copy(class_lcname,
CG(active_class_entry)->name, CG(active_class_entry)->name_length);
/* Improve after RC: cache the lowercase class name */
- if ((short_class_name_length == name_len) &&
(!memcmp(short_class_lcname, lcname, name_len))) {
+ if ((CG(active_class_entry)->name_length == name_len)
&& (!memcmp(class_lcname, lcname, name_len))) {
if (CG(active_class_entry)->constructor) {
zend_error(E_STRICT, "Redefining
already defined constructor for class %s", CG(active_class_entry)->name);
} else {
@@ -1338,7 +1329,7 @@
} else if (!(fn_flags & ZEND_ACC_STATIC)) {
CG(active_op_array)->fn_flags |=
ZEND_ACC_ALLOW_STATIC;
}
- free_alloca(short_class_lcname, use_heap);
+ free_alloca(class_lcname, use_heap);
}
efree(lcname);
Modified: php/php-src/trunk/Zend/tests/ns_063.phpt
===================================================================
--- php/php-src/trunk/Zend/tests/ns_063.phpt 2010-04-04 22:10:06 UTC (rev
297481)
+++ php/php-src/trunk/Zend/tests/ns_063.phpt 2010-04-04 23:28:20 UTC (rev
297482)
@@ -1,5 +1,5 @@
--TEST--
-063: Support for old-style constructors in namesapces
+063: Old-style constructors in namesapces (not supported!)
--FILE--
<?php
namespace Foo;
@@ -9,5 +9,6 @@
}
}
new Bar();
+echo "ok\n";
--EXPECT--
ok
Modified: php/php-src/trunk/Zend/zend_compile.c
===================================================================
--- php/php-src/trunk/Zend/zend_compile.c 2010-04-04 22:10:06 UTC (rev
297481)
+++ php/php-src/trunk/Zend/zend_compile.c 2010-04-04 23:28:20 UTC (rev
297482)
@@ -1270,22 +1270,13 @@
}
}
} else {
- char *short_class_name;
- int short_class_name_length;
- char *short_class_lcname;
-
- if ((short_class_name =
zend_memrchr(CG(active_class_entry)->name, '\\',
CG(active_class_entry)->name_length))) {
- short_class_name_length =
CG(active_class_entry)->name_length - (short_class_name -
CG(active_class_entry)->name) - 1;
- ++short_class_name;
- } else {
- short_class_name = CG(active_class_entry)->name;
- short_class_name_length =
CG(active_class_entry)->name_length;
- }
- short_class_lcname = do_alloca(short_class_name_length
+ 1, use_heap);
- zend_str_tolower_copy(short_class_lcname,
short_class_name, short_class_name_length);
+ char *class_lcname;
+
+ class_lcname =
do_alloca(CG(active_class_entry)->name_length + 1, use_heap);
+ zend_str_tolower_copy(class_lcname,
CG(active_class_entry)->name, CG(active_class_entry)->name_length);
/* Improve after RC: cache the lowercase class name */
- if ((short_class_name_length == name_len) &&
(!memcmp(short_class_lcname, lcname, name_len))) {
+ if ((CG(active_class_entry)->name_length == name_len)
&& (!memcmp(class_lcname, lcname, name_len))) {
if (CG(active_class_entry)->constructor) {
zend_error(E_STRICT, "Redefining
already defined constructor for class %s", CG(active_class_entry)->name);
} else {
@@ -1338,7 +1329,7 @@
} else if (!(fn_flags & ZEND_ACC_STATIC)) {
CG(active_op_array)->fn_flags |=
ZEND_ACC_ALLOW_STATIC;
}
- free_alloca(short_class_lcname, use_heap);
+ free_alloca(class_lcname, use_heap);
}
efree(lcname);
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php