http-backend: allow empty CONTENT_LENGTH
According to RFC3875, empty environment variable is equivalent to unset, and for CONTENT_LENGTH it should mean zero body to read. However, unset CONTENT_LENGTH is also used for chunked encoding to indicate reading until EOF. At least, the test "large fetch-pack requests can be split across POSTs" from t5551 starts faliing, if unset or empty CONTENT_LENGTH is treated as zero length body. So keep the existing behavior as much as possible. Add a test for the case. Reported-By: Jelmer Vernooij <jelmer@jelmer.uk> Signed-off-by: Max Kirillov <max@max630.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Max Kirillov committed
Sep 7, 2018 at 06:36 UTC
574c513e8dda5598e9e08e8ca2a048bf120a5709
2 files changed
+12
-1
http-backend.c
+1
-1
@@ -353,7 +353,7 @@ static ssize_t get_content_length(void)
353
ssize_t val = -1;
354
const char *str = getenv("CONTENT_LENGTH");
355
356
- if (str && !git_parse_ssize_t(str, &val))
356
+ if (str && *str && !git_parse_ssize_t(str, &val))
357
die("failed to parse CONTENT_LENGTH: %s", str);
358
return val;
359
}
t/t5562-http-backend-content-length.sh
+11
@@ -153,4 +153,15 @@ test_expect_success 'CONTENT_LENGTH overflow ssite_t' '
153
grep "fatal:.*CONTENT_LENGTH" err
154
'
155
156
+test_expect_success 'empty CONTENT_LENGTH' '
157
+ env \
158
+ QUERY_STRING=/repo.git/HEAD \
159
+ PATH_TRANSLATED="$PWD"/.git/HEAD \
160
+ GIT_HTTP_EXPORT_ALL=TRUE \
161
+ REQUEST_METHOD=GET \
162
+ CONTENT_LENGTH="" \
163
+ git http-backend <empty_body >act.out 2>act.err &&
164
+ verify_http_result "200 OK"
165
+'
166
+
167
test_done