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)
committerGavin Andresen <gavinandresen@gmail.com>
Tue, 20 Dec 2011 00:10:34 +0000 (19:10 -0500)
src/key.h
src/main.cpp

index 3f4b72d..94ec552 100644 (file)
--- a/src/key.h
+++ b/src/key.h
@@ -178,13 +178,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 09f821b..e2f3cc9 100644 (file)
@@ -1875,7 +1875,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))