diff options
| author | Ilia Alshanetsky <iliaa@php.net> | 2002-12-16 15:43:52 +0000 |
|---|---|---|
| committer | Ilia Alshanetsky <iliaa@php.net> | 2002-12-16 15:43:52 +0000 |
| commit | 5bad812dad24b9a6816ba77b42fc5e0aa82b7d74 (patch) | |
| tree | 32a659e0dfc80eb7d8dddb3769c3408006ad4252 | |
| parent | 2d3b3fd97fb5f47b209a0df99ed4dc1348aea3b6 (diff) | |
| download | php-git-5bad812dad24b9a6816ba77b42fc5e0aa82b7d74.tar.gz | |
A better, strtok() free implementaion of php_disable_functions().
| -rw-r--r-- | main/main.c | 39 |
1 files changed, 30 insertions, 9 deletions
diff --git a/main/main.c b/main/main.c index 0005dd3274..9980df420f 100644 --- a/main/main.c +++ b/main/main.c @@ -168,15 +168,36 @@ static PHP_INI_MH(OnChangeMemoryLimit) */ static void php_disable_functions(TSRMLS_D) { - char *func; - char *new_value_dup = strdup(INI_STR("disable_functions")); /* This is an intentional leak, - * it's not a big deal as it's process-wide - */ - - func = strtok(new_value_dup, ", "); - while (func) { - zend_disable_function(func, strlen(func) TSRMLS_CC); - func = strtok(NULL, ", "); + char *s = NULL; + char *e = INI_STR("disable_functions"); + char p; + + if (!*e) { + return; + } + + while (*e) { + switch (*e) { + case ' ': + case ',': + if (s) { + p = *e; + *e = '\0'; + zend_disable_function(s, e-s TSRMLS_CC); + *e = p; + s = NULL; + } + break; + default: + if (!s) { + s = e; + } + break; + } + e++; + } + if (s) { + zend_disable_function(s, e-s TSRMLS_CC); } } /* }}} */ |
