Skip to content

Commit f566b0c

Browse files
committed
Avoid casting to CFNumberRef and CFMutableStringRef types
1 parent 22b21c0 commit f566b0c

File tree

2 files changed

+16
-12
lines changed

2 files changed

+16
-12
lines changed

Classes/SBJsonStreamWriter.m

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,11 @@
3434
#import "SBJsonStreamWriterState.h"
3535

3636
static NSDecimalNumber *kNotANumber;
37+
static NSNumber *kTrue;
38+
static NSNumber *kFalse;
39+
static NSNumber *kPositiveInfinity;
40+
static NSNumber *kNegativeInfinity;
41+
3742
static id kStaticStringCache;
3843

3944

@@ -48,6 +53,10 @@ @implementation SBJsonStreamWriter
4853

4954
+ (void)initialize {
5055
kNotANumber = [NSDecimalNumber notANumber];
56+
kPositiveInfinity = [NSNumber numberWithDouble:+INFINITY];
57+
kNegativeInfinity = [NSNumber numberWithDouble:-INFINITY];
58+
kTrue = [NSNumber numberWithBool:YES];
59+
kFalse = [NSNumber numberWithBool:NO];
5160

5261
Class cacheClass = NSClassFromString(@"NSCache");
5362
if (cacheClass) {
@@ -321,27 +330,23 @@ - (BOOL)writeString:(NSString*)string {
321330
}
322331

323332
- (BOOL)writeNumber:(NSNumber*)number {
324-
if ((CFBooleanRef)number == kCFBooleanTrue || (CFBooleanRef)number == kCFBooleanFalse)
333+
if (number == kTrue || number == kFalse)
325334
return [self writeBool:[number boolValue]];
326335

327336
if ([state isInvalidState:self]) return NO;
328337
if ([state expectingKey:self]) return NO;
329338
[state appendSeparator:self];
330339
if (humanReadable) [state appendWhitespace:self];
331340

332-
if ((CFNumberRef)number == kCFNumberPositiveInfinity) {
341+
if ([kPositiveInfinity isEqualToNumber:number]) {
333342
self.error = @"+Infinity is not a valid number in JSON";
334343
return NO;
335344

336-
} else if ((CFNumberRef)number == kCFNumberNegativeInfinity) {
345+
} else if ([kNegativeInfinity isEqualToNumber:number]) {
337346
self.error = @"-Infinity is not a valid number in JSON";
338347
return NO;
339348

340-
} else if ((CFNumberRef)number == kCFNumberNaN) {
341-
self.error = @"NaN is not a valid number in JSON";
342-
return NO;
343-
344-
} else if (number == kNotANumber) {
349+
} else if ([kNotANumber isEqualToNumber:number]) {
345350
self.error = @"NaN is not a valid number in JSON";
346351
return NO;
347352
}

Classes/SBJsonTokeniser.m

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -211,21 +211,20 @@ - (sbjson_token_t)getStringToken:(NSObject**)token {
211211
return sbjson_token_error;
212212
}
213213

214-
unichar pair[2] = {hi, lo};
215-
CFStringAppendCharacters((CFMutableStringRef)acc, pair, 2);
214+
[acc appendFormat:@"%C%C", hi, lo];
216215
} else if (SBStringIsIllegalSurrogateHighCharacter(hi)) {
217216
self.error = @"Invalid high character in surrogate pair";
218217
return sbjson_token_error;
219218
} else {
220-
CFStringAppendCharacters((CFMutableStringRef)acc, &hi, 1);
219+
[acc appendFormat:@"%C", hi];
221220
}
222221

223222

224223
} else {
225224
unichar decoded;
226225
if (![self decodeEscape:ch into:&decoded])
227226
return sbjson_token_error;
228-
CFStringAppendCharacters((CFMutableStringRef)acc, &decoded, 1);
227+
[acc appendFormat:@"%C", decoded];
229228
}
230229

231230
break;

0 commit comments

Comments
 (0)