MFH: Fix #46813 (class_exists doesn`t work with fully qualified namespace)

This commit is contained in:
Johannes Schlüter 2008-12-09 19:17:11 +00:00
parent a8578a5ab1
commit d828b8acc0
2 changed files with 36 additions and 1 deletions

24
Zend/tests/bug46813.phpt Normal file
View File

@ -0,0 +1,24 @@
--TEST--
Bug #46813: class_exists doesn`t work with fully qualified namespace
--FILE--
<?php
namespace test;
{
class inner
{
}
}
$inner = new \test\inner();
echo "autoload == true:\n";
var_dump(class_exists('\test\inner', true));
echo "autoload == false:\n";
var_dump(class_exists('\test\inner', true));
?>
--EXPECT--
autoload == true:
bool(true)
autoload == false:
bool(true)

View File

@ -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));
}