diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-08 02:07:43 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2010-05-08 02:07:43 +0000 |
commit | cccc8cbd45078028a1bae2d28c934172723bebf3 (patch) | |
tree | f3edd29f375956499f506623e667cb03409fb340 /ext | |
parent | 01a21e44fece658e46e12b29cea566052c67cb43 (diff) | |
download | ruby-cccc8cbd45078028a1bae2d28c934172723bebf3.tar.gz |
* ext/bigdecimal/bigdecimal.c (VpAlloc): ensure buf does not get
collected. based on a patch masaya tarui at [ruby-dev:41213].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@27665 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r-- | ext/bigdecimal/bigdecimal.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 78ea21a0f3..64562edb5b 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -2531,7 +2531,7 @@ VpAlloc(U_LONG mx, const char *szVal) int sign=1; Real *vp = NULL; U_LONG mf = VpGetPrecLimit(); - volatile VALUE buf; + VALUE buf; mx = (mx + BASE_FIG - 1) / BASE_FIG + 1; /* Determine allocation unit. */ if(szVal) { @@ -2559,7 +2559,7 @@ VpAlloc(U_LONG mx, const char *szVal) /* Skip all '_' after digit: 2006-6-30 */ ni = 0; - buf = rb_str_new(0,strlen(szVal)+1); + buf = rb_str_tmp_new(strlen(szVal)+1); psz = RSTRING_PTR(buf); i = 0; ipn = 0; @@ -2658,6 +2658,7 @@ VpAlloc(U_LONG mx, const char *szVal) vp->MaxPrec = mx; /* set max precision */ VpSetZero(vp,sign); VpCtoV(vp, &(szVal[ipn]), ni, &(szVal[ipf]), nf, &(szVal[ipe]), ne); + rb_str_resize(buf, 0); return vp; } |