diff options
Diffstat (limited to 'src/LivingVillage.Kernel')
| -rw-r--r-- | src/LivingVillage.Kernel/WorldSave.fs | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/LivingVillage.Kernel/WorldSave.fs b/src/LivingVillage.Kernel/WorldSave.fs index 726170b..8a47c7d 100644 --- a/src/LivingVillage.Kernel/WorldSave.fs +++ b/src/LivingVillage.Kernel/WorldSave.fs @@ -72,13 +72,13 @@ module WorldSave = let private readFloat (reader: TokenReader) label = let token = reader.Take(label) match Double.TryParse(token, NumberStyles.Float, invariant) with - | true, value -> value + | true, value when not (Double.IsNaN(value) || Double.IsInfinity(value)) -> value | _ -> invalid (sprintf "invalid %s" label) let private readFloat32 (reader: TokenReader) label = let token = reader.Take(label) match Single.TryParse(token, NumberStyles.Float, invariant) with - | true, value -> value + | true, value when not (Single.IsNaN(value) || Single.IsInfinity(value)) -> value | _ -> invalid (sprintf "invalid %s" label) let private readBool (reader: TokenReader) label = @@ -450,6 +450,8 @@ module WorldSave = [ for index in 0 .. count - 1 do let item = readItemKind reader (sprintf "%s[%d].item" label index) let quantity = readInt reader (sprintf "%s[%d].quantity" label index) + if quantity < 0 then + invalid (sprintf "invalid %s[%d].quantity" label index) yield item, quantity ] |> Map.ofList |
