aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOskari Timperi <oskari.timperi@iki.fi>2018-04-02 11:30:52 +0300
committerOskari Timperi <oskari.timperi@iki.fi>2018-04-02 11:30:52 +0300
commitf189bb22d71d4e25984c8d1e72c37a4a9823d2b2 (patch)
tree8a97ec0c6c52c2b86ce4cb54b54952a3003d1207
parent15825dac0392788e7a7e7782daeb7d8184d7e0ca (diff)
downloadnimpb-f189bb22d71d4e25984c8d1e72c37a4a9823d2b2.tar.gz
nimpb-f189bb22d71d4e25984c8d1e72c37a4a9823d2b2.zip
Raise an exception if an invalid field number is encountered
-rw-r--r--generator/protoc_gen_nim.nim2
-rw-r--r--src/protobuf/stream.nim4
2 files changed, 6 insertions, 0 deletions
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