switch (st)
{
case ST_QUOTE:
- switch (*c)
- {
- case '"':
- if (*(c-1) != '\\') {
- st = ST_ADD;
- } else {
- memmove(c-1, c, strlen(c)+1);
- }
- break;
-
- default:
- if (!val) {
- val = c;
- }
- break;
+ if (*c == '"') {
+ if (*(c-1) != '\\') {
+ st = ST_ADD;
+ } else {
+ memmove(c-1, c, strlen(c)+1);
+ }
+ } else {
+ if (!val) {
+ val = c;
+ }
+ if (!*c) {
+ --val;
+ st = ST_ADD;
+ }
}
break;
case ' ':
break;
- case '\0':
case ';':
+ goto add;
+ break;
+
+ case '\0':
st = ST_ADD;
break;
case '.':
case '_':
case '$':
+ case '@':
if (!key) {
key = c;
}
break;
case '\0':
- keylen = c - key;
- st = ST_ADD;
+ if (key) {
+ keylen = c - key;
+ st = ST_ADD;
+ }
break;
}
break;
add:
if (val) {
vallen = c - val - (*c?1:0);
+ while (val[vallen-1] == ' ') --vallen;
} else {
val = "";
vallen = 0;
return SUCCESS;
failure:
+ http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Unexpected character (%c) at pos %tu of %zu", *c, c-s, strlen(s));
efree(s);
return FAILURE;
}