diff options
| -rw-r--r-- | deps/v8/src/json-parser.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/deps/v8/src/json-parser.h b/deps/v8/src/json-parser.h index 7265165ac..c51e1416d 100644 --- a/deps/v8/src/json-parser.h +++ b/deps/v8/src/json-parser.h @@ -185,8 +185,10 @@ Handle<Object> JsonParser<seq_ascii>::ParseJson(Handle<String> source, AdvanceSkipWhitespace(); Handle<Object> result = ParseJsonValue(); if (result.is_null() || c0_ != kEndOfString) { - // Parse failed. Current character is the unexpected token. + // Some exception (for example stack overflow) is already pending. + if (isolate_->has_pending_exception()) return Handle<Object>::null(); + // Parse failed. Current character is the unexpected token. const char* message; Factory* factory = isolate()->factory(); Handle<JSArray> array; @@ -237,6 +239,12 @@ Handle<Object> JsonParser<seq_ascii>::ParseJson(Handle<String> source, // Parse any JSON value. template <bool seq_ascii> Handle<Object> JsonParser<seq_ascii>::ParseJsonValue() { + StackLimitCheck stack_check(isolate_); + if (stack_check.HasOverflowed()) { + isolate_->StackOverflow(); + return Handle<Object>::null(); + } + switch (c0_) { case '"': return ParseJsonString(); |
