fix: test for tr_peerIo.gotError function pointer before use (#4051)

This commit is contained in:
Charles Kerr 2022-10-29 16:59:24 -05:00 committed by GitHub
parent cdf817f2e7
commit d5ef1ea80a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 13 deletions

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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;