summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-15 20:55:59 +0000
committershyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2007-08-15 20:55:59 +0000
commita2055d63b41a6678dc7aeb17d0bece314e700c5a (patch)
tree9c8e1ebd2d5758b860763f021b9c64935e3658ed
parent2f1eb739412a85579ff4de5567474e7c8fe1b7c3 (diff)
parent1287260819a8e2dc5ca14da4b5e58b110064fe44 (diff)
sorry. I made wrong tags.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/tags/v1_8_5_71@12993 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog5
-rw-r--r--bignum.c31
-rw-r--r--version.h2
3 files changed, 16 insertions, 22 deletions
diff --git a/ChangeLog b/ChangeLog
index 03d65738f4..c9d7cb5f3d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,3 @@
-Thu Aug 16 05:02:39 2007 Nobuyoshi Nakada <nobu@ruby-lang.org>
-
- * bignum.c (rb_cstr_to_inum): check leading non-digits.
- [ruby-core:11691]
-
Thu Aug 16 05:00:01 2007 Yukihiro Matsumoto <matz@ruby-lang.org>
* numeric.c (fix_pow): 0**2 should not raise floating point
diff --git a/bignum.c b/bignum.c
index 473434d18e..3057f1d45a 100644
--- a/bignum.c
+++ b/bignum.c
@@ -331,13 +331,6 @@ rb_cstr_to_inum(str, base, badcheck)
VALUE z;
BDIGIT *zds;
-#define conv_digit(c) \
- (!ISASCII(c) ? -1 : \
- isdigit(c) ? ((c) - '0') : \
- islower(c) ? ((c) - 'a' + 10) : \
- isupper(c) ? ((c) - 'A' + 10) : \
- -1)
-
if (!str) {
if (badcheck) goto bad;
return INT2FIX(0);
@@ -430,13 +423,7 @@ rb_cstr_to_inum(str, base, badcheck)
}
if (*str == '0') { /* squeeze preceeding 0s */
while (*++str == '0');
- if (!*str) --str;
- }
- c = *str;
- c = conv_digit(c);
- if (c < 0 || c >= base) {
- if (badcheck) goto bad;
- return INT2FIX(0);
+ --str;
}
len *= strlen(str)*sizeof(char);
@@ -470,7 +457,7 @@ rb_cstr_to_inum(str, base, badcheck)
z = bignew(len, sign);
zds = BDIGITS(z);
for (i=len;i--;) zds[i]=0;
- while ((c = *str++) != 0) {
+ while (c = *str++) {
if (c == '_') {
if (badcheck) {
if (nondigit) goto bad;
@@ -478,7 +465,19 @@ rb_cstr_to_inum(str, base, badcheck)
}
continue;
}
- else if ((c = conv_digit(c)) < 0) {
+ else if (!ISASCII(c)) {
+ break;
+ }
+ else if (isdigit(c)) {
+ c -= '0';
+ }
+ else if (islower(c)) {
+ c -= 'a' - 10;
+ }
+ else if (isupper(c)) {
+ c -= 'A' - 10;
+ }
+ else {
break;
}
if (c >= base) break;
diff --git a/version.h b/version.h
index 929500db09..068564b4b5 100644
--- a/version.h
+++ b/version.h
@@ -2,7 +2,7 @@
#define RUBY_RELEASE_DATE "2007-08-16"
#define RUBY_VERSION_CODE 185
#define RUBY_RELEASE_CODE 20070816
-#define RUBY_PATCHLEVEL 72
+#define RUBY_PATCHLEVEL 71
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8