X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_cookie_api.c;h=bf9af4048c74cfae088374c8b475f52583257c67;hp=fb3a9505c438634d03b94082867835f5eaa971d0;hb=0861238aa4d158d0f8b6123ea9c6532be5d531bf;hpb=24b00d45e94aef314ccee09a090609bd8a540926 diff --git a/http_cookie_api.c b/http_cookie_api.c index fb3a950..bf9af40 100644 --- a/http_cookie_api.c +++ b/http_cookie_api.c @@ -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;