cvs: ZendEngine2 / zend_builtin_functions.c /tests bug47593.phpt
[email protected] ("Felipe Pena") Sun, 08 Mar 2009 17:23:44 -0000
| Newsgroups | php.zend-engine.cvs |
|---|---|
| Message-ID | <cvsfelipe1236533024@cvsserver> |
felipe Sun Mar 8 17:23:44 2009 UTC
Added files:
/ZendEngine2/tests bug47593.phpt
Modified files:
/ZendEngine2 zend_builtin_functions.c
Log:
- Fixed bug #47593 (interface_exists() returns false when using absolute namespace path)
Patch by Kalle.
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_builtin_functions.c?r1=1.399&r2=1.400&diff_format=u
Index: ZendEngine2/zend_builtin_functions.c
diff -u ZendEngine2/zend_builtin_functions.c:1.399 ZendEngine2/zend_builtin_functions.c:1.400
--- ZendEngine2/zend_builtin_functions.c:1.399 Thu Mar 5 13:45:32 2009
+++ ZendEngine2/zend_builtin_functions.c Sun Mar 8 17:23:43 2009
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_builtin_functions.c,v 1.399 2009/03/05 13:45:32 iliaa Exp $ */
+/* $Id: zend_builtin_functions.c,v 1.400 2009/03/08 17:23:43 felipe Exp $ */
#include "zend.h"
#include "zend_API.h"
@@ -1230,8 +1230,24 @@
}
if (!autoload) {
+ zstr name;
+ int len;
+
lc_name = zend_u_str_case_fold(type, iface_name, iface_name_len, 1, &lc_name_len);
- found = zend_u_hash_find(EG(class_table), type, lc_name, lc_name_len+1, (void **) &ce);
+
+ /* Ignore leading "\" */
+ name = lc_name;
+ len = iface_name_len;
+ if (lc_name.s[0] == '\\') {
+ if (type == IS_UNICODE) {
+ name.u = &lc_name.u[1];
+ } else {
+ name.s = &lc_name.s[1];
+ }
+ len--;
+ }
+
+ found = zend_u_hash_find(EG(class_table), type, name, len+1, (void **) &ce);
efree(lc_name.v);
RETURN_BOOL(found == SUCCESS && (*ce)->ce_flags & ZEND_ACC_INTERFACE);
}
@@ -1260,8 +1276,19 @@
}
lcname = zend_u_str_case_fold(function_name_type, function_name, function_name_len, 1, &lcname_len);
+
+ function_name = lcname;
+ if (function_name.s[0] == '\\') {
+ if (function_name_type == IS_UNICODE) {
+ function_name.u = &lcname.u[1];
+ } else {
+ function_name.s = &lcname.s[1];
+ }
+ function_name_len--;
+ }
+
- retval = (zend_u_hash_find(EG(function_table), function_name_type, lcname, lcname_len+1, (void **)&func) == SUCCESS);
+ retval = (zend_u_hash_find(EG(function_table), function_name_type, function_name, function_name_len+1, (void **)&func) == SUCCESS);
efree(lcname.v);
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug47593.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/bug47593.phpt
+++ ZendEngine2/tests/bug47593.phpt
--TEST--
Bug #47593 (interface_exists() returns false when using absolute namespace path)
--FILE--
<?php
namespace test;
const TEST = 11;
class foo {
public function xyz() {
}
}
interface baz {
}
function bar() {
}
var_dump(interface_exists('\test\baz'));
var_dump(function_exists('\test\bar'));
var_dump(constant('\test\TEST'));
var_dump(defined('\test\TEST'));
var_dump(defined('TEST'));
?>
--EXPECT--
bool(true)
bool(true)
int(11)
bool(true)
bool(false)