Changeset 10843


Ignore:
Timestamp:
Jun 24, 2010, 8:36:10 PM (12 years ago)
Author:
charles
Message:

(2.0x) #3339 "crash when download some magnet links" -- fixed

Location:
branches/2.0x/libtransmission
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/2.0x/libtransmission/torrent-magnet.c

    r10774 r10843  
    254254                {
    255255                    tr_bool hasInfo;
     256                    tr_info info;
     257                    int infoDictLength;
    256258
    257259                    /* remove any old .torrent and .resume files */
     
    262264                    tr_bencMergeDicts( tr_bencDictAddDict( &newMetainfo, "info", 0 ), &infoDict );
    263265
    264                     success = tr_metainfoParse( tor->session, &newMetainfo, &tor->info, &hasInfo, &tor->infoDictLength );
    265 
    266                     assert( hasInfo );
    267                     assert( success );
    268 
    269                     /* save the new .torrent file */
    270                     tr_bencToFile( &newMetainfo, TR_FMT_BENC, tor->info.torrent );
    271                     tr_sessionSetTorrentFile( tor->session, tor->info.hashString, tor->info.torrent );
    272                     tr_torrentGotNewInfoDict( tor );
    273                     tr_torrentSetDirty( tor );
     266                    memset( &info, 0, sizeof( tr_info ) );
     267                    success = tr_metainfoParse( tor->session, &newMetainfo, &info, &hasInfo, &infoDictLength );
     268
     269                    if( success && !tr_getBlockSize( info.pieceSize ) )
     270                    {
     271                        tr_torrentSetLocalError( tor, _( "Magnet torrent's metadata is not usable" ) );
     272                        success = FALSE;
     273                    }
     274
     275                    if( success )
     276                    {
     277                        /* keep the new info */
     278                        tor->info = info;
     279                        tor->infoDictLength = infoDictLength;
     280
     281                        /* save the new .torrent file */
     282                        tr_bencToFile( &newMetainfo, TR_FMT_BENC, tor->info.torrent );
     283                        tr_sessionSetTorrentFile( tor->session, tor->info.hashString, tor->info.torrent );
     284                        tr_torrentGotNewInfoDict( tor );
     285                        tr_torrentSetDirty( tor );
     286                    }
    274287
    275288                    tr_bencFree( &newMetainfo );
  • branches/2.0x/libtransmission/torrent.c

    r10774 r10843  
    545545 * (2) pieceSize must be a multiple of block size
    546546 */
    547 static uint32_t
    548 getBlockSize( uint32_t pieceSize )
     547uint32_t
     548tr_getBlockSize( uint32_t pieceSize )
    549549{
    550550    uint32_t b = pieceSize;
     
    566566    tr_info * info = &tor->info;
    567567
    568     tor->blockSize = getBlockSize( info->pieceSize );
     568    tor->blockSize = tr_getBlockSize( info->pieceSize );
    569569
    570570    if( info->pieceSize )
     
    762762        result = TR_PARSE_ERR;
    763763
    764     if( didParse && hasInfo && !getBlockSize( setmeInfo->pieceSize ) )
     764    if( didParse && hasInfo && !tr_getBlockSize( setmeInfo->pieceSize ) )
    765765        result = TR_PARSE_ERR;
    766766
  • branches/2.0x/libtransmission/torrent.h

    r10774 r10843  
    384384    return tor->info.name;
    385385}
     386
     387uint32_t tr_getBlockSize( uint32_t pieceSize );
    386388
    387389/**
Note: See TracChangeset for help on using the changeset viewer.