ruby-changes:2496
From: ko1@a...
Date: 20 Nov 2007 21:50:46 +0900
Subject: [ruby-changes:2496] akr - Ruby:r13987 (trunk): * time.c (time_mload): ignore invalid digits in submicro.
akr 2007-11-20 21:50:29 +0900 (Tue, 20 Nov 2007)
New Revision: 13987
Modified files:
trunk/ChangeLog
trunk/time.c
Log:
* time.c (time_mload): ignore invalid digits in submicro.
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/time.c?r1=13987&r2=13986
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13987&r2=13986
Index: time.c
===================================================================
--- time.c (revision 13986)
+++ time.c (revision 13987)
@@ -2244,9 +2244,6 @@
nsec = usec * 1000;
}
else {
- unsigned char *ptr;
- long len;
-
p &= ~(1UL<<31);
gmt = (p >> 30) & 0x1;
tm.tm_year = (p >> 14) & 0xffff;
@@ -2262,15 +2259,22 @@
nsec = usec * 1000;
if (submicro != Qnil) {
+ unsigned char *ptr;
+ long len;
+ int digit;
ptr = (unsigned char*)StringValuePtr(submicro);
len = RSTRING_LEN(submicro);
if (0 < len) {
- nsec += (ptr[0] >> 4) * 100;
- nsec += (ptr[0] & 0xf) * 10;
+ if (10 <= (digit = ptr[0] >> 4)) goto end_submicro;
+ nsec += digit * 100;
+ if (10 <= (digit = ptr[0] & 0xf)) goto end_submicro;
+ nsec += digit * 10;
}
if (1 < len) {
- nsec += (ptr[1] >> 4);
+ if (10 <= (digit = ptr[1] >> 4)) goto end_submicro;
+ nsec += digit;
}
+end_submicro: ;
}
}
time_overflow_p(&sec, &nsec);
Index: ChangeLog
===================================================================
--- ChangeLog (revision 13986)
+++ ChangeLog (revision 13987)
@@ -1,3 +1,7 @@
+Tue Nov 20 21:46:46 2007 Tanaka Akira <akr@f...>
+
+ * time.c (time_mload): ignore invalid digits in submicro.
+
Tue Nov 20 20:33:32 2007 Koichi Sasada <ko1@a...>
* include/ruby/ruby.h: rename RFloat#double_value -> float_value.
--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml