diff --git a/Sources/MessagePackTypes/MessagePackType+DoubleType.swift b/Sources/MessagePackTypes/MessagePackType+DoubleType.swift index ccbd103..872c70c 100644 --- a/Sources/MessagePackTypes/MessagePackType+DoubleType.swift +++ b/Sources/MessagePackTypes/MessagePackType+DoubleType.swift @@ -32,6 +32,9 @@ extension MessagePackType.DoubleType { } static func unpack(for value: Data) throws -> Double { + guard let firstByte = value.first else { throw MessagePackError.emptyData } + guard firstByte == self.firstByte else { throw MessagePackError.invalidData } + let unpacked: UInt64 = try unpackInteger(try value.subdata(dataRange)) return Double(bitPattern: UInt64(bigEndian: unpacked)) } diff --git a/Sources/MessagePackTypes/MessagePackType+FloatType.swift b/Sources/MessagePackTypes/MessagePackType+FloatType.swift index bb63def..56b2e9e 100644 --- a/Sources/MessagePackTypes/MessagePackType+FloatType.swift +++ b/Sources/MessagePackTypes/MessagePackType+FloatType.swift @@ -32,6 +32,9 @@ extension MessagePackType.FloatType { } static func unpack(for value: Data) throws -> Float { + guard let firstByte = value.first else { throw MessagePackError.emptyData } + guard firstByte == self.firstByte else { throw MessagePackError.invalidData } + let unpacked: UInt32 = try unpackInteger(try value.subdata(dataRange)) return Float(bitPattern: UInt32(bigEndian: unpacked)) } diff --git a/Tests/MessagePackerTests/DoubleUnpackedTests.swift b/Tests/MessagePackerTests/DoubleUnpackedTests.swift index 6e3933a..70cc6c3 100644 --- a/Tests/MessagePackerTests/DoubleUnpackedTests.swift +++ b/Tests/MessagePackerTests/DoubleUnpackedTests.swift @@ -25,4 +25,9 @@ class DoubleUnpackedTests: XCTestCase { let output = 3.14 XCTAssertEqual(try decoder.decode(Double.self, from: input), output) } + + func testMismatchedType() { + let input = Data([207, 255, 255, 255, 255, 255, 255, 255, 255]) + XCTAssertThrowsError(try decoder.decode(Double.self, from: input)) + } } diff --git a/Tests/MessagePackerTests/FloatUnpackedTests.swift b/Tests/MessagePackerTests/FloatUnpackedTests.swift index a6a5450..394bfde 100644 --- a/Tests/MessagePackerTests/FloatUnpackedTests.swift +++ b/Tests/MessagePackerTests/FloatUnpackedTests.swift @@ -25,4 +25,9 @@ class FloatUnpackedTests: XCTestCase { let output: Float = 3.14 XCTAssertEqual(try decoder.decode(Float.self, from: input), output) } + + func testMismatchedType() { + let input = Data([207, 255, 255, 255, 255, 255, 255, 255, 255]) + XCTAssertThrowsError(try decoder.decode(Float.self, from: input)) + } }