Changeset 6484


Ignore:
Timestamp:
Aug 11, 2008, 5:00:23 PM (13 years ago)
Author:
charles
Message:

(libT) #1176: memory leaks in libtransmission

Location:
trunk/libtransmission
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/bencode-test.c

    r6334 r6484  
    325325        return val;
    326326
    327     benc_str = "d5:helloi1e5:worldi2e3:fooli1ei2ei3ee";
     327    benc_str = "d5:helloi1e5:worldi2e3:fooli1ei2ei3eee";
    328328    expected = "{\"foo\":[1,2,3],\"hello\":1,\"world\":2}";
    329329    if(( val = testJSONSnippet( benc_str, expected )))
    330330        return val;
    331331
    332     benc_str = "d5:helloi1e5:worldi2e3:fooli1ei2ei3ed1:ai0eee";
     332    benc_str = "d5:helloi1e5:worldi2e3:fooli1ei2ei3ed1:ai0eeee";
    333333    expected = "{\"foo\":[1,2,3,{\"a\":0}],\"hello\":1,\"world\":2}";
    334334    if(( val = testJSONSnippet( benc_str, expected )))
  • trunk/libtransmission/bencode.c

    r6468 r6484  
    201201 * attack via maliciously-crafted bencoded data. (#667)
    202202 */
    203 int
    204 tr_bencParse( const void     * buf_in,
    205               const void     * bufend_in,
    206               tr_benc        * top,
    207               const uint8_t ** setme_end )
     203static int
     204tr_bencParseImpl( const void     * buf_in,
     205                  const void     * bufend_in,
     206                  tr_benc        * top,
     207                  tr_ptrArray    * parentStack,
     208                  const uint8_t ** setme_end )
    208209{
    209210    int err;
    210211    const uint8_t * buf = buf_in;
    211212    const uint8_t * bufend = bufend_in;
    212     tr_ptrArray * parentStack = tr_ptrArrayNew( );
    213213
    214214    tr_bencInit( top, 0 );
     
    265265
    266266            node = tr_ptrArrayBack( parentStack );
    267             if( tr_bencIsDict( node ) && ( node->val.l.count % 2 ) )
    268                 return TR_ERROR; /* odd # of children in dict */
     267            if( tr_bencIsDict( node ) && ( node->val.l.count % 2 ) ) {
     268                /* odd # of children in dict */
     269                tr_bencFree( &node->val.l.vals [ --node->val.l.count ] );
     270                return TR_ERROR;
     271            }
    269272
    270273            tr_ptrArrayPop( parentStack );
     
    284287
    285288            node = getNode( top, parentStack, TYPE_STR );
    286             if( !node )
     289            if( !node ) {
     290                tr_free( str );
    287291                return TR_ERROR;
     292            }
    288293
    289294            tr_bencInitStr( node, str, str_len, 0 );
     
    304309        *setme_end = buf;
    305310
     311    return err;
     312}
     313
     314int
     315tr_bencParse( const void     * buf,
     316              const void     * end,
     317              tr_benc        * top,
     318              const uint8_t ** setme_end )
     319{
     320    tr_ptrArray * parentStack = tr_ptrArrayNew( );
     321    top->type = 0; /* not initialized yet */
     322    const int err = tr_bencParseImpl( buf, end, top, parentStack, setme_end );
     323    if( err )
     324        tr_bencFree( top );
    306325    tr_ptrArrayFree( parentStack, NULL );
    307326    return err;
  • trunk/libtransmission/makemeta.c

    r6451 r6484  
    211211        tr_snprintf( b->errfile, sizeof( b->errfile ), b->files[fileIndex].filename );
    212212        b->result = TR_MAKEMETA_IO_READ;
     213        tr_free( buf );
    213214        tr_free( ret );
    214215        return NULL;
     
    241242                        tr_snprintf( b->errfile, sizeof( b->errfile ), b->files[fileIndex].filename );
    242243                        b->result = TR_MAKEMETA_IO_READ;
     244                        tr_free( buf );
    243245                        tr_free( ret );
    244246                        return NULL;
Note: See TracChangeset for help on using the changeset viewer.