diff options
author | cperciva <cperciva@FreeBSD.org> | 2005-11-17 11:01:32 +0000 |
---|---|---|
committer | cperciva <cperciva@FreeBSD.org> | 2005-11-17 11:01:32 +0000 |
commit | 72ee7cf7039d340322d8416243e31aa0bdef25c7 (patch) | |
tree | 48b0fe55f2836addcf7ce524a657f6369e84d123 /usr.sbin/portsnap | |
parent | a384e414462e3ac3204ea4693d31837bcee23ee6 (diff) | |
download | FreeBSD-src-72ee7cf7039d340322d8416243e31aa0bdef25c7.zip FreeBSD-src-72ee7cf7039d340322d8416243e31aa0bdef25c7.tar.gz |
Correctly handle a TCP connection being shutdown by the server while
we're reading response headers. (Handle it as a connection-killing
error, rather than entering an infinite loop reading zero bytes.)
Reported by: simon
Discovered thanks to: A not-very-transparent transparent HTTP proxy.
MFC after: 3 days
Diffstat (limited to 'usr.sbin/portsnap')
-rw-r--r-- | usr.sbin/portsnap/phttpget/phttpget.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/usr.sbin/portsnap/phttpget/phttpget.c b/usr.sbin/portsnap/phttpget/phttpget.c index 91f2e61..e45ab83 100644 --- a/usr.sbin/portsnap/phttpget/phttpget.c +++ b/usr.sbin/portsnap/phttpget/phttpget.c @@ -223,7 +223,8 @@ readln(int sd, char * resbuf, int * resbuflen, int * resbufpos) /* Read more data into the buffer */ len = recv(sd, resbuf + *resbuflen, BUFSIZ - *resbuflen, 0); - if ((len == -1) && (errno != EINTR)) + if ((len == 0) || + ((len == -1) && (errno != EINTR))) return -1; if (len != -1) |