From 09c0fb72ca2fa45999f690c7b5e88e7fc73ad1c7 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Wed, 15 Jul 2026 12:30:05 -0400 Subject: [PATCH] Handle null parser in WeaselJsonParser_parse Closes #51 --- include/weaseljson.h | 2 ++ src/lib.cpp | 3 +++ src/test.cpp | 5 +++++ src/validate.cpp | 3 +++ 4 files changed, 13 insertions(+) diff --git a/include/weaseljson.h b/include/weaseljson.h index 4a42681..211dd1b 100644 --- a/include/weaseljson.h +++ b/include/weaseljson.h @@ -38,6 +38,8 @@ enum WeaselJsonStatus { WeaselJson_REJECT, /** json is too deeply nested */ WeaselJson_OVERFLOW, + /** Tried to call parse on a null parser */ + WeaselJson_NULL, }; typedef struct WeaselJsonParser WeaselJsonParser; diff --git a/src/lib.cpp b/src/lib.cpp index 715f2c6..b805e01 100644 --- a/src/lib.cpp +++ b/src/lib.cpp @@ -46,6 +46,9 @@ WeaselJsonParser_destroy(WeaselJsonParser *parser) { __attribute__((visibility("default"))) WeaselJsonStatus WeaselJsonParser_parse(WeaselJsonParser *parser, char *buf, int len) { + if (parser == nullptr) [[unlikely]] { + return WeaselJson_NULL; + } return ((Parser3 *)parser)->parse(buf, len); } } diff --git a/src/test.cpp b/src/test.cpp index 6fef3a7..0c63161 100644 --- a/src/test.cpp +++ b/src/test.cpp @@ -330,6 +330,11 @@ TEST_CASE("parse rejects negative length") { WeaselJsonParser_destroy(parser); } +TEST_CASE("Calling parse with nullptr doesn't crash") { + char buf[10] = "hello"; + REQUIRE(WeaselJsonParser_parse(nullptr, buf, -1) == WeaselJson_NULL); +} + TEST_CASE("streaming") { testStreaming(json); } TEST_CASE("reset clears inKey and transient state") { diff --git a/src/validate.cpp b/src/validate.cpp index abbd2fa..f8d1adc 100644 --- a/src/validate.cpp +++ b/src/validate.cpp @@ -33,6 +33,9 @@ int main(int argc, char **argv) { case WeaselJson_REJECT: case WeaselJson_OVERFLOW: return 1; + case WeaselJson_NULL: + fprintf(stderr, "Could not create parser\n"); + return 1; } if (l == 0) { return 1;