summaryrefslogtreecommitdiff
path: root/bignum.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-10-30 03:24:19 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-10-30 03:24:19 +0000
commit99711c2eb96997c4c8510639aa73b3850ed56337 (patch)
tree0d1f6e7bee810429137989540bb88275db344d63 /bignum.c
parent6692dad47e80268298165057c76d1ac3665c8f02 (diff)
* bignum.c (rb_big2str0): a bug in length adjustment.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@11238 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/bignum.c b/bignum.c
index 50bd490..04d4384 100644
--- a/bignum.c
+++ b/bignum.c
@@ -691,8 +691,15 @@ rb_big2str0(x, base, trim)
}
}
if (trim) {while (s[j] == '0') j++;}
- RSTRING(ss)->len -= RBIGNUM(x)->sign?j:j-1;
- memmove(RBIGNUM(x)->sign?s:s+1, s+j, RSTRING(ss)->len);
+ i = RSTRING(ss)->len - j;
+ if (RBIGNUM(x)->sign) {
+ memmove(s, s+j, i);
+ RSTRING(ss)->len = i-1;
+ }
+ else {
+ memmove(s+1, s+j, i);
+ RSTRING(ss)->len = i;
+ }
s[RSTRING(ss)->len] = '\0';
return ss;