Skip to content

Commit 5e435e7

Browse files
committed
JSONSerialization PR review fixes
1 parent 38b7293 commit 5e435e7

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

Foundation/JSONSerialization.swift

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ open class JSONSerialization : NSObject {
105105
// For better performance, this (most expensive) test should be last.
106106
if let number = _SwiftValue.store(obj) as? NSNumber {
107107
if CFNumberIsFloatType(number._cfObject) {
108-
return number.doubleValue.isFinite
108+
let dv = number.doubleValue
109+
let invalid = dv.isInfinite || dv.isNaN
110+
return !invalid
109111
} else {
110112
return true
111113
}
@@ -368,22 +370,22 @@ private struct JSONWriter {
368370

369371
private func serializeInteger<T: UnsignedInteger>(value: T, isNegative: Bool = false) {
370372
let maxIntLength = 22 // 20 digits in UInt64 + optional sign + trailing '\0'
371-
let ZERO: CChar = 0x30 // ASCII '0' == 0x30
372-
let MINUS: CChar = 0x2d // ASCII '-' == 0x2d
373+
let asciiZero: CChar = 0x30 // ASCII '0' == 0x30
374+
let asciiMinus: CChar = 0x2d // ASCII '-' == 0x2d
373375

374376
var number = UInt64(value)
375377
var buffer = Array<CChar>(repeating: 0, count: maxIntLength)
376378
var pos = maxIntLength - 1
377379

378380
repeat {
379381
pos -= 1
380-
buffer[pos] = ZERO + CChar(number % 10)
382+
buffer[pos] = asciiZero + CChar(number % 10)
381383
number /= 10
382384
} while number != 0
383385

384386
if isNegative {
385387
pos -= 1
386-
buffer[pos] = MINUS
388+
buffer[pos] = asciiMinus
387389
}
388390
let output = String(cString: Array(buffer.suffix(from: pos)))
389391
writer(output)

TestFoundation/TestJSONEncoder.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -406,10 +406,10 @@ class TestJSONEncoder : XCTestCase {
406406
func test_codingOfUIntMinMax() {
407407

408408
struct MyValue: Codable {
409-
let intMin = Int64.min
410-
let intMax = Int64.max
411-
let uintMin = UInt64.min
412-
let uintMax = UInt64.max
409+
let int64Min = Int64.min
410+
let int64Max = Int64.max
411+
let uint64Min = UInt64.min
412+
let uint64Max = UInt64.max
413413
}
414414

415415
func compareJSON(_ s1: String, _ s2: String) {
@@ -423,7 +423,7 @@ class TestJSONEncoder : XCTestCase {
423423
let myValue = MyValue()
424424
let result = try encoder.encode(myValue)
425425
let r = String(data: result, encoding: .utf8) ?? "nil"
426-
compareJSON(r, "{\"uintMin\":0,\"uintMax\":18446744073709551615,\"intMin\":-9223372036854775808,\"intMax\":9223372036854775807}")
426+
compareJSON(r, "{\"uint64Min\":0,\"uint64Max\":18446744073709551615,\"int64Min\":-9223372036854775808,\"int64Max\":9223372036854775807}")
427427
} catch {
428428
XCTFail(String(describing: error))
429429
}

TestFoundation/TestJSONSerialization.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,13 +941,17 @@ extension TestJSONSerialization {
941941

942942
XCTAssertFalse(JSONSerialization.isValidJSONObject(Float.nan))
943943
XCTAssertFalse(JSONSerialization.isValidJSONObject(Float.infinity))
944+
XCTAssertFalse(JSONSerialization.isValidJSONObject(-Float.infinity))
944945
XCTAssertFalse(JSONSerialization.isValidJSONObject(NSNumber(value: Float.nan)))
945946
XCTAssertFalse(JSONSerialization.isValidJSONObject(NSNumber(value: Float.infinity)))
947+
XCTAssertFalse(JSONSerialization.isValidJSONObject(NSNumber(value: -Float.infinity)))
946948

947949
XCTAssertFalse(JSONSerialization.isValidJSONObject(Double.nan))
948950
XCTAssertFalse(JSONSerialization.isValidJSONObject(Double.infinity))
951+
XCTAssertFalse(JSONSerialization.isValidJSONObject(-Double.infinity))
949952
XCTAssertFalse(JSONSerialization.isValidJSONObject(NSNumber(value: Double.nan)))
950953
XCTAssertFalse(JSONSerialization.isValidJSONObject(NSNumber(value: Double.infinity)))
954+
XCTAssertFalse(JSONSerialization.isValidJSONObject(NSNumber(value: -Double.infinity)))
951955

952956
XCTAssertFalse(JSONSerialization.isValidJSONObject(NSDecimalNumber(decimal: Decimal(floatLiteral: Double.nan))))
953957
}

0 commit comments

Comments
 (0)