Reject too-small stackSize in WeaselJsonParser_create
A stackSize smaller than the bootstrap symbols pushed by reset() (or a negative one) left the parser with an empty stack: reset() swallowed the push() overflow via std::ignore, and the first parse() then read past the empty stack (top() dereferences *(stackPtr-1)), crashing. Detect this in create() by checking empty() after construction and returning null, and guard against negative stackSize wrapping the allocation size. Also fix an incremental-build bug: the ld -r bundle step only had an order-only dependency on the object library under Ninja, so editing lib.cpp rebuilt the object but never relinked the libraries. Add the object files to DEPENDS so the bundle (and the .so/.a) rebuild on change.
This commit is contained in:
@@ -50,7 +50,8 @@ enum WeaselJsonFlags {
|
||||
/** Create a parser. Increasing stack size increases memory usage but also
|
||||
* increases the depth of nested json accepted. `callbacks` and `userdata` must
|
||||
* outlive the returned parser. Returns null if there's insufficient available
|
||||
* memory */
|
||||
* memory, or if `stackSize` is negative or too small to hold a minimal
|
||||
* document. */
|
||||
WeaselJsonParser *WeaselJsonParser_create(int stackSize,
|
||||
const WeaselJsonCallbacks *callbacks,
|
||||
void *userdata, int flags);
|
||||
|
||||
Reference in New Issue
Block a user