From: simon Date: Mon, 5 Aug 2013 19:50:51 +0000 (+0000) Subject: The bignum code has two representations of zero, since X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/commitdiff_plain/434a1d60dbb7311c85e957dfd02c9b8bafaa2c44 The bignum code has two representations of zero, since bn_restore_invariant (and the many loops that duplicate it) leaves a single zero word in a bignum representing 0, whereas the constant 'Zero' does not have any data words at all. Cope with this in bignum_cmp. (It would be a better plan to decide on one representation and stick with it, but this is the less disruptive fix for the moment.) git-svn-id: svn://svn.tartarus.org/sgt/putty@9996 cda61777-01e9-0310-a592-d414129be87e --- diff --git a/sshbn.c b/sshbn.c index cbd710d5..1c5c46a1 100644 --- a/sshbn.c +++ b/sshbn.c @@ -1322,6 +1322,12 @@ int bignum_cmp(Bignum a, Bignum b) int amax = a[0], bmax = b[0]; int i; + /* Annoyingly we have two representations of zero */ + if (amax == 1 && a[amax] == 0) + amax = 0; + if (bmax == 1 && b[bmax] == 0) + bmax = 0; + assert(amax == 0 || a[amax] != 0); assert(bmax == 0 || b[bmax] != 0);