forked from weaselab/weaseljson
schemagen: handle WeaselJsonParser_create failure in RootBuilder
If WeaselJsonParser_create returns nullptr (e.g. negative stack size or allocation failure), set the existing error_ flag so that subsequent feed()/finish() calls return WeaselJson_REJECT instead of dereferencing the null parser_. Also add a regression test in test_gen.cpp that constructs a RootBuilder with an invalid stack size and verifies it rejects without crashing. Closes #36
This commit is contained in:
@@ -68,6 +68,15 @@ int main() {
|
||||
expectReject(json, "unknown key in strict root");
|
||||
}
|
||||
|
||||
// ---- invalid stack size is rejected without crashing ----
|
||||
{
|
||||
RootBuilder b(-1);
|
||||
char buf[] = "null";
|
||||
WeaselJsonStatus s = b.feed(buf, sizeof(buf) - 1);
|
||||
CHECK(s == WeaselJson_REJECT);
|
||||
printf("ok invalid stack size rejected, not crashed\n");
|
||||
}
|
||||
|
||||
{
|
||||
std::string json = R"({
|
||||
"name": "Ada É",
|
||||
|
||||
@@ -892,6 +892,10 @@ public:
|
||||
explicit RootBuilder(int stackSize = 1024) {{
|
||||
cb_ = makeCallbacks();
|
||||
parser_ = WeaselJsonParser_create(stackSize, &cb_, this, 0);
|
||||
if (!parser_) {{
|
||||
error_ = true;
|
||||
return;
|
||||
}}
|
||||
{self._ctor_body()}
|
||||
}}
|
||||
~RootBuilder() {{ if (parser_) WeaselJsonParser_destroy(parser_); }}
|
||||
|
||||
Reference in New Issue
Block a user