31static void _php_import_environment_variables(
zval *array_ptr);
32static void _php_load_environment_variables(
zval *array_ptr);
80 for (
size_t l = 0; l < var_name_len; l++) {
90 php_register_variable_quick(
var_name, var_name_len,
value, symbol_table);
95static bool php_is_forbidden_variable_name(
const char *mangled_name,
size_t mangled_name_len,
const char *pre_mangled_name)
97 if (mangled_name_len >=
sizeof(
"__Host-")-1 &&
strncmp(mangled_name,
"__Host-",
sizeof(
"__Host-")-1) == 0 &&
strncmp(pre_mangled_name,
"__Host-",
sizeof(
"__Host-")-1) != 0) {
101 if (mangled_name_len >=
sizeof(
"__Secure-")-1 &&
strncmp(mangled_name,
"__Secure-",
sizeof(
"__Secure-")-1) == 0 &&
strncmp(pre_mangled_name,
"__Secure-",
sizeof(
"__Secure-")-1) != 0) {
113 char *var, *var_orig;
114 size_t var_len, index_len;
115 zval gpc_element, *gpc_element_p;
128 zval_ptr_dtor_nogc(
val);
142 var = var_orig =
do_alloca(var_len + 1, use_heap);
146 for (
p = var; *
p;
p++) {
147 if (*
p ==
' ' || *
p ==
'.') {
149 }
else if (*
p ==
'[') {
159 zval_ptr_dtor_nogc(
val);
164 if (var_len ==
sizeof(
"this")-1 &&
EG(current_execute_data)) {
170 &&
ex->symbol_table == symtable1) {
171 if (memcmp(var,
"this",
sizeof(
"this")-1) == 0) {
173 zval_ptr_dtor_nogc(
val);
180 ex =
ex->prev_execute_data;
185 if (symtable1 == &
EG(symbol_table) &&
186 var_len ==
sizeof(
"GLOBALS")-1 &&
187 !memcmp(var,
"GLOBALS",
sizeof(
"GLOBALS")-1)) {
188 zval_ptr_dtor_nogc(
val);
200 size_t new_idx_len = 0;
202 if(++nest_level >
PG(max_input_nesting_level)) {
206 if (track_vars_array) {
208 zend_symtable_str_del(
ht, var, var_len);
211 zval_ptr_dtor_nogc(
val);
215 if (!
PG(display_errors)) {
233 *(index_s - 1) =
'_';
235 for (
p = index_s; *
p;
p++) {
236 if (*
p ==
' ' || *
p ==
'.' || *
p ==
'[') {
243 index_len =
strlen(index);
249 new_idx_len =
strlen(index_s);
256 zval_ptr_dtor_nogc(
val);
261 if (php_is_forbidden_variable_name(index, index_len,
var_name)) {
262 zval_ptr_dtor_nogc(
val);
267 gpc_element_p = zend_symtable_str_find(symtable1, index, index_len);
268 if (!gpc_element_p) {
271 gpc_element_p = zend_symtable_str_update_ind(symtable1, index, index_len, &tmp);
277 zval_ptr_dtor_nogc(gpc_element_p);
287 index_len = new_idx_len;
301 zval_ptr_dtor_nogc(
val);
304 if (php_is_forbidden_variable_name(index, index_len,
var_name)) {
305 zval_ptr_dtor_nogc(
val);
320 zend_symtable_str_exists(symtable1, index, index_len)) {
321 zval_ptr_dtor_nogc(
val);
325 php_register_variable_quick(index, index_len,
val, symtable1);
348 if (var->
ptr >= var->
end) {
363 ksep = memchr(var->
ptr,
'=', vsep - var->
ptr);
367 klen = ksep - var->
ptr;
368 vlen = vsep - ++ksep;
372 klen = vsep - var->
ptr;
388 var->
ptr = vsep + (vsep != var->
end);
399 while (add_post_var(arr, vars, eof)) {
400 if (++vars->
cnt > max_vars) {
402 "Input variables exceeded %" PRIu64
". "
403 "To increase the limit change max_input_vars in php.ini.",
416#define SAPI_POST_HANDLER_BUFSIZ 16384
418# define SAPI_POST_HANDLER_BUFSIZ BUFSIZ
427 memset(&post_data, 0,
sizeof(post_data));
434 smart_str_appendl(&post_data.
str,
buf,
len);
436 if (
SUCCESS != add_post_vars(arr, &post_data, 0)) {
437 smart_str_free(&post_data.
str);
447 if (post_data.
str.
s) {
448 add_post_vars(arr, &post_data, 1);
449 smart_str_free(&post_data.
str);
453#undef SAPI_POST_HANDLER_BUFSIZ
458 if(new_val_len) *new_val_len = val_len;
468 char *strtok_buf =
NULL;
503 c_var =
SG(request_info).query_string;
504 if (c_var && *c_var) {
511 c_var =
SG(request_info).cookie_data;
512 if (c_var && *c_var) {
530 separator =
PG(arg_separator).input;
547 while (isspace(*var)) {
550 if (var ==
val || *var ==
'\0') {
556 if (++
count > max_input_vars) {
597 if (*
s ==
' ' || *
s ==
'.' || *
s ==
'[') {
607 size_t name_len,
len;
614 || !valid_environment_name(env,
p)) {
625 php_register_variable_quick(env, name_len, &
val,
ht);
629static void _php_import_environment_variables(
zval *array_ptr)
635 import_environment_variable(
Z_ARRVAL_P(array_ptr), *env);
638 wchar_t *environmentw = GetEnvironmentStringsW();
639 for (
wchar_t *envw = environmentw; envw !=
NULL && *envw; envw += wcslen(envw) + 1) {
642 import_environment_variable(
Z_ARRVAL_P(array_ptr), env);
646 FreeEnvironmentStringsW(environmentw);
652static void _php_load_environment_variables(
zval *array_ptr)
663 if (!(
SG(request_info).argc || track_vars_array)) {
670 if (
SG(request_info).argc) {
672 for (i = 0; i <
SG(request_info).argc; i++) {
675 zend_string_efree(
Z_STR(tmp));
678 }
else if (
s && *
s) {
680 const char *space =
strchr(
s,
'+');
685 zend_string_efree(
Z_STR(tmp));
695 if (
SG(request_info).argc) {
701 if (
SG(request_info).argc) {
711 zval_ptr_dtor_nogc(&arr);
716static inline void php_register_server_variables(
void)
722 zval_ptr_dtor_nogc(arr);
732 if (
SG(request_info).auth_user) {
734 php_register_variable_quick(
"PHP_AUTH_USER",
sizeof(
"PHP_AUTH_USER")-1, &tmp,
ht);
736 if (
SG(request_info).auth_password) {
738 php_register_variable_quick(
"PHP_AUTH_PW",
sizeof(
"PHP_AUTH_PW")-1, &tmp,
ht);
740 if (
SG(request_info).auth_digest) {
742 php_register_variable_quick(
"PHP_AUTH_DIGEST",
sizeof(
"PHP_AUTH_DIGEST")-1, &tmp,
ht);
747 php_register_variable_quick(
"REQUEST_TIME_FLOAT",
sizeof(
"REQUEST_TIME_FLOAT")-1, &tmp,
ht);
749 php_register_variable_quick(
"REQUEST_TIME",
sizeof(
"REQUEST_TIME")-1, &tmp,
ht);
756 zval *src_entry, *dest_entry;
759 int globals_check = (dest == (&
EG(symbol_table)));
787 memset(
PG(http_globals), 0,
sizeof(
PG(http_globals)));
789 if (
PG(register_argc_argv)) {
798 if (
PG(variables_order) && (
strchr(
PG(variables_order),
'G') ||
strchr(
PG(variables_order),
'g'))) {
813 if (
PG(variables_order) &&
816 SG(request_info).request_method &&
832 if (
PG(variables_order) && (
strchr(
PG(variables_order),
'C') ||
strchr(
PG(variables_order),
'c'))) {
858static void check_http_proxy(
HashTable *var_table)
860 if (zend_hash_str_exists(var_table,
"HTTP_PROXY",
sizeof(
"HTTP_PROXY")-1)) {
861 char *local_proxy =
getenv(
"HTTP_PROXY");
875 if (
PG(variables_order) && (
strchr(
PG(variables_order),
'S') ||
strchr(
PG(variables_order),
's'))) {
876 php_register_server_variables();
878 if (
PG(register_argc_argv)) {
879 if (
SG(request_info).argc) {
882 if ((argc = zend_hash_find_ex_ind(&
EG(symbol_table),
ZSTR_KNOWN(ZEND_STR_ARGC), 1)) !=
NULL &&
883 (argv = zend_hash_find_ex_ind(&
EG(symbol_table),
ZSTR_KNOWN(ZEND_STR_ARGV), 1)) !=
NULL) {
916 if (
PG(variables_order) && (
strchr(
PG(variables_order),
'E') ||
strchr(
PG(variables_order),
'e'))) {
930 unsigned char _gpc_flags[3] = {0, 0, 0};
935 if (
PG(request_order) !=
NULL) {
936 p =
PG(request_order);
938 p =
PG(variables_order);
941 for (;
p && *
p;
p++) {
945 if (!_gpc_flags[0]) {
952 if (!_gpc_flags[1]) {
959 if (!_gpc_flags[2]) {
SAPI_API double sapi_get_request_time(void)
SAPI_API sapi_module_struct sapi_module
SAPI_API void sapi_handle_post(void *arg)
#define REQUEST_PARSE_BODY_OPTION_GET(name, fallback)
#define SAPI_INPUT_FILTER_FUNC(input_filter)
#define SAPI_POST_HANDLER_FUNC(post_handler)
#define SAPI_TREAT_DATA_FUNC(treat_data)
getenv(?string $name=null, bool $local_only=false)
count(Countable|array $value, int $mode=COUNT_NORMAL)
assert(mixed $assertion, Throwable|string|null $description=null)
strchr(string $haystack, string $needle, bool $before_needle=false)
headers_sent(&$filename=null, &$line=null)
#define php_win32_cp_w_to_any(in)
memset(ptr, 0, type->size)
zend_ffi_ctype_name_buf buf
PHPAPI size_t php_url_decode(char *str, size_t len)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
unsigned const char * end
#define TRACK_VARS_SERVER
#define TRACK_VARS_COOKIE
PHPAPI char * php_strtok_r(char *s, const char *delim, char **last)
unsigned char key[REFLECTION_KEY_LEN]
struct _php_stream php_stream
#define php_stream_read(stream, buf, count)
#define php_stream_rewind(stream)
#define php_stream_eof(stream)
#define SAPI_POST_HANDLER_BUFSIZ
PHPAPI void php_build_argv(const char *s, zval *track_vars_array)
PHPAPI void(* php_load_environment_variables)(zval *array_ptr)
PHPAPI int php_hash_environment(void)
PHPAPI void php_register_variable_ex(const char *var_name, zval *val, zval *track_vars_array)
void php_startup_auto_globals(void)
PHPAPI void(* php_import_environment_variables)(zval *array_ptr)
struct post_var_data post_var_data_t
PHPAPI void php_register_variable(const char *var, const char *strval, zval *track_vars_array)
PHPAPI void php_register_variable_safe(const char *var, const char *strval, size_t str_len, zval *track_vars_array)
PHPAPI void php_register_known_variable(const char *var_name, size_t var_name_len, zval *value, zval *track_vars_array)
PHPAPI size_t php_raw_url_decode(char *str, size_t len)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
#define ZVAL_STRING(z, s)
#define ZVAL_STRINGL(z, s, l)
#define ZVAL_STRINGL_FAST(z, s, l)
#define estrndup(s, length)
strncmp(string $string1, string $string2, int $length)
zend_string_release_ex(func->internal_function.function_name, 0)
ZEND_API zend_result zend_register_auto_global(zend_string *name, bool jit, zend_auto_global_callback auto_global_callback)
ZEND_API void zend_activate_auto_globals(void)
#define ZEND_USER_CODE(type)
#define ZEND_CALL_HAS_SYMBOL_TABLE
#define ZEND_CALL_INFO(call)
#define strcasecmp(s1, s2)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API zval *ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_update_ind(HashTable *ht, zend_string *key, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_update(HashTable *ht, const char *str, size_t len, zval *pData)
ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht)
ZEND_API zval *ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key, zval *pData)
ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht)
ZEND_API zend_result ZEND_FASTCALL zend_hash_str_del(HashTable *ht, const char *str, size_t len)
ZEND_API zval *ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key)
ZEND_API zval *ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h)
#define HT_ALLOW_COW_VIOLATION(ht)
#define ZEND_HANDLE_NUMERIC_STR(key, length, idx)
#define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val)
#define ZEND_HASH_FOREACH_END()
struct _zend_string zend_string
#define ALLOCA_FLAG(name)
#define do_alloca(p, use_heap)
#define zend_always_inline
#define free_alloca(p, use_heap)
ZEND_API zend_string_init_interned_func_t zend_string_init_interned
#define zend_string_equals_literal(str, literal)
#define Z_TRY_ADDREF_P(pz)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
#define Z_INDIRECT_P(zval_p)
#define ZVAL_DOUBLE(z, d)
#define SEPARATE_ARRAY(zv)
struct _zend_execute_data zend_execute_data
#define ZVAL_COPY_VALUE(z, v)
#define Z_TRY_DELREF_P(pz)