]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Robert Evans spotted that bignum_decimal() failed to cope with being given
authorJacob Nevins <jacobn@chiark.greenend.org.uk>
Sat, 17 Jun 2006 12:02:03 +0000 (12:02 +0000)
committerJacob Nevins <jacobn@chiark.greenend.org.uk>
Sat, 17 Jun 2006 12:02:03 +0000 (12:02 +0000)
a zero input.
This shouldn't matter for PuTTY, as these routines are only used in PuTTYgen,
to output SSH-1 format public key exponents/moduli, which should be nonzero.

[originally from svn r6731]

sshbn.c

diff --git a/sshbn.c b/sshbn.c
index 728b6fa08283c9567e8a4a0c6852bbca082c1ed3..9742c4adc7e05d6e46b9f8b9d47301cc2f6e5fd2 100644 (file)
--- a/sshbn.c
+++ b/sshbn.c
@@ -1037,9 +1037,14 @@ char *bignum_decimal(Bignum x)
      * round up (rounding down might make it less than x again).
      * Therefore if we multiply the bit count by 28/93, rounding
      * up, we will have enough digits.
+     *
+     * i=0 (i.e., x=0) is an irritating special case.
      */
     i = bignum_bitcount(x);
-    ndigits = (28 * i + 92) / 93;      /* multiply by 28/93 and round up */
+    if (!i)
+       ndigits = 1;                   /* x = 0 */
+    else
+       ndigits = (28 * i + 92) / 93;  /* multiply by 28/93 and round up */
     ndigits++;                        /* allow for trailing \0 */
     ret = snewn(ndigits, char);