mirror of
https://github.com/transmission/transmission
synced 2024-12-26 09:37:56 +00:00
fix tracker crash caused by the new add/remove tracker code reported by BentMyWookie
This commit is contained in:
parent
e0345e462a
commit
b92e88b29c
2 changed files with 20 additions and 15 deletions
|
@ -115,15 +115,20 @@ struct tr_tracker
|
||||||
***/
|
***/
|
||||||
|
|
||||||
static const tr_tracker_info *
|
static const tr_tracker_info *
|
||||||
getCurrentAddressFromTorrent( const tr_tracker * t, const tr_torrent * tor )
|
getCurrentAddressFromTorrent( tr_tracker * t, const tr_torrent * tor )
|
||||||
{
|
{
|
||||||
|
/* user might have removed trackers,
|
||||||
|
* so check to make sure our current index is in-bounds */
|
||||||
|
if( t->trackerIndex >= tor->info.trackerCount )
|
||||||
|
t->trackerIndex = 0;
|
||||||
|
|
||||||
assert( t->trackerIndex >= 0 );
|
assert( t->trackerIndex >= 0 );
|
||||||
assert( t->trackerIndex < tor->info.trackerCount );
|
assert( t->trackerIndex < tor->info.trackerCount );
|
||||||
return tor->info.trackers + t->trackerIndex;
|
return tor->info.trackers + t->trackerIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
static const tr_tracker_info *
|
static const tr_tracker_info *
|
||||||
getCurrentAddress( const tr_tracker * t )
|
getCurrentAddress( tr_tracker * t )
|
||||||
{
|
{
|
||||||
const tr_torrent * torrent;
|
const tr_torrent * torrent;
|
||||||
if(( torrent = tr_torrentFindFromHash( t->session, t->hash )))
|
if(( torrent = tr_torrentFindFromHash( t->session, t->hash )))
|
||||||
|
@ -132,7 +137,7 @@ getCurrentAddress( const tr_tracker * t )
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
trackerSupportsScrape( const tr_tracker * t, const tr_torrent * tor )
|
trackerSupportsScrape( tr_tracker * t, const tr_torrent * tor )
|
||||||
{
|
{
|
||||||
const tr_tracker_info * info = getCurrentAddressFromTorrent( t, tor );
|
const tr_tracker_info * info = getCurrentAddressFromTorrent( t, tor );
|
||||||
return info && info->scrape;
|
return info && info->scrape;
|
||||||
|
@ -554,7 +559,7 @@ freeRequest( struct tr_tracker_request * req )
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
buildTrackerRequestURI( const tr_tracker * t,
|
buildTrackerRequestURI( tr_tracker * t,
|
||||||
const tr_torrent * torrent,
|
const tr_torrent * torrent,
|
||||||
const char * eventName,
|
const char * eventName,
|
||||||
struct evbuffer * buf )
|
struct evbuffer * buf )
|
||||||
|
@ -592,7 +597,7 @@ buildTrackerRequestURI( const tr_tracker * t,
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tr_tracker_request*
|
static struct tr_tracker_request*
|
||||||
createRequest( tr_session * session, const tr_tracker * tracker, int reqtype )
|
createRequest( tr_session * session, tr_tracker * tracker, int reqtype )
|
||||||
{
|
{
|
||||||
static const char* strings[] = { "started", "completed", "stopped", "", "err" };
|
static const char* strings[] = { "started", "completed", "stopped", "", "err" };
|
||||||
const tr_torrent * torrent = tr_torrentFindFromHash( session, tracker->hash );
|
const tr_torrent * torrent = tr_torrentFindFromHash( session, tracker->hash );
|
||||||
|
@ -617,7 +622,7 @@ createRequest( tr_session * session, const tr_tracker * tracker, int reqtype )
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct tr_tracker_request*
|
static struct tr_tracker_request*
|
||||||
createScrape( tr_session * session, const tr_tracker * tracker )
|
createScrape( tr_session * session, tr_tracker * tracker )
|
||||||
{
|
{
|
||||||
const tr_tracker_info * a = getCurrentAddress( tracker );
|
const tr_tracker_info * a = getCurrentAddress( tracker );
|
||||||
struct tr_tracker_request * req;
|
struct tr_tracker_request * req;
|
||||||
|
@ -726,7 +731,7 @@ invokeRequest( void * vreq )
|
||||||
static void ensureGlobalsExist( tr_session * );
|
static void ensureGlobalsExist( tr_session * );
|
||||||
|
|
||||||
static void
|
static void
|
||||||
enqueueScrape( tr_session * session, const tr_tracker * tracker )
|
enqueueScrape( tr_session * session, tr_tracker * tracker )
|
||||||
{
|
{
|
||||||
struct tr_tracker_request * req;
|
struct tr_tracker_request * req;
|
||||||
ensureGlobalsExist( session );
|
ensureGlobalsExist( session );
|
||||||
|
@ -735,7 +740,7 @@ enqueueScrape( tr_session * session, const tr_tracker * tracker )
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
enqueueRequest( tr_session * session, const tr_tracker * tracker, int reqtype )
|
enqueueRequest( tr_session * session, tr_tracker * tracker, int reqtype )
|
||||||
{
|
{
|
||||||
struct tr_tracker_request * req;
|
struct tr_tracker_request * req;
|
||||||
ensureGlobalsExist( session );
|
ensureGlobalsExist( session );
|
||||||
|
@ -899,7 +904,7 @@ tr_trackerUnsubscribe( tr_tracker * t,
|
||||||
}
|
}
|
||||||
|
|
||||||
const tr_tracker_info *
|
const tr_tracker_info *
|
||||||
tr_trackerGetAddress( const tr_tracker * t )
|
tr_trackerGetAddress( tr_tracker * t )
|
||||||
{
|
{
|
||||||
return getCurrentAddress( t );
|
return getCurrentAddress( t );
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,12 +60,12 @@ typedef struct
|
||||||
}
|
}
|
||||||
tr_tracker_event;
|
tr_tracker_event;
|
||||||
|
|
||||||
tr_publisher_tag tr_trackerSubscribe ( struct tr_tracker * tag,
|
tr_publisher_tag tr_trackerSubscribe ( struct tr_tracker * tag,
|
||||||
tr_delivery_func func,
|
tr_delivery_func func,
|
||||||
void * user );
|
void * user );
|
||||||
|
|
||||||
void tr_trackerUnsubscribe ( struct tr_tracker * tracker,
|
void tr_trackerUnsubscribe ( struct tr_tracker * tracker,
|
||||||
tr_publisher_tag tag );
|
tr_publisher_tag tag );
|
||||||
|
|
||||||
/***
|
/***
|
||||||
****
|
****
|
||||||
|
@ -84,7 +84,7 @@ void tr_trackerReannounce ( struct tr_tracker * );
|
||||||
|
|
||||||
void tr_trackerChangeMyPort ( struct tr_tracker * );
|
void tr_trackerChangeMyPort ( struct tr_tracker * );
|
||||||
|
|
||||||
const tr_tracker_info * tr_trackerGetAddress( const struct tr_tracker * );
|
const tr_tracker_info * tr_trackerGetAddress( struct tr_tracker * );
|
||||||
|
|
||||||
int tr_trackerCanManualAnnounce ( const struct tr_tracker * );
|
int tr_trackerCanManualAnnounce ( const struct tr_tracker * );
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue