mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* util.c (rv_strdup): macro to duplicate nul-terminated string.
[ruby-core:22852] * util.c (ruby_dtoa): allocates one more byte to get rid of buffer overrun. a patch from Charlie Savage at [ruby-core:22604]. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@22947 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
694d70cace
commit
a8e795ca53
2 changed files with 14 additions and 4 deletions
|
@ -1,3 +1,11 @@
|
|||
Sat Mar 14 14:21:56 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* util.c (rv_strdup): macro to duplicate nul-terminated string.
|
||||
[ruby-core:22852]
|
||||
|
||||
* util.c (ruby_dtoa): allocates one more byte to get rid of buffer
|
||||
overrun. a patch from Charlie Savage at [ruby-core:22604].
|
||||
|
||||
Fri Mar 13 19:44:21 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_call0): should pass rest argument information even
|
||||
|
|
10
util.c
10
util.c
|
@ -3116,13 +3116,15 @@ nrv_alloc(const char *s, char **rve, int n)
|
|||
{
|
||||
char *rv, *t;
|
||||
|
||||
t = rv = rv_alloc(n);
|
||||
t = rv = rv_alloc(n+1);
|
||||
while ((*t = *s++) != 0) t++;
|
||||
if (rve)
|
||||
*rve = t;
|
||||
return rv;
|
||||
}
|
||||
|
||||
#define rv_strdup(s, rve) nrv_alloc(s, rve, strlen(s)+1)
|
||||
|
||||
/* freedtoa(s) must be used to free values s returned by dtoa
|
||||
* when MULTIPLE_THREADS is #defined. It should be used in all cases,
|
||||
* but for consistency with earlier versions of dtoa, it is optional
|
||||
|
@ -3256,9 +3258,9 @@ dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
|
|||
*decpt = 9999;
|
||||
#ifdef IEEE_Arith
|
||||
if (!word1(d) && !(word0(d) & 0xfffff))
|
||||
return nrv_alloc("Infinity", rve, 8);
|
||||
return rv_strdup("Infinity", rve);
|
||||
#endif
|
||||
return nrv_alloc("NaN", rve, 3);
|
||||
return rv_strdup("NaN", rve);
|
||||
}
|
||||
#endif
|
||||
#ifdef IBM
|
||||
|
@ -3266,7 +3268,7 @@ dtoa(double d, int mode, int ndigits, int *decpt, int *sign, char **rve)
|
|||
#endif
|
||||
if (!dval(d)) {
|
||||
*decpt = 1;
|
||||
return nrv_alloc("0", rve, 1);
|
||||
return rv_strdup("0", rve);
|
||||
}
|
||||
|
||||
#ifdef SET_INEXACT
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue