Open al6x opened 1 year ago
If you patch toUgly
to render nil
JsonNodes into <nil>
, you get:
{"data":[{"hcode":0,"key":0,"val":<nil>},{"hcode":0,"key":0,"val":<nil>},{"hcode":0,"key":0,"val":<nil>},{"hcode":0,"key":0,"val":<nil>},{"hcode":0,"key":0,"val":<nil>},{"hcode":8641844181895329213,"key":1,"val":"v"},{"hcode":0,"key":0,"val":<nil>},{"hcode":0,"key":0,"val":<nil>}],"counter":1}
The type serialized here is Table[int, JsonNode]
and there are nil
values of JsonNode
inside the table object, which seemingly do not get serialized into null
(although if this happened they might get deserialized into JNull
nodes).
!nim c
import std/[json, jsonutils, tables]
echo {9:"X".toJson}.toTable.toJson
@juancarlospaco (contributor)devel :-1: FAIL
Output
Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-#devel/lib/pure/json.nim $
/home/runner/.choosenim/toolchains/nim-#devel/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-#devel/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-#devel/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-#devel/lib/pure/json.nim toUgly
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp'
2023-07-07T00:09:40Z
2023-07-07T00:10:15
2023-07-07T00:10:17
1 minute
nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/pure/json.nim $
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-1.6.14/lib/pure/json.nim toUgly
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '
2023-07-07T00:09:40Z
2023-07-07T00:10:18
2023-07-07T00:10:19
1 minute
nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Traceback (most recent call last)
/home/runner/work/Nim/Nim/temp.nim temp
/home/runner/.choosenim/toolchains/nim-1.6.0/lib/pure/json.nim $
/home/runner/.choosenim/toolchains/nim-1.6.0/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-1.6.0/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-1.6.0/lib/pure/json.nim toUgly
/home/runner/.choosenim/toolchains/nim-1.6.0/lib/pure/json.nim toUgly
SIGSEGV: Illegal storage access. (Attempt to read from nil?)
Segmentation fault (core dumped)
Error: execution of an external program failed: '/home/runner/work/Nim/Nim/temp '
2023-07-07T00:09:40Z
2023-07-07T00:10:22
2023-07-07T00:10:24
1 minute
nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
{"data":[{"hcode":0,"key":0,"val":null},{"hcode":0,"key":0,"val":null},{"hcode":0,"key":0,"val":null},{"hcode":7204881626893065923,"key":9,"val":{"kind":4,"str":"X"}},{"hcode":0,"key":0,"val":null},{"hcode":0,"key":0,"val":null},{"hcode":0,"key":0,"val":null},{"hcode":0,"key":0,"val":null}],"counter":1}
2023-07-07T00:09:40Z
2023-07-07T00:10:26
2023-07-07T00:10:28
1 minute
nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 11) Error: cannot open file: std/jsonutils
2023-07-07T00:09:40Z
2023-07-07T00:10:43
2023-07-07T00:10:43
1 minute
nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Error: Command failed: nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
/home/runner/work/Nim/Nim/temp.nim(1, 11) Error: cannot open file: std/jsonutils
2023-07-07T00:09:40Z
2023-07-07T00:10:56
2023-07-07T00:10:56
now
nim c --run -d:strip -d:ssl -d:nimDisableCertificateValidation --forceBuild:on --colors:off --threads:off --verbosity:0 --hints:off --warnings:off --lineTrace:off --nimcache:/home/runner/work/Nim/Nim --out:/home/runner/work/Nim/Nim/temp /home/runner/work/Nim/Nim/temp.nim
Miran introduced a bug at 2021-08-24 17:15:26 +0200
on commit #24178bf8a with message:
get rid of the warnings during bootstrapping (#18741)
* fix bootstrapping hints and warnings
* revert removals in ccgtypes
The bug is in the files:
compiler/nimlexbase.nim
compiler/semfold.nim
compiler/sighashes.nim
compiler/suggest.nim
The bug can be in the commits:
(Diagnostics sometimes off-by-one).
57 minutes
bisecting 3393
commits at 60
commits per second. I think it's that you're turning the value "v"
into JsonNode
. It's a strange bug. This works fine.
import std/[json, jsonutils, tables]
echo ${
1: "v"
}.to_table.to_json
However,
let sVal = "v".toJson()
assert sVal.kind == JString
works fine, without a segfault. However,
let sVal = "v".toJson()
assert sVal.kind == JString
echo ${
1: sVal
}.toTable.toJson
produces a segfault, just like you mentioned.
HOWEVER (sorry),
echo ${
"jString": sVal
}.toTable.toJson
does not do that. It seems that when a TableRef[int, JsonNode]
is attempted to be converted to a JsonNode
, a segfault occurs. Upon further inspection, the segfault occurs on all these types as the key's type:
int
and all signed and unsigned primitives (int8
, int16
, int32
, int64
, uint8
, uint16
, uint32
, uint64
)float
and all its "derivatives"bool
There's probably more, but this is all I found for now.By default, toJson
doesn't handle nil for JsonNode
. But you can use ToJsonOptions
to force treating JsonNode as a regular ref object
import std/[json, jsonutils, tables]
let option = ToJsonOptions(
enumMode: joptEnumOrd,
jsonNodeMode: joptJsonNodeAsObject
) # treats JsonNode as a regular ref object
echo $({ 1: "v".to_json }.to_table.to_json(option))
Description
The code below wold cause error
Nim Version
Nim Compiler Version 1.6.12 [MacOSX: amd64] Compiled at 2023-03-10 Copyright (c) 2006-2023 by Andreas Rumpf
active boot switches: -d:release -d:nimUseLinenoise
Current Output
Expected Output
No response
Possible Solution
No response
Additional Information
Also a minor thing, it produces incorrect json, try code below and instead of
{"1":"v"}
it dumps internal state of the table. Strictly speaking using numbers as keys for table is not a valid json, so not insisting, feel free to close as wontfix.