Loading RELEASE-NOTES +2 −2 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ Curl and libcurl 7.22.1 This release includes the following changes: o o Empty headers can be sent in HTTP requests by terminating with a semicolon This release includes the following bugfixes: Loading @@ -22,6 +22,6 @@ This release includes the following known bugs: This release would not have looked like this without help, code, reports and advice from friends like these: Yukihiro Kawada Thanks! (and sorry if I forgot to mention someone) docs/curl.1 +3 −1 Original line number Diff line number Diff line Loading @@ -592,7 +592,9 @@ header will be used instead of the internal one. This allows you to make even trickier stuff than curl would normally do. You should not replace internally set headers without knowing perfectly well what you're doing. Remove an internal header by giving a replacement without content on the right side of the colon, as in: -H \&"Host:". the colon, as in: -H \&"Host:". If you send the custom header with no-value then its header must be terminated with a semicolon, such as \-H "X-Custom-Header;" to send "X-Custom-Header:". curl will make sure that each header you add/replace is sent with the proper end-of-line marker, you should thus \fBnot\fP add that as a part of the header Loading lib/http.c +25 −0 Original line number Diff line number Diff line Loading @@ -1559,6 +1559,31 @@ CURLcode Curl_add_custom_headers(struct connectdata *conn, } } } else { ptr = strchr(headers->data, ';'); if(ptr) { ptr++; /* pass the semicolon */ while(*ptr && ISSPACE(*ptr)) ptr++; if(*ptr) { /* this may be used for something else in the future */ } else { if(*(--ptr) == ';') { CURLcode result; /* send no-value custom header if terminated by semicolon */ *ptr = ':'; result = Curl_add_bufferf(req_buffer, "%s\r\n", headers->data); if(result) return result; } } } } headers = headers->next; } return CURLE_OK; Loading tests/data/test4 +4 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ http Replaced internal and added custom HTTP headers </name> <command> -H "extra-header: here" -H "Accept: replaced" http://%HOSTIP:%HTTPPORT/4 -H "extra-header: here" -H "Accept: replaced" -H "X-Custom-Header;" -H "X-Test: foo; " -H "X-Test:" -H "X-Test2: foo;" -H "X-Test3: " -H "X-Test4; " -H "X-Test5;ignored" http://%HOSTIP:%HTTPPORT/4 </command> </client> Loading @@ -45,6 +45,9 @@ GET /4 HTTP/1.1 Host: %HOSTIP:%HTTPPORT extra-header: here Accept: replaced X-Custom-Header: X-Test: foo; X-Test2: foo; </protocol> </verify> Loading Loading
RELEASE-NOTES +2 −2 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ Curl and libcurl 7.22.1 This release includes the following changes: o o Empty headers can be sent in HTTP requests by terminating with a semicolon This release includes the following bugfixes: Loading @@ -22,6 +22,6 @@ This release includes the following known bugs: This release would not have looked like this without help, code, reports and advice from friends like these: Yukihiro Kawada Thanks! (and sorry if I forgot to mention someone)
docs/curl.1 +3 −1 Original line number Diff line number Diff line Loading @@ -592,7 +592,9 @@ header will be used instead of the internal one. This allows you to make even trickier stuff than curl would normally do. You should not replace internally set headers without knowing perfectly well what you're doing. Remove an internal header by giving a replacement without content on the right side of the colon, as in: -H \&"Host:". the colon, as in: -H \&"Host:". If you send the custom header with no-value then its header must be terminated with a semicolon, such as \-H "X-Custom-Header;" to send "X-Custom-Header:". curl will make sure that each header you add/replace is sent with the proper end-of-line marker, you should thus \fBnot\fP add that as a part of the header Loading
lib/http.c +25 −0 Original line number Diff line number Diff line Loading @@ -1559,6 +1559,31 @@ CURLcode Curl_add_custom_headers(struct connectdata *conn, } } } else { ptr = strchr(headers->data, ';'); if(ptr) { ptr++; /* pass the semicolon */ while(*ptr && ISSPACE(*ptr)) ptr++; if(*ptr) { /* this may be used for something else in the future */ } else { if(*(--ptr) == ';') { CURLcode result; /* send no-value custom header if terminated by semicolon */ *ptr = ':'; result = Curl_add_bufferf(req_buffer, "%s\r\n", headers->data); if(result) return result; } } } } headers = headers->next; } return CURLE_OK; Loading
tests/data/test4 +4 −1 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ http Replaced internal and added custom HTTP headers </name> <command> -H "extra-header: here" -H "Accept: replaced" http://%HOSTIP:%HTTPPORT/4 -H "extra-header: here" -H "Accept: replaced" -H "X-Custom-Header;" -H "X-Test: foo; " -H "X-Test:" -H "X-Test2: foo;" -H "X-Test3: " -H "X-Test4; " -H "X-Test5;ignored" http://%HOSTIP:%HTTPPORT/4 </command> </client> Loading @@ -45,6 +45,9 @@ GET /4 HTTP/1.1 Host: %HOSTIP:%HTTPPORT extra-header: here Accept: replaced X-Custom-Header: X-Test: foo; X-Test2: foo; </protocol> </verify> Loading