diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2018-04-02 11:30:52 +0300 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2018-04-02 11:30:52 +0300 |
| commit | f189bb22d71d4e25984c8d1e72c37a4a9823d2b2 (patch) | |
| tree | 8a97ec0c6c52c2b86ce4cb54b54952a3003d1207 | |
| parent | 15825dac0392788e7a7e7782daeb7d8184d7e0ca (diff) | |
| download | nimpb-f189bb22d71d4e25984c8d1e72c37a4a9823d2b2.tar.gz nimpb-f189bb22d71d4e25984c8d1e72c37a4a9823d2b2.zip | |
Raise an exception if an invalid field number is encountered
| -rw-r--r-- | generator/protoc_gen_nim.nim | 2 | ||||
| -rw-r--r-- | src/protobuf/stream.nim | 4 |
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 |
