mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2025-11-13 23:23:58 -05:00
Return false in Reader::readValue when stack limit is exceeded (#1619)
jsoncpp, as a shared library, should not call `abort` merely because there's an error reading a value. See https://en.cppreference.com/w/c/program/abort, `abort` should only be called to **abnormally** cause the program to exit. Functions inserted by `atexit` are also not called, meaning that the host program may have not cleaned up resources properly. But here, exceeding stack limit isn't a sign of abnormalty. `exit` is not a good substitute either, see the `exit-in-shared-library` from Debian: https://lintian.debian.org/tags/exit-in-shared-library.html Fix #1618 In this case, returning false seems like a better idea. Co-authored-by: Jordan Bayles <bayles.jordan@gmail.com>
This commit is contained in:
parent
4bcbc6ac05
commit
30e7528001
@ -144,7 +144,12 @@ bool Reader::readValue() {
|
||||
// after calling readValue(). parse() executes one nodes_.push(), so > instead
|
||||
// of >=.
|
||||
if (nodes_.size() > stackLimit_g)
|
||||
#if JSON_USE_EXCEPTION
|
||||
throwRuntimeError("Exceeded stackLimit in readValue().");
|
||||
#else
|
||||
// throwRuntimeError aborts. Don't abort here.
|
||||
return false;
|
||||
#endif
|
||||
|
||||
Token token;
|
||||
readTokenSkippingComments(token);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user