summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bignum.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/bignum.c b/bignum.c
index 8f9f2ce737..868c5dba88 100644
--- a/bignum.c
+++ b/bignum.c
@@ -616,8 +616,12 @@ static int
bytes_2comp(unsigned char *buf, size_t len)
{
size_t i;
- for (i = 0; i < len; i++)
- buf[i] = ~buf[i];
+ for (i = 0; i < len; i++) {
+ signed char c = buf[i];
+ signed int d = ~c;
+ unsigned int e = d & 0xFF;
+ buf[i] = e;
+ }
for (i = 0; i < len; i++) {
buf[i]++;
if (buf[i] != 0)