Author: rfm
Date: Sat Nov 29 12:02:23 2014
New Revision: 38213

URL: http://svn.gna.org/viewcvs/gnustep?rev=38213&view=rev
Log:
fix (and test) for bug #43722

Modified:
    libs/base/trunk/ChangeLog
    libs/base/trunk/Source/NSScanner.m
    libs/base/trunk/Tests/base/NSString/test07.m

Modified: libs/base/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=38213&r1=38212&r2=38213&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog   (original)
+++ libs/base/trunk/ChangeLog   Sat Nov 29 12:02:23 2014
@@ -1,3 +1,8 @@
+2014-11-29  Richard Frith-Macdonald <[email protected]>
+
+       * Source/NSScanner.m: Fixup error in scanning doubles with excess
+       precision (bug #43722).
+
 2014-11-28  [email protected]
 
        * Source/NSThread.m: Set thread name visible to OS
@@ -19,7 +24,7 @@
 
 2014-11-20  Richard Frith-Macdonald <[email protected]>
 
-       * Source/NSRunLoop.m: Avoinf some unnecessary retain/release cycles.
+       * Source/NSRunLoop.m: Avoind some unnecessary retain/release cycles.
 
 2014-11-05  Richard Frith-Macdonald <[email protected]>
 

Modified: libs/base/trunk/Source/NSScanner.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSScanner.m?rev=38213&r1=38212&r2=38213&view=diff
==============================================================================
--- libs/base/trunk/Source/NSScanner.m  (original)
+++ libs/base/trunk/Source/NSScanner.m  Sat Nov 29 12:02:23 2014
@@ -1243,6 +1243,7 @@
   int          exponent = 0;
   BOOL         negativeMantissa = NO;
   BOOL         negativeExponent = NO;
+  BOOL          extra = NO;
   unsigned     pos = 0;
   int           mantissaLength;
   int           dotPos = -1;
@@ -1301,14 +1302,8 @@
     {
       /* Mantissa too long ... ignore excess.
        */
-      if (19 == mantissaLength && (dotPos < 0 || dotPos >= mantissaLength))
-        {
-          mantissaLength--;
-        }
-      else
-        {
-          mantissaLength = 19;
-        }
+      mantissaLength = 18;
+      extra = YES;
     }
   if (dotPos < 0)
     {

Modified: libs/base/trunk/Tests/base/NSString/test07.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Tests/base/NSString/test07.m?rev=38213&r1=38212&r2=38213&view=diff
==============================================================================
--- libs/base/trunk/Tests/base/NSString/test07.m        (original)
+++ libs/base/trunk/Tests/base/NSString/test07.m        Sat Nov 29 12:02:23 2014
@@ -28,6 +28,26 @@
   d = [@"                                1.2" doubleValue];
   PASS(d > 1.199999 && d < 1.200001, "doubleValue with leading space works");
 
+  s = @"50.6468746467461646";
+  sscanf([s UTF8String], "%lg", &d);
+  PASS(EQ([s doubleValue], d), "50.6468746467461646 -doubleValue OK");
+
+  s = @"50.64687464674616461";
+  sscanf([s UTF8String], "%lg", &d);
+  PASS(EQ([s doubleValue], d), "50.64687464674616461 -doubleValue OK");
+
+  s = @"0.646874646746164616898211";
+  sscanf([s UTF8String], "%lg", &d);
+  PASS(EQ([s doubleValue], d), "0.646874646746164616898211 -doubleValue OK");
+
+  s = @"502.646874646746164";
+  sscanf([s UTF8String], "%lg", &d);
+  PASS(EQ([s doubleValue], d), "502.646874646746164 -doubleValue OK");
+
+  s = @"502.6468746467461646";
+  sscanf([s UTF8String], "%lg", &d);
+  PASS(EQ([s doubleValue], d), "502.6468746467461646 -doubleValue OK");
+
   s = [NSString stringWithCharacters: &u length: 1];
   PASS_EQUAL(s, @"£", "UTF-8 string literal matches 16bit unicode string");
 


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to