Fix a couple of blatant memory leaks; thanks to Ruurd Beerstra for
[u/mdw/putty] / sshbn.c
diff --git a/sshbn.c b/sshbn.c
index 3742227..d0608a3 100644 (file)
--- a/sshbn.c
+++ b/sshbn.c
@@ -729,6 +729,7 @@ Bignum bigmuladd(Bignum a, Bignum b, Bignum addend)
     }
     ret[0] = maxspot;
 
+    sfree(workspace);
     return ret;
 }
 
@@ -814,7 +815,7 @@ unsigned short bignum_mod_short(Bignum number, unsigned short modulus)
     r = 0;
     mod = modulus;
     for (i = number[0]; i > 0; i--)
-       r = (r * 65536 + number[i]) % mod;
+       r = (r * (BIGNUM_TOP_BIT % mod) * 2 + number[i] % mod) % mod;
     return (unsigned short) r;
 }
 
@@ -1009,5 +1010,6 @@ char *bignum_decimal(Bignum x)
     /*
      * Done.
      */
+    sfree(workspace);
     return ret;
 }