Workaround for BN_bn2mpi reading/writing out of bounds
authorPieter Wuille <pieter.wuille@gmail.com>
Sat, 18 Feb 2012 12:32:25 +0000 (13:32 +0100)
committerLuke Dashjr <luke-jr+git@utopios.org>
Mon, 19 Mar 2012 23:08:19 +0000 (19:08 -0400)
When OpenSSL's BN_bn2mpi is passed a buffer of size 4, valgrind
reports reading/writing one byte past it. I am unable to find
evidence of this behaviour in BN_bn2mpi's source code, so it may
be a spurious warning. However, this change is harmless, as only
the bignum with value 0 results in an mpi serialization of size 4.

src/bignum.h

index 1a2406b..6e8d3cb 100644 (file)
@@ -243,7 +243,7 @@ public:
     std::vector<unsigned char> getvch() const
     {
         unsigned int nSize = BN_bn2mpi(this, NULL);
-        if (nSize < 4)
+        if (nSize <= 4)
             return std::vector<unsigned char>();
         std::vector<unsigned char> vch(nSize);
         BN_bn2mpi(this, &vch[0]);