Changeset 8005


Ignore:
Timestamp:
Mar 3, 2009, 8:06:44 PM (13 years ago)
Author:
charles
Message:

(1.5x libT) when a "torrent-set" request is sent to change files' priorities and/or download flags, and some of the file indices are out-of-range, return an error message in the rpc response's "result" string.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/1.5x/libtransmission/rpcimpl.c

    r7855 r8005  
    528528***/
    529529
    530 static void
     530static const char*
    531531setFilePriorities( tr_torrent * tor,
    532532                   int          priority,
    533533                   tr_benc *    list )
    534534{
    535     int               i;
    536     int64_t           tmp;
    537     int               fileCount = 0;
    538     const int         n = tr_bencListSize( list );
     535    int i;
     536    int64_t tmp;
     537    int fileCount = 0;
     538    const int n = tr_bencListSize( list );
     539    const char * errmsg = NULL;
    539540    tr_file_index_t * files = tr_new0( tr_file_index_t, tor->info.fileCount );
    540541
    541542    if( n )
    542543    {
    543         for( i = 0; i < n; ++i )
    544             if( tr_bencGetInt( tr_bencListChild( list, i ), &tmp ) )
    545                 if( 0 <= tmp && tmp < tor->info.fileCount )
     544        for( i = 0; i < n; ++i ) {
     545            if( tr_bencGetInt( tr_bencListChild( list, i ), &tmp ) ) {
     546                if( 0 <= tmp && tmp < tor->info.fileCount ) {
    546547                    files[fileCount++] = tmp;
     548                } else {
     549                    errmsg = "file index out of range";
     550                }
     551            }
     552        }
    547553    }
    548554    else /* if empty set, apply to all */
     
    557563
    558564    tr_free( files );
    559 }
    560 
    561 static void
     565    return errmsg;
     566}
     567
     568static const char*
    562569setFileDLs( tr_torrent * tor,
    563570            int          do_download,
    564571            tr_benc *    list )
    565572{
    566     int               i;
    567     int64_t           tmp;
    568     int               fileCount = 0;
    569     const int         n = tr_bencListSize( list );
     573    int i;
     574    int64_t tmp;
     575    int fileCount = 0;
     576    const int n = tr_bencListSize( list );
     577    const char * errmsg = NULL;
    570578    tr_file_index_t * files = tr_new0( tr_file_index_t, tor->info.fileCount );
    571579
    572580    if( n ) /* if argument list, process them */
    573581    {
    574         for( i = 0; i < n; ++i )
    575             if( tr_bencGetInt( tr_bencListChild( list, i ), &tmp ) )
    576                 if( 0 <= tmp && tmp < tor->info.fileCount )
     582        for( i = 0; i < n; ++i ) {
     583            if( tr_bencGetInt( tr_bencListChild( list, i ), &tmp ) ) {
     584                if( 0 <= tmp && tmp < tor->info.fileCount ) {
    577585                    files[fileCount++] = tmp;
     586                } else {
     587                    errmsg = "file index out of range";
     588                }
     589            }
     590        }
    578591    }
    579592    else /* if empty set, apply to all */
     
    588601
    589602    tr_free( files );
     603    return errmsg;
    590604}
    591605
     
    596610            struct tr_rpc_idle_data  * idle_data )
    597611{
    598     int           i, torrentCount;
     612    const char * errmsg = NULL;
     613    int i, torrentCount;
    599614    tr_torrent ** torrents = getTorrents( session, args_in, &torrentCount );
    600615
     
    613628        if( tr_bencDictFindInt( args_in, "peer-limit", &tmp ) )
    614629            tr_torrentSetPeerLimit( tor, tmp );
    615         if( tr_bencDictFindList( args_in, "priority-high", &files ) )
    616             setFilePriorities( tor, TR_PRI_HIGH, files );
    617         if( tr_bencDictFindList( args_in, "priority-low", &files ) )
    618             setFilePriorities( tor, TR_PRI_LOW, files );
    619         if( tr_bencDictFindList( args_in, "priority-normal", &files ) )
    620             setFilePriorities( tor, TR_PRI_NORMAL, files );
     630        if( !errmsg &&  tr_bencDictFindList( args_in, "priority-high", &files ) )
     631            errmsg = setFilePriorities( tor, TR_PRI_HIGH, files );
     632        if( !errmsg && tr_bencDictFindList( args_in, "priority-low", &files ) )
     633            errmsg = setFilePriorities( tor, TR_PRI_LOW, files );
     634        if( !errmsg && tr_bencDictFindList( args_in, "priority-normal", &files ) )
     635            errmsg = setFilePriorities( tor, TR_PRI_NORMAL, files );
    621636        if( tr_bencDictFindInt( args_in, "speed-limit-down", &tmp ) )
    622637            tr_torrentSetSpeedLimit( tor, TR_DOWN, tmp );
     
    635650
    636651    tr_free( torrents );
    637     return NULL;
     652    return errmsg;
    638653}
    639654
Note: See TracChangeset for help on using the changeset viewer.