X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_cookie_api.c;h=bf9af4048c74cfae088374c8b475f52583257c67;hb=a93c1059c61026dab25278d0839c44745fc117b6;hp=bc02315e6f9098880f3a6f416d0d4c0487c66222;hpb=e6b35fbe072a13b0e792952852fcd1499bd8e610;p=m6w6%2Fext-http diff --git a/http_cookie_api.c b/http_cookie_api.c index bc02315..bf9af40 100644 --- a/http_cookie_api.c +++ b/http_cookie_api.c @@ -26,10 +26,10 @@ PHP_MINIT_FUNCTION(http_cookie) return SUCCESS; } -PHP_HTTP_API http_cookie_list *_http_cookie_list_init(http_cookie_list *list TSRMLS_DC) +PHP_HTTP_API http_cookie_list *_http_cookie_list_init(http_cookie_list *list ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC TSRMLS_DC) { if (!list) { - list = emalloc(sizeof(http_cookie_list)); + list = emalloc_rel(sizeof(http_cookie_list)); } zend_hash_init(&list->cookies, 0, NULL, ZVAL_PTR_DTOR, 0); @@ -107,7 +107,7 @@ static inline void _http_cookie_list_set_item_ex(http_cookie_list *list, const c } else if (!strcasecmp(key, "domain")) { STR_SET(list->domain, estrndup(value, value_len)); } else if (!strcasecmp(key, "expires")) { - const char *date = estrndup(value, value_len); + char *date = estrndup(value, value_len); list->expires = http_parse_date(date); efree(date); } else if (!strcasecmp(key, "secure")) { @@ -185,11 +185,13 @@ PHP_HTTP_API http_cookie_list *_http_parse_cookie_ex(http_cookie_list *list, con switch (st) { case ST_QUOTE: + quote: if (*c == '"') { - if (*(c-1) != '\\') { - st = ST_ADD; - } else { + if (*(c-1) == '\\') { memmove(c-1, c, strlen(c)+1); + goto quote; + } else { + goto add; } } else { if (!val) { @@ -215,10 +217,8 @@ PHP_HTTP_API http_cookie_list *_http_parse_cookie_ex(http_cookie_list *list, con break; case ';': - if (!*(c+1)) { - goto add; - } case '\0': + goto add; st = ST_ADD; break; @@ -288,8 +288,9 @@ PHP_HTTP_API http_cookie_list *_http_parse_cookie_ex(http_cookie_list *list, con add: if (val) { vallen = c - val; - if (*c) --vallen; - while (val[vallen-1] == ' ') --vallen; + if (st != ST_QUOTE) { + while (val[vallen-1] == ' ') --vallen; + } } else { val = ""; vallen = 0; @@ -321,7 +322,7 @@ failure: http_cookie_list_dtor(list); } efree(s); - return FAILURE; + return NULL; } /* }}} */