diff --git a/Sources/Starknet/Data/TypedData/StarknetTypedData.swift b/Sources/Starknet/Data/TypedData/StarknetTypedData.swift index a6e1070f5..53a1b6a19 100644 --- a/Sources/Starknet/Data/TypedData/StarknetTypedData.swift +++ b/Sources/Starknet/Data/TypedData/StarknetTypedData.swift @@ -18,6 +18,7 @@ public enum StarknetTypedDataError: Error, Equatable { case contextNotDefined case parentNotDefined case keyNotDefined + case invalidBool(StarknetTypedData.Element) case invalidMerkleTree case invalidShortString case encodingError @@ -451,18 +452,18 @@ extension StarknetTypedData { switch element { case let .felt(felt): guard felt == .zero || felt == .one else { - throw StarknetTypedDataError.decodingError + throw StarknetTypedDataError.invalidBool(element) } return felt case let .bool(bool): return bool ? .one : .zero case let .string(string): guard let bool = Bool(string) else { - throw StarknetTypedDataError.decodingError + throw StarknetTypedDataError.invalidBool(element) } return bool ? .one : .zero default: - throw StarknetTypedDataError.decodingError + throw StarknetTypedDataError.invalidBool(element) } } diff --git a/Tests/StarknetTests/Data/TypedDataTests.swift b/Tests/StarknetTests/Data/TypedDataTests.swift index 3feb3de85..294fd3a01 100644 --- a/Tests/StarknetTests/Data/TypedDataTests.swift +++ b/Tests/StarknetTests/Data/TypedDataTests.swift @@ -151,6 +151,16 @@ final class TypedDataTests: XCTestCase { } } + func testEncodeInvalidBool() throws { + let cases: [any Encodable] = [2, "2", "0x123"] + for input in cases { + let element = try JSONDecoder().decode(StarknetTypedData.Element.self, from: JSONEncoder().encode(input)) + XCTAssertThrowsError(try CasesRev1.td.encode(element: element, forType: "bool")) { error in + XCTAssertEqual(error as? StarknetTypedDataError, .invalidBool(element)) + } + } + } + func testEncodeType() throws { let cases: [(StarknetTypedData, String, String)] = [