From: Johannes Schlüter Date: Tue, 9 Dec 2008 19:17:11 +0000 (+0000) Subject: MFH: Fix #46813 (class_exists doesn`t work with fully qualified namespace) X-Git-Tag: php-5.3.0beta1~468 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d828b8acc0403eed67bb73ea305581e319213555;p=php MFH: Fix #46813 (class_exists doesn`t work with fully qualified namespace) --- diff --git a/Zend/tests/bug46813.phpt b/Zend/tests/bug46813.phpt new file mode 100644 index 0000000000..91837db1ff --- /dev/null +++ b/Zend/tests/bug46813.phpt @@ -0,0 +1,24 @@ +--TEST-- +Bug #46813: class_exists doesn`t work with fully qualified namespace +--FILE-- + +--EXPECT-- +autoload == true: +bool(true) +autoload == false: +bool(true) diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 0a936ed7f4..3a35373f75 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -1157,10 +1157,21 @@ ZEND_FUNCTION(class_exists) } if (!autoload) { + char *name; + int len; + lc_name = do_alloca(class_name_len + 1, use_heap); zend_str_tolower_copy(lc_name, class_name, class_name_len); + + /* Ignore leading "\" */ + name = lc_name; + len = class_name_len; + if (lc_name[0] == '\\') { + name = &lc_name[1]; + len--; + } - found = zend_hash_find(EG(class_table), lc_name, class_name_len+1, (void **) &ce); + found = zend_hash_find(EG(class_table), name, len+1, (void **) &ce); free_alloca(lc_name, use_heap); RETURN_BOOL(found == SUCCESS && !((*ce)->ce_flags & ZEND_ACC_INTERFACE)); }