Changeset 6717


Ignore:
Timestamp:
Sep 5, 2008, 7:11:30 PM (13 years ago)
Author:
charles
Message:

(libT) #1255: fails to parse announce URLs that have leading or trailing spaces

Location:
trunk/libtransmission
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/metainfo.c

    r6613 r6717  
    264264            const int tierSize = tr_bencListSize( tier );
    265265            for( j=0; j<tierSize; ++j ) {
    266                 const char * str;
    267                 if( tr_bencGetStr( tr_bencListChild( tier, j ), &str )
    268                         && tr_httpIsValidURL( str ) )  {
    269                     tr_tracker_info * t = trackers + trackerCount++;
    270                     t->tier = i;
    271                     t->announce = tr_strdup( str );
    272                     t->scrape = announceToScrape( str );
    273                     /*fprintf( stderr, "tier %d: %s\n", i, str );*/
     266                if( tr_bencGetStr( tr_bencListChild( tier, j ), &str ) ) {
     267                    char * url = tr_strstrip( tr_strdup( str ) );
     268                    if( tr_httpIsValidURL( url ) )  {
     269                        tr_tracker_info * t = trackers + trackerCount++;
     270                        t->tier = i;
     271                        t->announce = tr_strdup( url );
     272                        t->scrape = announceToScrape( url );
     273                    }
     274                    tr_free( url );
    274275                }
    275276            }
     
    285286    /* Regular announce value */
    286287    if( !trackerCount
    287         && tr_bencDictFindStr( meta, "announce", &str )
    288         && tr_httpIsValidURL( str ) )
    289     {
    290         trackers = tr_new0( tr_tracker_info, 1 );
    291         trackers[trackerCount].tier = 0;
    292         trackers[trackerCount].announce = tr_strdup( str );
    293         trackers[trackerCount++].scrape = announceToScrape( str );
    294         /*fprintf( stderr, "single announce: [%s]\n", str );*/
     288        && tr_bencDictFindStr( meta, "announce", &str ) )
     289    {
     290        char * url = tr_strstrip( tr_strdup( str ) );
     291        if( tr_httpIsValidURL( url ) )
     292        {
     293            trackers = tr_new0( tr_tracker_info, 1 );
     294            trackers[trackerCount].tier = 0;
     295            trackers[trackerCount].announce = tr_strdup( url );
     296            trackers[trackerCount++].scrape = announceToScrape( url );
     297            /*fprintf( stderr, "single announce: [%s]\n", url );*/
     298        }
     299        tr_free( url );
    295300    }
    296301
  • trunk/libtransmission/utils-test.c

    r6613 r6717  
    8686}
    8787
     88static int
     89test_strstrip( void )
     90{
     91    char *in, *out;
     92
     93    /* strstrip */
     94    in = tr_strdup( "   test    " );
     95    out = tr_strstrip( in );
     96    check( in == out );
     97    check( !strcmp( in, "test" ) );
     98    tr_free( in );
     99
     100    /* strstrip */
     101    in = tr_strdup( " test test " );
     102    out = tr_strstrip( in );
     103    check( in == out );
     104    check( !strcmp( in, "test test" ) );
     105    tr_free( in );
     106
     107    /* strstrip */
     108    in = tr_strdup( "test" );
     109    out = tr_strstrip( in );
     110    check( in == out );
     111    check( !strcmp( in, "test" ) );
     112    tr_free( in );
     113
     114    return 0;
     115}
     116
    88117int
    89118main( void )
     
    107136    tr_free( out );
    108137
     138    if(( i = test_strstrip( )))
     139        return i;
     140
    109141    /* simple bitfield tests */
    110142    for( l=0; l<NUM_LOOPS; ++l )
  • trunk/libtransmission/utils.c

    r6651 r6717  
    674674****/
    675675
     676char*
     677tr_strstrip( char * str )
     678{
     679    if( str != NULL )
     680    {
     681        size_t pos;
     682        size_t len = strlen( str );
     683
     684        while( len && isspace( str[len-1] ) )
     685            --len;
     686        str[len] = '\0';
     687
     688        for( pos=0; pos<len && isspace( str[pos] ); )
     689            ++pos;
     690
     691        len -= pos;
     692        memmove( str, str+pos, len );
     693        str[len] = '\0';
     694    }
     695
     696    return str;
     697}
     698
     699
     700/****
     701*****
     702****/
     703
    676704tr_bitfield*
    677705tr_bitfieldNew( size_t bitCount )
  • trunk/libtransmission/utils.h

    r6627 r6717  
    205205const char* tr_strerror( int );
    206206
     207char* tr_strstrip( char * str );
     208
    207209/***
    208210****
Note: See TracChangeset for help on using the changeset viewer.