Skip to content

Commit

Permalink
check length before converting to range type (#102)
Browse files Browse the repository at this point in the history
The index type of an array is a `range` meaning that converting an
out-of-bounds value to it will raise a `Defect`.

This PR fixes the defect but does nothing for arrays which are not
"full" - probably, this should become an error.

* bump version
  • Loading branch information
arnetheduck authored Oct 19, 2024
1 parent 96fcb65 commit 6eadb6e
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 5 deletions.
2 changes: 1 addition & 1 deletion json_serialization.nimble
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
mode = ScriptMode.Verbose

packageName = "json_serialization"
version = "0.2.8"
version = "0.2.9"
author = "Status Research & Development GmbH"
description = "Flexible JSON serialization not relying on run-time type information"
license = "Apache License 2.0"
Expand Down
8 changes: 4 additions & 4 deletions json_serialization/reader_impl.nim
Original file line number Diff line number Diff line change
Expand Up @@ -312,11 +312,11 @@ proc readValue*[T](r: var JsonReader, value: var T)
elif value is array:
type IDX = typeof low(value)
r.parseArray(idx):
let i = IDX(idx + low(value).int)
if i <= high(value):
# TODO: dont's ask. this makes the code compile
if false: value[i] = value[i]
if idx < value.len:
let i = IDX(idx + low(value).int)
readValue(r, value[i])
else:
r.raiseUnexpectedValue("Too many items for " & $(typeof(value)))

elif value is (object or tuple):
mixin flavorUsesAutomaticObjectSerialization
Expand Down
9 changes: 9 additions & 0 deletions tests/test_reader.nim
Original file line number Diff line number Diff line change
Expand Up @@ -211,3 +211,12 @@ suite "JsonReader basic test":

var z = toReaderNullFields("""{"something":null,"bool":999,"string":100}""")
check execReadObject(z) == 2

test "readValue of array":
var r = toReader "[false, true, false]"
check r.readValue(array[3, bool]) == [false, true, false]

test "readValue of array error":
var r = toReader "[false, true, false]"
expect JsonReaderError:
discard r.readValue(array[2, bool])

0 comments on commit 6eadb6e

Please sign in to comment.