ZEND_API int zend_multibyte_set_functions(const zend_multibyte_functions *functions) { zend_multibyte_encoding_utf32be = functions->encoding_fetcher("UTF-32BE"); if (!zend_multibyte_encoding_utf32be) { return FAILURE; } zend_multibyte_encoding_utf32le = functions->encoding_fetcher("UTF-32LE"); if (!zend_multibyte_encoding_utf32le) { return FAILURE; } zend_multibyte_encoding_utf16be = functions->encoding_fetcher("UTF-16BE"); if (!zend_multibyte_encoding_utf16be) { return FAILURE; } zend_multibyte_encoding_utf16le = functions->encoding_fetcher("UTF-16LE"); if (!zend_multibyte_encoding_utf16le) { return FAILURE; } zend_multibyte_encoding_utf8 = functions->encoding_fetcher("UTF-8"); if (!zend_multibyte_encoding_utf8) { return FAILURE; } multibyte_functions_dummy = multibyte_functions; multibyte_functions = *functions; /* As zend_multibyte_set_functions() gets called after ini settings were * populated, we need to reinitialize script_encoding here. */ { const char *value = zend_ini_string("zend.script_encoding", sizeof("zend.script_encoding") - 1, 0); zend_multibyte_set_script_encoding_by_string(value, strlen(value)); } return SUCCESS; }
/* {{{ OnUpdate_zlib_output_compression */ static PHP_INI_MH(OnUpdate_zlib_output_compression) { int int_value; char *ini_value; zend_long *p; #ifndef ZTS char *base = (char *) mh_arg2; #else char *base; base = (char *) ts_resource(*((int *) mh_arg2)); #endif if (new_value == NULL) { return FAILURE; } if (!strncasecmp(new_value->val, "off", sizeof("off"))) { int_value = 0; } else if (!strncasecmp(new_value->val, "on", sizeof("on"))) { int_value = 1; } else { int_value = zend_atoi(new_value->val, new_value->len); } ini_value = zend_ini_string("output_handler", sizeof("output_handler"), 0); if (ini_value && *ini_value && int_value) { php_error_docref("ref.outcontrol", E_CORE_ERROR, "Cannot use both zlib.output_compression and output_handler together!!"); return FAILURE; } if (stage == PHP_INI_STAGE_RUNTIME) { int status = php_output_get_status(); if (status & PHP_OUTPUT_SENT) { php_error_docref("ref.outcontrol", E_WARNING, "Cannot change zlib.output_compression - headers already sent"); return FAILURE; } } p = (zend_long *) (base+(size_t) mh_arg1); *p = int_value; ZLIBG(output_compression) = ZLIBG(output_compression_default); if (stage == PHP_INI_STAGE_RUNTIME && int_value) { if (!php_output_handler_started(ZEND_STRL(PHP_ZLIB_OUTPUT_HANDLER_NAME))) { php_zlib_output_compression_start(); } } return SUCCESS; }
/* {{{ MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data) * http input processing */ MBSTRING_API SAPI_TREAT_DATA_FUNC(mbstr_treat_data) { char *res = NULL, *separator=NULL; const char *c_var; zval *array_ptr; int free_buffer=0; enum mbfl_no_encoding detected; php_mb_encoding_handler_info_t info; if (arg != PARSE_STRING) { char *value = zend_ini_string("mbstring.internal_encoding", sizeof("mbstring.internal_encoding"), 0); _php_mb_ini_mbstring_internal_encoding_set(value, value ? strlen(value): 0 TSRMLS_CC); } if (!MBSTRG(encoding_translation)) { php_default_treat_data(arg, str, destArray TSRMLS_CC); return; } switch (arg) { case PARSE_POST: case PARSE_GET: case PARSE_COOKIE: ALLOC_ZVAL(array_ptr); array_init(array_ptr); INIT_PZVAL(array_ptr); switch (arg) { case PARSE_POST: PG(http_globals)[TRACK_VARS_POST] = array_ptr; break; case PARSE_GET: PG(http_globals)[TRACK_VARS_GET] = array_ptr; break; case PARSE_COOKIE: PG(http_globals)[TRACK_VARS_COOKIE] = array_ptr; break; } break; default: array_ptr=destArray; break; } if (arg==PARSE_POST) { sapi_handle_post(array_ptr TSRMLS_CC); return; } if (arg == PARSE_GET) { /* GET data */ c_var = SG(request_info).query_string; if (c_var && *c_var) { res = (char *) estrdup(c_var); free_buffer = 1; } else { free_buffer = 0; } } else if (arg == PARSE_COOKIE) { /* Cookie data */ c_var = SG(request_info).cookie_data; if (c_var && *c_var) { res = (char *) estrdup(c_var); free_buffer = 1; } else { free_buffer = 0; } } else if (arg == PARSE_STRING) { /* String data */ res = str; free_buffer = 1; } if (!res) { return; } switch (arg) { case PARSE_POST: case PARSE_GET: case PARSE_STRING: separator = (char *) estrdup(PG(arg_separator).input); break; case PARSE_COOKIE: separator = ";\0"; break; } switch(arg) { case PARSE_POST: MBSTRG(http_input_identify_post) = mbfl_no_encoding_invalid; break; case PARSE_GET: MBSTRG(http_input_identify_get) = mbfl_no_encoding_invalid; break; case PARSE_COOKIE: MBSTRG(http_input_identify_cookie) = mbfl_no_encoding_invalid; break; case PARSE_STRING: MBSTRG(http_input_identify_string) = mbfl_no_encoding_invalid; break; } info.data_type = arg; info.separator = separator; info.force_register_globals = 0; info.report_errors = 0; info.to_encoding = MBSTRG(internal_encoding); info.to_language = MBSTRG(language); info.from_encodings = MBSTRG(http_input_list); info.num_from_encodings = MBSTRG(http_input_list_size); info.from_language = MBSTRG(language); MBSTRG(illegalchars) = 0; detected = _php_mb_encoding_handler_ex(&info, array_ptr, res TSRMLS_CC); MBSTRG(http_input_identify) = detected; if (detected != mbfl_no_encoding_invalid) { switch(arg){ case PARSE_POST: MBSTRG(http_input_identify_post) = detected; break; case PARSE_GET: MBSTRG(http_input_identify_get) = detected; break; case PARSE_COOKIE: MBSTRG(http_input_identify_cookie) = detected; break; case PARSE_STRING: MBSTRG(http_input_identify_string) = detected; break; } } if (arg != PARSE_COOKIE) { efree(separator); } if (free_buffer) { efree(res); } }