/* {{{ */
STATUS _http_parse_key_list(const char *list, HashTable *items, char separator, http_key_list_decode_t decode, zend_bool first_entry_is_name_value_pair TSRMLS_DC)
{
- const char *key = list, *val = NULL;
+ char *str = estrdup(list), *key = str, *val = NULL;
int vallen = 0, keylen = 0, done = 0;
zval array;
INIT_ZARR(array, items);
- if (!(val = strchr(list, '='))) {
+ if (!(val = strchr(str, '='))) {
+ efree(str);
return FAILURE;
}
}
#define HTTP_KEYLIST_FIXKEY() \
{ \
- while (isspace(*key)) ++key; \
- keylen = val - key; \
- while (isspace(key[keylen - 1])) --keylen; \
+ while (isspace(*key)) ++key; \
+ keylen = val - key; \
+ while (isspace(key[keylen - 1])) --keylen; \
}
#define HTTP_KEYLIST_FIXVAL() \
{ \
+ ++val; \
+ while (isspace(*val)) ++val; \
+ vallen = key - val; \
+ while (isspace(val[vallen - 1])) --vallen; \
+ if (val[0] == '"' && val[vallen - 1] == '"') { \
+ int i; \
++val; \
- while (isspace(*val)) ++val; \
- vallen = key - val; \
- while (isspace(val[vallen - 1])) --vallen; \
+ vallen -= 2; \
+ for (i = 0; i < vallen; ++i) { \
+ if (val[i] == '\\' && val[i+1] == '"' && (!i || val[i-1] != '\\')) { \
+ memmove(&val[i], &val[i+1], vallen - i); \
+ --vallen; \
+ } \
+ } \
+ } \
}
HTTP_KEYLIST_FIXKEY();
key = val + strlen(val);
HTTP_KEYLIST_FIXVAL();
HTTP_KEYLIST_VAL(&array, "value", val, vallen);
+ efree(str);
return SUCCESS;
}
/* additional info appended */
efree(keydup);
} while (!done);
+ efree(str);
return SUCCESS;
}
/* }}} */
}
HTTP_LOG_WRITE(file, ident, message);
- HTTP_LOG_WRITE(HTTP_G(log).composite, ident, message);
+ HTTP_LOG_WRITE(HTTP_G->log.composite, ident, message);
}
/* }}} */
switch (status)
{
- case 301: http_log(HTTP_G(log).redirect, "301-REDIRECT", header); break;
- case 302: http_log(HTTP_G(log).redirect, "302-REDIRECT", header); break;
- case 303: http_log(HTTP_G(log).redirect, "303-REDIRECT", header); break;
- case 305: http_log(HTTP_G(log).redirect, "305-REDIRECT", header); break;
- case 307: http_log(HTTP_G(log).redirect, "307-REDIRECT", header); break;
- case 304: http_log(HTTP_G(log).cache, "304-CACHE", header); break;
- case 405: http_log(HTTP_G(log).allowed_methods, "405-ALLOWED", header); break;
+ case 301: http_log(HTTP_G->log.redirect, "301-REDIRECT", header); break;
+ case 302: http_log(HTTP_G->log.redirect, "302-REDIRECT", header); break;
+ case 303: http_log(HTTP_G->log.redirect, "303-REDIRECT", header); break;
+ case 305: http_log(HTTP_G->log.redirect, "305-REDIRECT", header); break;
+ case 307: http_log(HTTP_G->log.redirect, "307-REDIRECT", header); break;
+ case 304: http_log(HTTP_G->log.cache, "304-CACHE", header); break;
+ case 405: http_log(HTTP_G->log.allowed_methods, "405-ALLOWED", header); break;
default: http_log(NULL, header, body); break;
}
STR_FREE(header);
STR_FREE(body);
- if (HTTP_G(force_exit)) {
+ if (HTTP_G->force_exit) {
zend_bailout();
} else {
php_ob_set_internal_handler(http_ob_blackhole, 4096, "blackhole", 0 TSRMLS_CC);
*body = estrndup(*body, *length);
}
return SUCCESS;
- } else if (sapi_module.read_post && !HTTP_G(read_post_data)) {
+ } else if (sapi_module.read_post && !HTTP_G->read_post_data) {
char buf[4096];
int len;
- HTTP_G(read_post_data) = 1;
+ HTTP_G->read_post_data = 1;
while (0 < (len = sapi_module.read_post(buf, sizeof(buf) TSRMLS_CC))) {
*body = erealloc(*body, *length + len + 1);
if (SG(request_info).raw_post_data) {
s = php_stream_open_wrapper("php://input", "rb", 0, NULL);
- } else if (sapi_module.read_post && !HTTP_G(read_post_data)) {
- HTTP_G(read_post_data) = 1;
+ } else if (sapi_module.read_post && !HTTP_G->read_post_data) {
+ HTTP_G->read_post_data = 1;
if ((s = php_stream_temp_new())) {
char buf[4096];