Changeset 10842


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

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

Location:
trunk/libtransmission
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/torrent-magnet.c

    r10774 r10842  
    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 );
  • trunk/libtransmission/torrent.c

    r10839 r10842  
    541541 * (2) pieceSize must be a multiple of block size
    542542 */
    543 static uint32_t
    544 getBlockSize( uint32_t pieceSize )
     543uint32_t
     544tr_getBlockSize( uint32_t pieceSize )
    545545{
    546546    uint32_t b = pieceSize;
     
    562562    tr_info * info = &tor->info;
    563563
    564     tor->blockSize = getBlockSize( info->pieceSize );
     564    tor->blockSize = tr_getBlockSize( info->pieceSize );
    565565
    566566    if( info->pieceSize )
     
    757757        result = TR_PARSE_ERR;
    758758
    759     if( didParse && hasInfo && !getBlockSize( setmeInfo->pieceSize ) )
     759    if( didParse && hasInfo && !tr_getBlockSize( setmeInfo->pieceSize ) )
    760760        result = TR_PARSE_ERR;
    761761
  • trunk/libtransmission/torrent.h

    r10800 r10842  
    383383    return tor->info.name;
    384384}
     385
     386uint32_t tr_getBlockSize( uint32_t pieceSize );
    385387
    386388/**
Note: See TracChangeset for help on using the changeset viewer.