mirror of
https://github.com/zeromq/libzmq.git
synced 2024-12-13 02:42:58 +01:00
add sanity check in msg_t::rm_refs in order to avoid invalid memory access with u.zclmsg.refcnt
This commit is contained in:
parent
6ab66ca51a
commit
ccb13e1732
@ -467,7 +467,7 @@ bool zmq::msg_t::rm_refs (int refs_)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// The only message type that needs special care are long and zcopy messages.
|
// The only message type that needs special care are long and zcopy messages.
|
||||||
if (!u.lmsg.content->refcnt.sub (refs_)) {
|
if (u.base.type == type_lmsg && !u.lmsg.content->refcnt.sub(refs_)) {
|
||||||
// We used "placement new" operator to initialize the reference
|
// We used "placement new" operator to initialize the reference
|
||||||
// counter so we call the destructor explicitly now.
|
// counter so we call the destructor explicitly now.
|
||||||
u.lmsg.content->refcnt.~atomic_counter_t ();
|
u.lmsg.content->refcnt.~atomic_counter_t ();
|
||||||
@ -479,7 +479,7 @@ bool zmq::msg_t::rm_refs (int refs_)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!u.zclmsg.refcnt->sub (refs_)) {
|
if (is_zcmsg() && !u.zclmsg.refcnt->sub(refs_)) {
|
||||||
// storage for rfcnt is provided externally
|
// storage for rfcnt is provided externally
|
||||||
if (u.zclmsg.ffn) {
|
if (u.zclmsg.ffn) {
|
||||||
u.zclmsg.ffn(u.zclmsg.data, u.zclmsg.hint);
|
u.zclmsg.ffn(u.zclmsg.data, u.zclmsg.hint);
|
||||||
|
Loading…
Reference in New Issue
Block a user