1
0
Fork 0
mirror of https://github.com/transmission/transmission synced 2025-03-11 14:43:42 +00:00

fix a null pointer dereference

This commit is contained in:
Charles Kerr 2008-10-05 22:51:18 +00:00
parent 2a5e92fb7c
commit 5391f768f4

View file

@ -1310,38 +1310,39 @@ tr_peerMgrGetPeers( tr_peerMgr * manager,
const uint8_t * torrentHash, const uint8_t * torrentHash,
tr_pex ** setme_pex ) tr_pex ** setme_pex )
{ {
const Torrent * t = getExistingTorrent( (tr_peerMgr*)manager, int peerCount = 0;
torrentHash ); const Torrent * t;
int i, peerCount;
const tr_peer ** peers;
tr_pex * pex;
tr_pex * walk;
managerLock( manager ); managerLock( manager );
peers = (const tr_peer **) tr_ptrArrayPeek( t->peers, &peerCount ); t = getExistingTorrent( (tr_peerMgr*)manager, torrentHash );
pex = walk = tr_new( tr_pex, peerCount ); if( !t )
{
*setme_pex = NULL;
}
else
{
int i;
const tr_peer ** peers = (const tr_peer **) tr_ptrArrayPeek( t->peers, &peerCount );
tr_pex * pex = tr_new( tr_pex, peerCount );
tr_pex * walk = pex;
for( i = 0; i < peerCount; ++i, ++walk ) for( i = 0; i < peerCount; ++i, ++walk )
{ {
const tr_peer * peer = peers[i]; const tr_peer * peer = peers[i];
walk->in_addr = peer->in_addr; walk->in_addr = peer->in_addr;
walk->port = peer->port; walk->port = peer->port;
walk->flags = 0; walk->flags = 0;
if( peerPrefersCrypto( peer ) ) walk->flags |= if( peerPrefersCrypto( peer ) ) walk->flags |= ADDED_F_ENCRYPTION_FLAG;
ADDED_F_ENCRYPTION_FLAG;
if( peer->progress >= 1.0 ) walk->flags |= ADDED_F_SEED_FLAG; if( peer->progress >= 1.0 ) walk->flags |= ADDED_F_SEED_FLAG;
} }
assert( ( walk - pex ) == peerCount ); assert( ( walk - pex ) == peerCount );
qsort( pex, peerCount, sizeof( tr_pex ), tr_pexCompare ); qsort( pex, peerCount, sizeof( tr_pex ), tr_pexCompare );
*setme_pex = pex; *setme_pex = pex;
}
managerUnlock( manager ); managerUnlock( manager );
return peerCount; return peerCount;
} }