summaryrefslogtreecommitdiff
path: root/bignum.c
diff options
context:
space:
mode:
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/bignum.c b/bignum.c
index 6a31b5adc1..e534150073 100644
--- a/bignum.c
+++ b/bignum.c
@@ -105,9 +105,15 @@ bignorm(x)
BDIGIT *ds = BDIGITS(x);
while (len-- && !ds[len]) ;
- RBIGNUM(x)->len = ++len;
+ len++;
+ if (RBIGNUM(x)->sign) {
+ RBIGNUM(x)->len = len;
+ }
+ else if (len == 0) {
+ return x;
+ }
- if (len*SIZEOF_BDIGITS <= sizeof(VALUE)) {
+ if (RBIGNUM(x)->len*SIZEOF_BDIGITS <= sizeof(VALUE)) {
long num = 0;
while (len--) {
num = BIGUP(num) + ds[len];