ruby-changes:4176
From: ko1@a...
Date: Sun, 2 Mar 2008 00:08:31 +0900 (JST)
Subject: [ruby-changes:4176] nobu - Ruby:r15666 (trunk): * object.c (rb_cstr_to_dbl): check for successive underscores.
nobu 2008-03-02 00:08:13 +0900 (Sun, 02 Mar 2008)
New Revision: 15666
Modified files:
trunk/ChangeLog
trunk/object.c
trunk/test/ruby/test_float.rb
trunk/version.h
Log:
* object.c (rb_cstr_to_dbl): check for successive underscores.
[ruby-dev:33952]
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/version.h?r1=15666&r2=15665&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=15666&r2=15665&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/test/ruby/test_float.rb?r1=15666&r2=15665&diff_format=u
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/object.c?r1=15666&r2=15665&diff_format=u
Index: ChangeLog
===================================================================
--- ChangeLog (revision 15665)
+++ ChangeLog (revision 15666)
@@ -1,3 +1,8 @@
+Sun Mar 2 00:08:10 2008 Nobuyoshi Nakada <nobu@r...>
+
+ * object.c (rb_cstr_to_dbl): check for successive underscores.
+ [ruby-dev:33952]
+
Sat Mar 1 17:59:01 2008 Nobuyoshi Nakada <nobu@r...>
* io.c (struct argf): packed ARGF stuffs.
Index: object.c
===================================================================
--- object.c (revision 15665)
+++ object.c (revision 15666)
@@ -2042,7 +2042,7 @@
if (!p) return 0.0;
q = p;
- while (ISSPACE(*p)) p++;
+ while (ISSPACE(*p)) p++;
d = strtod(p, &end);
if (errno == ERANGE) {
OutOfRange();
@@ -2050,8 +2050,8 @@
errno = 0;
}
if (p == end) {
+ if (badcheck) {
bad:
- if (badcheck) {
rb_invalid_str(q, "Float()");
}
return d;
@@ -2060,19 +2060,24 @@
char buf[DBL_DIG * 4 + 10];
char *n = buf;
char *e = buf + sizeof(buf) - 1;
+ char prev = 0;
while (p < end && n < e) *n++ = *p++;
- while (n < e && *p) {
+ while (*p) {
if (*p == '_') {
/* remove underscores between digits */
- if (n == buf || !ISDIGIT(n[-1])) goto bad;
- while (*++p == '_');
- if (!ISDIGIT(*p)) {
- if (badcheck) goto bad;
- break;
+ if (badcheck) {
+ if (n == buf || !ISDIGIT(prev)) goto bad;
+ ++p;
+ if (!ISDIGIT(*p)) goto bad;
}
+ else {
+ while (*++p == '_');
+ continue;
+ }
}
- *n++ = *p++;
+ prev = *p++;
+ if (n < e) *n++ = prev;
}
*n = '\0';
p = buf;
Index: version.h
===================================================================
--- version.h (revision 15665)
+++ version.h (revision 15666)
@@ -1,7 +1,7 @@
#define RUBY_VERSION "1.9.0"
-#define RUBY_RELEASE_DATE "2008-03-01"
+#define RUBY_RELEASE_DATE "2008-03-02"
#define RUBY_VERSION_CODE 190
-#define RUBY_RELEASE_CODE 20080301
+#define RUBY_RELEASE_CODE 20080302
#define RUBY_PATCHLEVEL 0
#define RUBY_VERSION_MAJOR 1
@@ -9,7 +9,7 @@
#define RUBY_VERSION_TEENY 0
#define RUBY_RELEASE_YEAR 2008
#define RUBY_RELEASE_MONTH 3
-#define RUBY_RELEASE_DAY 1
+#define RUBY_RELEASE_DAY 2
#ifdef RUBY_EXTERN
RUBY_EXTERN const char ruby_version[];
Index: test/ruby/test_float.rb
===================================================================
--- test/ruby/test_float.rb (revision 15665)
+++ test/ruby/test_float.rb (revision 15666)
@@ -81,6 +81,7 @@
assert_raise(ArgumentError){Float("-")}
assert_raise(ArgumentError){Float("-.")}
assert_raise(ArgumentError){Float("1e")}
+ assert_raise(ArgumentError){Float("1__1")}
# add expected behaviour here.
end
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/