CBORCoding
CBORCoding copied to clipboard
Empty dictionaries of certain types throw an error when decoding
Expected Behavior
Some empty dictionaries that have been encoded with CBOREncoder throw a type mismatch error when the data is decoded again with CBORDecoder.
To me this seems like a relatively severe bug.
Actual Behavior
See provided test methods.
Steps To Reproduce
Test methods I added to CBORDecoderTests. The first one currently fails, the second one succeeds.
/// Fails!
func testEmptyDictionaryRoundTripUInt64Key() throws {
let dict = [UInt64: String]()
let data = try CBOREncoder().encode(dict)
let dict2: [UInt64: String] = try CBORDecoder().decode(from: data)
XCTAssertEqual(dict, dict2)
}
/// Succeeds
func testEmptyDictionaryRoundTripIntKey() throws {
let dict = [Int: String]()
let data = try CBOREncoder().encode(dict)
let dict2: [Int: String] = try CBORDecoder().decode(from: data)
XCTAssertEqual(dict, dict2)
}
Other types fail too, for example dictionaries with Int32 keys.
Project Version
6fbd643c64cf6ef7a98391820c372d05fa9ed9ab
The OS/Variant where this issue occurs.
- [ ] iOS
- [X] macOS
- [ ] tvOS
- [ ] watchOS
- [ ] Mac Catalyst
- [ ] Other (Please specify in "Additional Context" section)
The version of Xcode that was used when this issue appeared.
15.0.1 (15A507)
What was the environment in which the issue appeared?
- [X] CBORCoding.xcodeproj
- [X] Package.swift
- [ ] Carthage
- [ ] CocoaPods
- [ ] Swift Package Manager
- [ ] Other (Please specify in "Additional Context" section)
Additional Context
No response