From f189bb22d71d4e25984c8d1e72c37a4a9823d2b2 Mon Sep 17 00:00:00 2001 From: Oskari Timperi Date: Mon, 2 Apr 2018 11:30:52 +0300 Subject: Raise an exception if an invalid field number is encountered --- generator/protoc_gen_nim.nim | 2 ++ src/protobuf/stream.nim | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/generator/protoc_gen_nim.nim b/generator/protoc_gen_nim.nim index 227005e..a05172a 100644 --- a/generator/protoc_gen_nim.nim +++ b/generator/protoc_gen_nim.nim @@ -661,6 +661,8 @@ iterator genReadMessageProc(msg: Message): string = yield indent("tag = readTag(stream)", 12) yield indent("wireType = getTagWireType(tag)", 12) yield indent("case getTagFieldNumber(tag)", 8) + yield indent("of 0:", 8) + yield indent("raise newException(InvalidFieldNumberError, \"Invalid field number: 0\")", 12) for field in msg.fields: let reader = &"read{field.typeName}" diff --git a/src/protobuf/stream.nim b/src/protobuf/stream.nim index 6f3b503..a0b650d 100644 --- a/src/protobuf/stream.nim +++ b/src/protobuf/stream.nim @@ -18,6 +18,10 @@ type Tag* = distinct uint32 + ParseError* = object of Exception + + InvalidFieldNumberError* = object of ParseError + proc pbClose(s: Stream) = close(ProtobufStream(s).stream) ProtobufStream(s).stream = nil -- cgit v1.2.3