From 434a1d60dbb7311c85e957dfd02c9b8bafaa2c44 Mon Sep 17 00:00:00 2001 From: simon Date: Mon, 5 Aug 2013 19:50:51 +0000 Subject: [PATCH] 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 --- sshbn.c | 6 ++++++ 1 file changed, 6 insertions(+) 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); -- 2.11.0