remote-curl: error on incomplete packet
Currently, remote-curl acts as a proxy and blindly forwards packets between an HTTP server and fetch-pack. In the case of a stateless RPC connection where the connection is terminated with a partially written packet, remote-curl will blindly send the partially written packet before waiting on more input from fetch-pack. Meanwhile, fetch-pack will read the partial packet and continue reading, expecting more input. This results in a deadlock between the two processes. For a stateless connection, inspect packets before sending them and error out if a packet line packet is incomplete. Helped-by: Jeff King <peff@peff.net> Signed-off-by: Denton Liu <liu.denton@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
101736a14c
commit
74b082ad34
@ -117,6 +117,8 @@ Alias /auth/dumb/ www/auth/dumb/
|
||||
SetEnv GIT_EXEC_PATH ${GIT_EXEC_PATH}
|
||||
SetEnv GIT_HTTP_EXPORT_ALL
|
||||
</LocationMatch>
|
||||
ScriptAlias /smart/incomplete_length/git-upload-pack incomplete-length-upload-pack-v2-http.sh/
|
||||
ScriptAlias /smart/incomplete_body/git-upload-pack incomplete-body-upload-pack-v2-http.sh/
|
||||
ScriptAliasMatch /error_git_upload_pack/(.*)/git-upload-pack error.sh/
|
||||
ScriptAliasMatch /smart_*[^/]*/(.*) ${GIT_EXEC_PATH}/git-http-backend/$1
|
||||
ScriptAlias /broken_smart/ broken-smart-http.sh/
|
||||
@ -126,6 +128,12 @@ ScriptAliasMatch /one_time_perl/(.*) apply-one-time-perl.sh/$1
|
||||
<Directory ${GIT_EXEC_PATH}>
|
||||
Options FollowSymlinks
|
||||
</Directory>
|
||||
<Files incomplete-length-upload-pack-v2-http.sh>
|
||||
Options ExecCGI
|
||||
</Files>
|
||||
<Files incomplete-body-upload-pack-v2-http.sh>
|
||||
Options ExecCGI
|
||||
</Files>
|
||||
<Files broken-smart-http.sh>
|
||||
Options ExecCGI
|
||||
</Files>
|
||||
|
||||
3
t/lib-httpd/incomplete-body-upload-pack-v2-http.sh
Normal file
3
t/lib-httpd/incomplete-body-upload-pack-v2-http.sh
Normal file
@ -0,0 +1,3 @@
|
||||
printf "Content-Type: text/%s\n" "application/x-git-upload-pack-result"
|
||||
echo
|
||||
printf "%s%s" "0079" "45"
|
||||
3
t/lib-httpd/incomplete-length-upload-pack-v2-http.sh
Normal file
3
t/lib-httpd/incomplete-length-upload-pack-v2-http.sh
Normal file
@ -0,0 +1,3 @@
|
||||
printf "Content-Type: text/%s\n" "application/x-git-upload-pack-result"
|
||||
echo
|
||||
printf "%s" "00"
|
||||
Reference in New Issue
Block a user