From b7f03b57557b9da147ff84f172dac4f8eb8850d8 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 21 Sep 2004 14:59:01 +0000 Subject: [PATCH] Fix problem with decoding of HTTP responses with no Content Length specified. --- src/comstack.c | 12 +++++++++--- src/tcpip.c | 4 ++-- src/unix.c | 4 ++-- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/comstack.c b/src/comstack.c index ba1cad3..7d8ff00 100644 --- a/src/comstack.c +++ b/src/comstack.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2004, Index Data * See the file LICENSE for details. * - * $Id: comstack.c,v 1.10 2004-05-03 09:00:50 adam Exp $ + * $Id: comstack.c,v 1.11 2004-09-21 14:59:01 adam Exp $ */ #include @@ -147,12 +147,14 @@ int cs_complete_auto(const unsigned char *buf, int len) && buf[2] >= 0x20 && buf[2] < 0x7f) { /* deal with HTTP request/response */ - int i = 2, content_len = 0, chunked = 0; + int i = 2, content_len = -1, chunked = 0; while (i <= len-4) { if (i > 8192) + { return i; /* do not allow more than 8K HTTP header */ + } if (buf[i] == '\r' && buf[i+1] == '\n') { i += 2; @@ -236,8 +238,12 @@ int cs_complete_auto(const unsigned char *buf, int len) { /* not chunked ; inside body */ /* i += 2 seems not to work with GCC -O2 .. so i+2 is used instead .. */ - if (len >= (i+2)+ content_len) + if (content_len == -1) + return 0; /* no content length */ + else if (len >= (i+2)+ content_len) + { return (i+2)+ content_len; + } } break; } diff --git a/src/tcpip.c b/src/tcpip.c index 689b0d5..1136c9d 100644 --- a/src/tcpip.c +++ b/src/tcpip.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2004, Index Data * See the file LICENSE for details. * - * $Id: tcpip.c,v 1.9 2004-05-10 11:40:51 adam Exp $ + * $Id: tcpip.c,v 1.10 2004-09-21 14:59:01 adam Exp $ */ #include @@ -776,7 +776,7 @@ int tcpip_get(COMSTACK h, char **buf, int *bufsize) #endif } else if (!res) - return 0; + return hasread; hasread += res; } TRC (fprintf (stderr, " Out of read loop with hasread=%d, berlen=%d\n", diff --git a/src/unix.c b/src/unix.c index bd6ce7c..0ae3248 100644 --- a/src/unix.c +++ b/src/unix.c @@ -2,7 +2,7 @@ * Copyright (c) 1995-2004, Index Data * See the file LICENSE for details. * - * $Id: unix.c,v 1.4 2004-04-29 21:19:23 adam Exp $ + * $Id: unix.c,v 1.5 2004-09-21 14:59:01 adam Exp $ * UNIX socket COMSTACK. By Morten Bøgeskov. */ #ifndef WIN32 @@ -565,7 +565,7 @@ static int unix_get(COMSTACK h, char **buf, int *bufsize) return -1; } else if (!res) - return 0; + return hasread; hasread += res; } TRC (fprintf (stderr, " Out of read loop with hasread=%d, berlen=%d\n", -- 1.7.10.4