mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 13:01:10 +02:00
Some checks failed
JavaScript code lint and formatting with Biome / eslint (push) Has been cancelled
Check code formatting / code-formatting (push) Has been cancelled
Check spelling with codespell / codespell (push) Has been cancelled
Build docs / build (push) Has been cancelled
Check examples / embedding (push) Has been cancelled
Package mpremote / build (push) Has been cancelled
.mpy file format and tools / test (push) Has been cancelled
Build ports metadata / build (push) Has been cancelled
alif port / build_alif (alif_ae3_build) (push) Has been cancelled
cc3200 port / build (push) Has been cancelled
esp32 port / build_idf (esp32_build_cmod_spiram_s2) (push) Has been cancelled
esp32 port / build_idf (esp32_build_s3_c3) (push) Has been cancelled
esp8266 port / build (push) Has been cancelled
mimxrt port / build (push) Has been cancelled
nrf port / build (push) Has been cancelled
powerpc port / build (push) Has been cancelled
qemu port / build_and_test_arm (push) Has been cancelled
qemu port / build_and_test_rv32 (push) Has been cancelled
renesas-ra port / build_renesas_ra_board (push) Has been cancelled
rp2 port / build (push) Has been cancelled
samd port / build (push) Has been cancelled
stm32 port / build_stm32 (stm32_misc_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_nucleo_build) (push) Has been cancelled
stm32 port / build_stm32 (stm32_pyb_build) (push) Has been cancelled
unix port / minimal (push) Has been cancelled
unix port / reproducible (push) Has been cancelled
unix port / standard (push) Has been cancelled
unix port / standard_v2 (push) Has been cancelled
unix port / coverage (push) Has been cancelled
unix port / coverage_32bit (push) Has been cancelled
unix port / nanbox (push) Has been cancelled
unix port / float (push) Has been cancelled
unix port / stackless_clang (push) Has been cancelled
unix port / float_clang (push) Has been cancelled
unix port / settrace (push) Has been cancelled
unix port / settrace_stackless (push) Has been cancelled
unix port / macos (push) Has been cancelled
unix port / qemu_mips (push) Has been cancelled
unix port / qemu_arm (push) Has been cancelled
unix port / qemu_riscv64 (push) Has been cancelled
webassembly port / build (push) Has been cancelled
windows port / build-vs (Debug, x64, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x64, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Debug, x86, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Debug, x86, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2019, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2019, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-2022, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x64, windows-latest, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2019, dev, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2019, standard, 2019, [16, 17)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2022, dev, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-2022, standard, 2022, [17, 18)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-latest, dev, 2017, [15, 16)) (push) Has been cancelled
windows port / build-vs (Release, x86, windows-latest, standard, 2017, [15, 16)) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, dev) (push) Has been cancelled
windows port / build-mingw (i686, mingw32, standard) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, dev) (push) Has been cancelled
windows port / build-mingw (x86_64, mingw64, standard) (push) Has been cancelled
windows port / cross-build-on-linux (push) Has been cancelled
zephyr port / build (push) Has been cancelled
Python code lint and formatting with ruff / ruff (push) Has been cancelled
This commit makes the JSON parser raise an exception when handling objects or arrays whose declaration is incomplete, as in missing the closing marker (brace or bracket) and if the missing marker would have been the last non-whitespace character in the incoming string. Since CPython's JSON parser would raise an exception in such a case, unlike MicroPython's, this commit aligns MicroPython's behaviour with CPython. This commit fixes issue #17141. Signed-off-by: Alessandro Gatti <a.gatti@frob.it>
98 lines
2.1 KiB
Python
98 lines
2.1 KiB
Python
try:
|
|
import json
|
|
except ImportError:
|
|
print("SKIP")
|
|
raise SystemExit
|
|
|
|
|
|
def my_print(o):
|
|
if isinstance(o, dict):
|
|
print("sorted dict", sorted(o.items()))
|
|
else:
|
|
print(o)
|
|
|
|
|
|
my_print(json.loads("null"))
|
|
my_print(json.loads("false"))
|
|
my_print(json.loads("true"))
|
|
my_print(json.loads("1"))
|
|
my_print(json.loads("-2"))
|
|
my_print(json.loads('"abc\\u0064e"'))
|
|
my_print(json.loads("[]"))
|
|
my_print(json.loads("[null]"))
|
|
my_print(json.loads("[null,false,true]"))
|
|
my_print(json.loads(" [ null , false , true ] "))
|
|
my_print(json.loads("{}"))
|
|
my_print(json.loads('{"a":true}'))
|
|
my_print(json.loads('{"a":null, "b":false, "c":true}'))
|
|
my_print(json.loads('{"a":[], "b":[1], "c":{"3":4}}'))
|
|
my_print(json.loads('"abc\\bdef"'))
|
|
my_print(json.loads('"abc\\fdef"'))
|
|
my_print(json.loads('"abc\\ndef"'))
|
|
my_print(json.loads('"abc\\rdef"'))
|
|
my_print(json.loads('"abc\\tdef"'))
|
|
my_print(json.loads('"abc\\uabcd"'))
|
|
|
|
# whitespace handling
|
|
my_print(json.loads('{\n\t"a":[]\r\n, "b":[1], "c":{"3":4} \n\r\t\r\r\r\n}'))
|
|
|
|
# loading nothing should raise exception
|
|
try:
|
|
json.loads("")
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# string which is not closed
|
|
try:
|
|
my_print(json.loads('"abc'))
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# unaccompanied closing brace
|
|
try:
|
|
my_print(json.loads("]"))
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# unspecified object type
|
|
try:
|
|
my_print(json.loads("a"))
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# bad property name
|
|
try:
|
|
my_print(json.loads('{{}:"abc"}'))
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# unexpected characters after white space
|
|
try:
|
|
my_print(json.loads("[null] a"))
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# incomplete object declaration
|
|
try:
|
|
my_print(json.loads('{"a":0,'))
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# incomplete nested array declaration
|
|
try:
|
|
my_print(json.loads('{"a":0, ['))
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# incomplete array declaration
|
|
try:
|
|
my_print(json.loads('[0,'))
|
|
except ValueError:
|
|
print("ValueError")
|
|
|
|
# incomplete nested object declaration
|
|
try:
|
|
my_print(json.loads('[0, {"a":0, '))
|
|
except ValueError:
|
|
print("ValueError")
|