Author: znek
Date: Wed Dec 30 22:09:55 2015
New Revision: 39245

URL: http://svn.gna.org/viewcvs/gnustep?rev=39245&view=rev
Log:
Fixed a long standing NSNumberFormatter bug in conjunction with zero padding
and (old) NSNumberFormatterBehavior10_0

Modified:
    libs/base/trunk/ChangeLog
    libs/base/trunk/Source/NSNumberFormatter.m
    libs/base/trunk/Tests/base/NSNumberFormatter/basic.m

Modified: libs/base/trunk/ChangeLog
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/ChangeLog?rev=39245&r1=39244&r2=39245&view=diff
==============================================================================
--- libs/base/trunk/ChangeLog   (original)
+++ libs/base/trunk/ChangeLog   Wed Dec 30 22:09:55 2015
@@ -1,3 +1,11 @@
+2015-12-30  Marcus Mueller <[email protected]>
+
+       * Source/NSNumberFormatter.m: fixed a subtle off-by-one formatter
+       bug in conjunction with zero padding and NSNumberFormatterBehavior10_0.
+
+       * Tests/base/NSNumberFormatter/basic.m: added a test for this
+       particular issue
+
 2015-12-29  Marcus Mueller <[email protected]>
 
        * Source/NSUserNotification.m: "NSUserNotificationDefaultSoundName"

Modified: libs/base/trunk/Source/NSNumberFormatter.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Source/NSNumberFormatter.m?rev=39245&r1=39244&r2=39245&view=diff
==============================================================================
--- libs/base/trunk/Source/NSNumberFormatter.m  (original)
+++ libs/base/trunk/Source/NSNumberFormatter.m  Wed Dec 30 22:09:55 2015
@@ -1271,16 +1271,18 @@
       
       //sort out the padding for the integer part
       intPartRange = [useFormat rangeOfCharacterFromSet: placeHolders];
-      if (NSMaxRange(intPartRange) < ([useFormat length] - 1))
-        {
+      if (intPartRange.location != NSNotFound)
+        {
+          int nextFormatCharLoc = intPartRange.location;
           while (([placeHolders characterIsMember:
-            [useFormat characterAtIndex: NSMaxRange(intPartRange)]]
+            [useFormat characterAtIndex: nextFormatCharLoc]]
             || [[useFormat substringWithRange:
-              NSMakeRange(NSMaxRange(intPartRange), 1)] isEqual:
+              NSMakeRange(nextFormatCharLoc, 1)] isEqual:
           defaultThousandsSeparator])
-            && NSMaxRange(intPartRange) < [useFormat length] - 1)
+            && nextFormatCharLoc < [useFormat length] - 1)
             {
               intPartRange.length++;
+              nextFormatCharLoc++;
             }
         }
       intPad = [[[useFormat substringWithRange: intPartRange]
@@ -1298,7 +1300,7 @@
           NSRange              ipRange;
 
           ipRange =
-            NSMakeRange(0, [intPad length] - [intPartString length] + 1);
+            NSMakeRange(0, [intPad length] - [intPartString length]);
           [intPartString insertString:
             [intPad substringWithRange: ipRange] atIndex: 0];
           [intPartString replaceOccurrencesOfString: @"_"

Modified: libs/base/trunk/Tests/base/NSNumberFormatter/basic.m
URL: 
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Tests/base/NSNumberFormatter/basic.m?rev=39245&r1=39244&r2=39245&view=diff
==============================================================================
--- libs/base/trunk/Tests/base/NSNumberFormatter/basic.m        (original)
+++ libs/base/trunk/Tests/base/NSNumberFormatter/basic.m        Wed Dec 30 
22:09:55 2015
@@ -49,6 +49,11 @@
     PASS_EQUAL([fmt stringForObjectValue: num], @"  001234",
       "numeric and space padding OK")
 
+    [fmt setFormat: @"000"];
+    num = [[[NSNumber alloc] initWithInt: 10] autorelease];
+    PASS_EQUAL([fmt stringForObjectValue: num], @"010",
+      "numeric padding OK")
+
     [fmt setAllowsFloats: YES];
 
     num = [[[NSNumber alloc] initWithFloat: 1234.56] autorelease];


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

Reply via email to