Code cleanup: use ECDSA_size() instead of fixed 10,000 byte sig buffer, and explicity...
authorGavin Andresen <gavinandresen@gmail.com>
Tue, 20 Dec 2011 00:04:47 +0000 (19:04 -0500)
committerLuke Dashjr <luke-jr+git@utopios.org>
Tue, 13 Mar 2012 23:08:42 +0000 (19:08 -0400)
src/key.h
src/main.cpp

index 89d82fc..477f550 100644 (file)
--- a/src/key.h
+++ b/src/key.h
@@ -214,13 +214,14 @@ public:
 
     bool Sign(uint256 hash, std::vector<unsigned char>& vchSig)
     {
-        vchSig.clear();
-        unsigned char pchSig[10000];
-        unsigned int nSize = 0;
-        if (!ECDSA_sign(0, (unsigned char*)&hash, sizeof(hash), pchSig, &nSize, pkey))
+        unsigned int nSize = ECDSA_size(pkey);
+        vchSig.resize(nSize); // Make sure it is big enough
+        if (!ECDSA_sign(0, (unsigned char*)&hash, sizeof(hash), &vchSig[0], &nSize, pkey))
+        {
+            vchSig.clear();
             return false;
-        vchSig.resize(nSize);
-        memcpy(&vchSig[0], pchSig, nSize);
+        }
+        vchSig.resize(nSize); // Shrink to fit actual size
         return true;
     }
 
index 652d4c1..cd02652 100644 (file)
@@ -1921,7 +1921,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv)
         }
 
         // Ask the first connected node for block updates
-        static int nAskedForBlocks;
+        static int nAskedForBlocks = 0;
         if (!pfrom->fClient &&
             (pfrom->nVersion < 32000 || pfrom->nVersion >= 32400) &&
              (nAskedForBlocks < 1 || vNodes.size() <= 1))