summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Kernel/WorldSave.fs
diff options
context:
space:
mode:
Diffstat (limited to 'src/LivingVillage.Kernel/WorldSave.fs')
-rw-r--r--src/LivingVillage.Kernel/WorldSave.fs6
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