summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-12-10 19:43:03 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-12-10 19:43:03 +0000
commite64cb1ae4d1be22d6844be9322fee4e7913b36b9 (patch)
tree79e0fc874f796fc372e248c2fdc9266330b958f7
parent6ccde868be6bfbcf9bbe667579b13bca6941b099 (diff)
downloadphp-git-e64cb1ae4d1be22d6844be9322fee4e7913b36b9.tar.gz
Optimize extract()
# Patch by Brian Shire
-rw-r--r--ext/standard/array.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/ext/standard/array.c b/ext/standard/array.c
index 128935e551..9aa3ccdac8 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1270,15 +1270,13 @@ PHP_FUNCTION(array_search)
/* }}} */
-static int php_valid_var_name(char *var_name)
+static int php_valid_var_name(char *var_name, int len)
{
- int len, i;
+ int i;
if (!var_name)
return 0;
- len = strlen(var_name);
-
if (!isalpha((int)((unsigned char *)var_name)[0]) && var_name[0] != '_')
return 0;
@@ -1409,7 +1407,7 @@ PHP_FUNCTION(extract)
case EXTR_PREFIX_INVALID:
if (final_name.len == 0) {
- if (!php_valid_var_name(var_name)) {
+ if (!php_valid_var_name(var_name, var_name_len)) {
smart_str_appendl(&final_name, Z_STRVAL_PP(prefix), Z_STRLEN_PP(prefix));
smart_str_appendc(&final_name, '_');
smart_str_appendl(&final_name, var_name, var_name_len);
@@ -1426,7 +1424,7 @@ PHP_FUNCTION(extract)
if (final_name.len) {
smart_str_0(&final_name);
- if (php_valid_var_name(final_name.c)) {
+ if (php_valid_var_name(final_name.c, final_name.len)) {
if (extract_refs) {
zval **orig_var;