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:
parent
2a5e92fb7c
commit
5391f768f4
1 changed files with 24 additions and 23 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue