@@ -1746,6 +1746,7 @@ extension _JSONDecoder : SingleValueDecodingContainer {
1746
1746
// MARK: - Concrete Value Representations
1747
1747
1748
1748
extension _JSONDecoder {
1749
+
1749
1750
/// Returns the given value unboxed from a container.
1750
1751
fileprivate func unbox( _ value: Any , as type: Bool . Type ) throws -> Bool ? {
1751
1752
guard !( value is NSNull ) else { return nil }
@@ -1765,7 +1766,7 @@ extension _JSONDecoder {
1765
1766
fileprivate func unbox( _ value: Any , as type: Int . Type ) throws -> Int ? {
1766
1767
guard !( value is NSNull ) else { return nil }
1767
1768
1768
- guard let number = value as? NSNumber else {
1769
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1769
1770
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1770
1771
}
1771
1772
@@ -1780,7 +1781,7 @@ extension _JSONDecoder {
1780
1781
fileprivate func unbox( _ value: Any , as type: Int8 . Type ) throws -> Int8 ? {
1781
1782
guard !( value is NSNull ) else { return nil }
1782
1783
1783
- guard let number = value as? NSNumber else {
1784
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1784
1785
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1785
1786
}
1786
1787
@@ -1795,7 +1796,7 @@ extension _JSONDecoder {
1795
1796
fileprivate func unbox( _ value: Any , as type: Int16 . Type ) throws -> Int16 ? {
1796
1797
guard !( value is NSNull ) else { return nil }
1797
1798
1798
- guard let number = value as? NSNumber else {
1799
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1799
1800
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1800
1801
}
1801
1802
@@ -1810,7 +1811,7 @@ extension _JSONDecoder {
1810
1811
fileprivate func unbox( _ value: Any , as type: Int32 . Type ) throws -> Int32 ? {
1811
1812
guard !( value is NSNull ) else { return nil }
1812
1813
1813
- guard let number = value as? NSNumber else {
1814
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1814
1815
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1815
1816
}
1816
1817
@@ -1825,7 +1826,7 @@ extension _JSONDecoder {
1825
1826
fileprivate func unbox( _ value: Any , as type: Int64 . Type ) throws -> Int64 ? {
1826
1827
guard !( value is NSNull ) else { return nil }
1827
1828
1828
- guard let number = value as? NSNumber else {
1829
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1829
1830
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1830
1831
}
1831
1832
@@ -1840,7 +1841,7 @@ extension _JSONDecoder {
1840
1841
fileprivate func unbox( _ value: Any , as type: UInt . Type ) throws -> UInt ? {
1841
1842
guard !( value is NSNull ) else { return nil }
1842
1843
1843
- guard let number = value as? NSNumber else {
1844
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1844
1845
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1845
1846
}
1846
1847
@@ -1855,7 +1856,7 @@ extension _JSONDecoder {
1855
1856
fileprivate func unbox( _ value: Any , as type: UInt8 . Type ) throws -> UInt8 ? {
1856
1857
guard !( value is NSNull ) else { return nil }
1857
1858
1858
- guard let number = value as? NSNumber else {
1859
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1859
1860
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1860
1861
}
1861
1862
@@ -1870,7 +1871,7 @@ extension _JSONDecoder {
1870
1871
fileprivate func unbox( _ value: Any , as type: UInt16 . Type ) throws -> UInt16 ? {
1871
1872
guard !( value is NSNull ) else { return nil }
1872
1873
1873
- guard let number = value as? NSNumber else {
1874
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1874
1875
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1875
1876
}
1876
1877
@@ -1885,7 +1886,7 @@ extension _JSONDecoder {
1885
1886
fileprivate func unbox( _ value: Any , as type: UInt32 . Type ) throws -> UInt32 ? {
1886
1887
guard !( value is NSNull ) else { return nil }
1887
1888
1888
- guard let number = value as? NSNumber else {
1889
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1889
1890
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1890
1891
}
1891
1892
@@ -1900,7 +1901,7 @@ extension _JSONDecoder {
1900
1901
fileprivate func unbox( _ value: Any , as type: UInt64 . Type ) throws -> UInt64 ? {
1901
1902
guard !( value is NSNull ) else { return nil }
1902
1903
1903
- guard let number = value as? NSNumber else {
1904
+ guard let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse else {
1904
1905
throw DecodingError . _typeMismatch ( at: self . codingPath, expectation: type, reality: value)
1905
1906
}
1906
1907
@@ -1915,7 +1916,7 @@ extension _JSONDecoder {
1915
1916
fileprivate func unbox( _ value: Any , as type: Float . Type ) throws -> Float ? {
1916
1917
guard !( value is NSNull ) else { return nil }
1917
1918
1918
- if let number = value as? NSNumber {
1919
+ if let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse {
1919
1920
// We are willing to return a Float by losing precision:
1920
1921
// * If the original value was integral,
1921
1922
// * and the integral value was > Float.greatestFiniteMagnitude, we will fail
@@ -1961,7 +1962,7 @@ extension _JSONDecoder {
1961
1962
fileprivate func unbox( _ value: Any , as type: Double . Type ) throws -> Double ? {
1962
1963
guard !( value is NSNull ) else { return nil }
1963
1964
1964
- if let number = value as? NSNumber {
1965
+ if let number = value as? NSNumber , number !== kCFBooleanTrue , number !== kCFBooleanFalse {
1965
1966
// We are always willing to return the number as a Double:
1966
1967
// * If the original value was integral, it is guaranteed to fit in a Double; we are willing to lose precision past 2^53 if you encoded a UInt64 but requested a Double
1967
1968
// * If it was a Float or Double, you will get back the precise value
0 commit comments