- From: Karl-Otto Linn <linn@informatik.fh-wiesbaden.de>
- Date: Mon, 26 Mar 2001 22:11:08 +0200
- To: Jens Meggers <jens.meggers@firepad.com>
- CC: "'www-lib@w3.org'" <www-lib@w3.org>
Hi Jens,
I have done your modifications in my version of libwww too. I have additionally added (for win32)
an "_ASSERT (me)" at the beginning and I have limited the length of line (to 70 char).
Karl-Otto
PRIVATE BOOL HTChunkDecode_header (HTStream * me)
{
char * line;
_ASSERT( me ); //linn
line = HTChunk_data(me->buf);
if (line) {
char *errstr = NULL;
me->left = strtol(line, &errstr, 16); /* hex! */
HTTRACE(STREAM_TRACE, "Chunked..... `%s\' chunk size: %X\n" _ line _ me->left);
if (errstr == line) {
// HTDEBUGBREAK("Chunk decoder received illigal chunk size: `%s\'\n" _ line);
printf("Chunk decoder received illegal chunk size: %.70s\n",line); //linn
return NO;
}
Jens Meggers wrote:
>
> Hi,
>
> sorry for bombing you with bug reports, but there is an additional bug in
> HTTChunk.c. In the procedure HTChunkDecode_header(), there is a user
> breakpoint for the case the chunk length is not present in a line where it
> is expected. I understand that a bug in a web server may cause such problem.
> In order to graceful recover from such a request, the function should return
> an error code in
>
> if (errstr == line) {
> HTDEBUGBREAK("Chunk decoder received illigal chunk size:
> `%s\'\n" _ line);
> return NO;
> }
>
> The original version just continues, and returns a zero, causing the chunk
> decoder to screw up. I just added the "return NO" code.
>
> Regards,
>
> Jens
>
> /*
> ** Chunked Decoder stream
> */
> PRIVATE BOOL HTChunkDecode_header (HTStream * me)
> {
> char * line = HTChunk_data(me->buf);
> if (line) {
>
> char *errstr = NULL;
> me->left = strtol(line, &errstr, 16); /* hex! */
> HTTRACE(STREAM_TRACE, "Chunked..... `%s\' chunk size: %X\n"
> _ line _ me->left);
>
> if (errstr == line) {
> HTDEBUGBREAK("Chunk decoder received illigal chunk size:
> `%s\'\n" _ line);
> return NO;
> }
>
> if (me->left > 0) {
> me->total += me->left;
>
> /* Look for arguments */
>
> HTChunk_clear(me->buf);
>
> } else if (me->left == 0) /*
> Last chunk */
>
> me->lastchunk = YES;
>
> else if (me->left < 0)
>
> return NO;
>
> return YES;
> }
>
> return NO;
> }
Received on Tuesday, 27 March 2001 12:01:42 UTC