mirror of
https://github.com/php/php-src.git
synced 2025-08-15 13:38:49 +02:00
Add php_register_known_variable() for know var names
This commit is contained in:
parent
1d0c287b90
commit
55908db007
2 changed files with 34 additions and 0 deletions
|
@ -54,6 +54,39 @@ static zend_always_inline void php_register_variable_quick(const char *name, siz
|
|||
zend_string_release_ex(key, 0);
|
||||
}
|
||||
|
||||
PHPAPI void php_register_known_variable(const char *var_name, size_t var_name_len, zval *value, zval *track_vars_array)
|
||||
{
|
||||
HashTable *symbol_table = NULL;
|
||||
|
||||
ZEND_ASSERT(var_name != NULL);
|
||||
ZEND_ASSERT(var_name_len != 0);
|
||||
ZEND_ASSERT(track_vars_array != NULL && Z_TYPE_P(track_vars_array) == IS_ARRAY);
|
||||
|
||||
symbol_table = Z_ARRVAL_P(track_vars_array);
|
||||
|
||||
#if ZEND_DEBUG
|
||||
/* Verify the name is valid for a PHP variable */
|
||||
ZEND_ASSERT(!(var_name_len == strlen("GLOBALS") && !memcmp(var_name, "GLOBALS", strlen("GLOBALS"))));
|
||||
ZEND_ASSERT(!(var_name_len == strlen("this") && !memcmp(var_name, "this", strlen("this"))));
|
||||
|
||||
/* Assert that the variable name is not numeric */
|
||||
zend_ulong idx;
|
||||
ZEND_ASSERT(!ZEND_HANDLE_NUMERIC_STR(var_name, var_name_len, idx));
|
||||
/* ensure that we don't have null bytes, spaces, dots, or array bracket in the variable name (not binary safe) */
|
||||
const char *p = var_name;
|
||||
for (size_t l = 0; l < var_name_len; l++) {
|
||||
ZEND_ASSERT(*p != '\0' && *p != ' ' && *p != '.' && *p != '[');
|
||||
p++;
|
||||
}
|
||||
|
||||
/* Do not allow to register cookies this way */
|
||||
ZEND_ASSERT(Z_TYPE(PG(http_globals)[TRACK_VARS_COOKIE]) == IS_UNDEF ||
|
||||
Z_ARRVAL(PG(http_globals)[TRACK_VARS_COOKIE]) != symbol_table);
|
||||
#endif
|
||||
|
||||
php_register_variable_quick(var_name, var_name_len, value, symbol_table);
|
||||
}
|
||||
|
||||
PHPAPI void php_register_variable_ex(const char *var_name, zval *val, zval *track_vars_array)
|
||||
{
|
||||
char *p = NULL;
|
||||
|
|
|
@ -36,6 +36,7 @@ PHPAPI void php_register_variable(const char *var, const char *val, zval *track_
|
|||
/* binary-safe version */
|
||||
PHPAPI void php_register_variable_safe(const char *var, const char *val, size_t val_len, zval *track_vars_array);
|
||||
PHPAPI void php_register_variable_ex(const char *var, zval *val, zval *track_vars_array);
|
||||
PHPAPI void php_register_known_variable(const char *var, size_t var_len, zval *value, zval *track_vars_array);
|
||||
|
||||
PHPAPI void php_build_argv(const char *s, zval *track_vars_array);
|
||||
PHPAPI int php_hash_environment(void);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue