Changeset 1141 for trunk


Ignore:
Timestamp:
Nov 28, 2006, 9:45:37 PM (15 years ago)
Author:
joshe
Message:

Fix an infinite loop triggered by an invalid HTTP chunked response.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/http.c

    r920 r1141  
    680680{
    681681    char * buf;
    682     int    num, ii, len;
     682    int    num, ii, len, lastnum;
    683683
    684684    switch( http->lengthtype )
     
    703703
    704704        case HTTP_LENGTH_CHUNKED:
    705             buf = http->header.buf;
     705            buf     = http->header.buf;
     706            lastnum = -1;
    706707            while( http->header.used > http->chunkoff + http->chunklen )
    707708            {
    708709                num = http->chunkoff + http->chunklen;
     710                if( lastnum == num )
     711                {
     712                    /* ugh, some trackers send Transfer-encoding: chunked
     713                       and then don't encode the body */
     714                    http->lengthtype = HTTP_LENGTH_EOF;
     715                    return checklength( http );
     716                }
     717                lastnum = num;
    709718                while(  http->header.used > num && NL( buf[num] ) )
    710719                {
     
    722731                    if( 0 == len )
    723732                    {
     733                        /* XXX should handle invalid length
     734                               differently than 0 length chunk */
    724735                        http->header.used = http->chunkoff + http->chunklen;
    725736                        return 1;
Note: See TracChangeset for help on using the changeset viewer.