diff --git a/algparam.cpp b/algparam.cpp index 42962ffa5..9976fb283 100644 --- a/algparam.cpp +++ b/algparam.cpp @@ -61,6 +61,7 @@ AlgorithmParameters::AlgorithmParameters(const AlgorithmParameters &x) AlgorithmParameters & AlgorithmParameters::operator=(const AlgorithmParameters &x) { + // Should this be guarded for operations on itself??? This class befuddles me at times... m_next.reset(const_cast(x).m_next.release()); return *this; } diff --git a/ec2n.cpp b/ec2n.cpp index f54cb087b..01c7e3fc2 100644 --- a/ec2n.cpp +++ b/ec2n.cpp @@ -237,9 +237,11 @@ const EC2N::Point& EC2N::Double(const Point &P) const /* EcPrecomputation& EcPrecomputation::operator=(const EcPrecomputation &rhs) { - m_ec = rhs.m_ec; - m_ep = rhs.m_ep; - m_ep.m_group = m_ec.get(); + if (this != &rhs) + { + DL_GroupPrecomputation::operator=(rhs); + m_ec = rhs.m_ec; + } return *this; } diff --git a/gf2n.cpp b/gf2n.cpp index 7ff02f331..004eb780b 100644 --- a/gf2n.cpp +++ b/gf2n.cpp @@ -211,6 +211,7 @@ unsigned int PolynomialMod2::Parity() const PolynomialMod2& PolynomialMod2::operator=(const PolynomialMod2& t) { + // Assign guards for self-assignment reg.Assign(t.reg); return *this; } diff --git a/queue.cpp b/queue.cpp index 3beb731c3..4a319cb5b 100644 --- a/queue.cpp +++ b/queue.cpp @@ -428,17 +428,17 @@ byte * ByteQueue::CreatePutSpace(size_t &size) ByteQueue & ByteQueue::operator=(const ByteQueue &rhs) { - if (this == &rhs) return *this; - - Destroy(); - CopyFrom(rhs); + if (this != &rhs) + { + Destroy(); + CopyFrom(rhs); + } return *this; } bool ByteQueue::operator==(const ByteQueue &rhs) const { const lword currentSize = CurrentSize(); - if (currentSize != rhs.CurrentSize()) return false; diff --git a/secblock.h b/secblock.h index 39d0c913c..907bca873 100644 --- a/secblock.h +++ b/secblock.h @@ -331,6 +331,7 @@ class SecBlock SecBlock& operator=(const SecBlock &t) { + // Assign guards for self-assignment Assign(t); return *this; }