forked from OSchip/llvm-project
Fix null dereference in yaml::Document::skip
Summary: The attached test case replicates a null dereference crash in `yaml::Document::skip()`. This was fixed by adding a check and early return in the method. Reviewers: Bigcheese, hintonda, beanz Reviewed By: hintonda Subscribers: hiraditya, dexonsmith, llvm-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D69974
This commit is contained in:
parent
6ebec32b12
commit
ac385ca63f
|
@ -2288,8 +2288,8 @@ Document::Document(Stream &S) : stream(S), Root(nullptr) {
|
|||
bool Document::skip() {
|
||||
if (stream.scanner->failed())
|
||||
return false;
|
||||
if (!Root)
|
||||
getRoot();
|
||||
if (!Root && !getRoot())
|
||||
return false;
|
||||
Root->skip();
|
||||
Token &T = peekNext();
|
||||
if (T.Kind == Token::TK_StreamEnd)
|
||||
|
|
|
@ -331,4 +331,15 @@ TEST(YAMLParser, DifferentNodesIteratorOperatorEquals) {
|
|||
EXPECT_TRUE(End == AnotherEnd);
|
||||
}
|
||||
|
||||
TEST(YAMLParser, FlowSequenceTokensOutsideFlowSequence) {
|
||||
auto FlowSequenceStrs = {",", "]", "}"};
|
||||
SourceMgr SM;
|
||||
|
||||
for (auto &Str : FlowSequenceStrs) {
|
||||
yaml::Stream Stream(Str, SM);
|
||||
yaml::Document &Doc = *Stream.begin();
|
||||
EXPECT_FALSE(Doc.skip());
|
||||
}
|
||||
}
|
||||
|
||||
} // end namespace llvm
|
||||
|
|
Loading…
Reference in New Issue