http: fix for unfolding line starting with TAB

It should still insert a (single) space when unfolding

Follow-up to 9941e7c95b following up to 67ae101666.

Updated test 1274 and 1940 accordingly.

Closes #20029
This commit is contained in:
Daniel Stenberg 2025-12-19 09:15:40 +01:00
parent 481f11d96f
commit 6c7bc9871f
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
4 changed files with 13 additions and 7 deletions

View File

@ -4391,19 +4391,16 @@ static CURLcode http_parse_headers(struct Curl_easy *data,
if(data->state.leading_unfold) {
/* immediately after an unfold, keep only a single whitespace */
const size_t iblen = blen;
while(consumed && ISBLANK(buf[0])) {
consumed--;
buf++;
blen--;
}
if(consumed) {
if(iblen > blen) {
/* take one step back */
consumed++;
buf--;
blen++;
}
/* insert a single space */
result = curlx_dyn_addn(&data->state.headerb, " ", 1);
if(result)
return result;
data->state.leading_unfold = FALSE; /* done now */
}
}

View File

@ -16,6 +16,9 @@ Date: Tue, 09 Nov 2010 14:49:00 GMT%CR
Server: test-server/%CR
fake%CR
folded%CR
Tabs: tab-instead/%TAB%CR
%TABonly%CR
%TAB mixed%CR
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT%CR
ETag: "21025-dc7-39462498"%CR
Content-Length: 6%CR
@ -52,6 +55,7 @@ Accept: */*
HTTP/1.1 200 OK
Date: Tue, 09 Nov 2010 14:49:00 GMT
Server: test-server/ fake folded
Tabs: tab-instead/ only mixed
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Content-Length: 6

View File

@ -17,6 +17,9 @@ Fold: is
folding a%repeat[5 x ]%
line
Content-Length: 0
Test:%TAB
%TAB%SP
%TABword
Set-Cookie: onecookie=data;
Set-Cookie: secondcookie=2data;
Set-Cookie: cookie3=data3;
@ -62,6 +65,7 @@ http://%HOSTIP:%HTTPPORT/%TESTNUMBER
Fold == is folding a line
Blank ==%SP
Blank2 ==%SP
Test == word
</stdout>
</verify>
</testcase>

View File

@ -44,6 +44,7 @@ static void t1940_showem(CURL *curl, int header_request, unsigned int type)
"fold",
"blank",
"Blank2",
"Test",
NULL
};