fix: test for tr_peerIo.gotError function pointer before use (#4051)
This commit is contained in:
parent
cdf817f2e7
commit
d5ef1ea80a
|
@ -1027,7 +1027,7 @@ static bool fireDoneFunc(tr_handshake* handshake, bool is_connected)
|
|||
static ReadState tr_handshakeDone(tr_handshake* handshake, bool is_connected)
|
||||
{
|
||||
tr_logAddTraceHand(handshake, is_connected ? "handshakeDone: connected" : "handshakeDone: aborting");
|
||||
handshake->io->setCallbacks(nullptr, nullptr, nullptr, nullptr);
|
||||
handshake->io->clearCallbacks();
|
||||
|
||||
bool const success = fireDoneFunc(handshake, is_connected);
|
||||
delete handshake;
|
||||
|
|
|
@ -732,10 +732,7 @@ tr_peerIo::~tr_peerIo()
|
|||
auto const lock = session->unique_lock();
|
||||
TR_ASSERT(session->events != nullptr);
|
||||
|
||||
this->canRead = nullptr;
|
||||
this->didWrite = nullptr;
|
||||
this->gotError = nullptr;
|
||||
|
||||
clearCallbacks();
|
||||
tr_logAddTraceIo(this, "in tr_peerIo destructor");
|
||||
event_disable(this, EV_READ | EV_WRITE);
|
||||
io_close_socket(this);
|
||||
|
@ -756,7 +753,7 @@ void tr_peerIo::setCallbacks(tr_can_read_cb readcb, tr_did_write_cb writecb, tr_
|
|||
|
||||
void tr_peerIo::clear()
|
||||
{
|
||||
setCallbacks(nullptr, nullptr, nullptr, nullptr);
|
||||
clearCallbacks();
|
||||
setEnabled(TR_UP, false);
|
||||
setEnabled(TR_DOWN, false);
|
||||
io_close_socket(this);
|
||||
|
@ -996,7 +993,12 @@ static size_t tr_peerIoTryWrite(tr_peerIo* io, size_t howmuch, tr_error** error)
|
|||
What,
|
||||
my_error->code,
|
||||
my_error->message));
|
||||
io->gotError(io, What, io->userData);
|
||||
|
||||
if (io->gotError != nullptr)
|
||||
{
|
||||
io->gotError(io, What, io->userData);
|
||||
}
|
||||
|
||||
tr_error_propagate(error, &my_error);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -49,12 +49,6 @@ enum ReadState
|
|||
READ_ERR
|
||||
};
|
||||
|
||||
using tr_can_read_cb = ReadState (*)(tr_peerIo* io, void* user_data, size_t* setme_piece_byte_count);
|
||||
|
||||
using tr_did_write_cb = void (*)(tr_peerIo* io, size_t bytesWritten, bool wasPieceData, void* userData);
|
||||
|
||||
using tr_net_error_cb = void (*)(tr_peerIo* io, short what, void* userData);
|
||||
|
||||
auto inline constexpr PEER_IO_MAGIC_NUMBER = 206745;
|
||||
|
||||
struct evbuffer_deleter
|
||||
|
@ -235,8 +229,16 @@ public:
|
|||
return torrent_hash_;
|
||||
}
|
||||
|
||||
using tr_can_read_cb = ReadState (*)(tr_peerIo* io, void* user_data, size_t* setme_piece_byte_count);
|
||||
using tr_did_write_cb = void (*)(tr_peerIo* io, size_t bytesWritten, bool wasPieceData, void* userData);
|
||||
using tr_net_error_cb = void (*)(tr_peerIo* io, short what, void* userData);
|
||||
void setCallbacks(tr_can_read_cb readcb, tr_did_write_cb writecb, tr_net_error_cb errcb, void* user_data);
|
||||
|
||||
void clearCallbacks()
|
||||
{
|
||||
setCallbacks(nullptr, nullptr, nullptr, nullptr);
|
||||
}
|
||||
|
||||
struct tr_peer_socket socket = {};
|
||||
|
||||
tr_session* const session;
|
||||
|
|
Loading…
Reference in New Issue