From 811bb7461e2a22f24904d58f0b02f860e12ffe5b Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Thu, 4 Feb 2016 00:10:08 +0100 Subject: [PATCH] Don't serialize PeerPtr value in RPC connections PeerPtr is used in RPC signatures for enabling receivers to send replies to a particular peer rather than broadcast to all connected ones. To enable this, the SignalProxy transparently replaces the bogus value received over the network with the actual address of the local Peer instance. Because the actual value isn't needed on the wire, it should be serialized as null. This also prevents the accidental use of a bogus remote pointer address. --- src/common/peer.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/common/peer.cpp b/src/common/peer.cpp index 3785326c..c076806f 100644 --- a/src/common/peer.cpp +++ b/src/common/peer.cpp @@ -34,20 +34,23 @@ AuthHandler *Peer::authHandler() const } -// Note that we need to use a fixed-size integer instead of uintptr_t, in order -// to avoid issues with different architectures for client and core. -// In practice, we'll never really have to restore the real value of a PeerPtr from -// a QVariant. +// PeerPtr is used in RPC signatures for enabling receivers to send replies +// to a particular peer rather than broadcast to all connected ones. +// To enable this, the SignalProxy transparently replaces the bogus value +// received over the network with the actual address of the local Peer +// instance. Because the actual value isn't needed on the wire, it is +// serialized as null. QDataStream &operator<<(QDataStream &out, PeerPtr ptr) { - out << reinterpret_cast(ptr); + Q_UNUSED(ptr); + out << static_cast(0); // 64 bit for historic reasons return out; } QDataStream &operator>>(QDataStream &in, PeerPtr &ptr) { + ptr = nullptr; quint64 value; in >> value; - ptr = reinterpret_cast(value); return in; } -- 2.20.1