summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--node/Buffer.hpp11
-rw-r--r--selftest.cpp10
2 files changed, 18 insertions, 3 deletions
diff --git a/node/Buffer.hpp b/node/Buffer.hpp
index ed463bf6..14dd05c3 100644
--- a/node/Buffer.hpp
+++ b/node/Buffer.hpp
@@ -124,7 +124,7 @@ public:
{
if (b._l > C)
throw std::out_of_range("Buffer: assignment from buffer larger than capacity");
- memcpy(this,&b,sizeof(_l) + b._l); // one memcpy for all fields
+ memcpy(_b,b._b,_l = b._l);
return *this;
}
@@ -358,6 +358,15 @@ public:
}
/**
+ * Unconditionally zero buffer's underlying memory
+ */
+ inline void zeroAll()
+ throw()
+ {
+ memset(_b,0,sizeof(_b));
+ }
+
+ /**
* @return Size of data in buffer
*/
inline unsigned int size() const throw() { return _l; }
diff --git a/selftest.cpp b/selftest.cpp
index 5a5288be..cf4635b7 100644
--- a/selftest.cpp
+++ b/selftest.cpp
@@ -229,6 +229,9 @@ static int testPacket()
unsigned char salsaKey[32],hmacKey[32];
Packet a,b;
+ a.zeroAll();
+ b.zeroAll();
+
for(unsigned int i=0;i<32;++i) {
salsaKey[i] = (unsigned char)rand();
hmacKey[i] = (unsigned char)rand();
@@ -236,12 +239,15 @@ static int testPacket()
std::cout << "[packet] Testing Packet encoder/decoder... ";
- a = Packet();
- a.setVerb(Packet::VERB_HELLO);
+ a.reset(Address(),Address(),Packet::VERB_HELLO);
for(int i=0;i<32;++i)
a.append("supercalifragilisticexpealidocious",strlen("supercalifragilisticexpealidocious"));
b = a;
+ if (a != b) {
+ std::cout << "FAIL (assign)" << std::endl;
+ return -1;
+ }
a.compress();
unsigned int complen = a.size();