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