YAML: Fix crash in the skip method of KeyValueNode class.
authorAlex Lorenz <arphaman@gmail.com>
Wed, 6 May 2015 23:21:29 +0000 (23:21 +0000)
committerAlex Lorenz <arphaman@gmail.com>
Wed, 6 May 2015 23:21:29 +0000 (23:21 +0000)
This commit changes the 'skip' method in the 'KeyValueNode' class
to ensure that it doesn't dereference a null pointer when calling
the 'skip' method of its value child node. It also adds a unittest
that ensures that the crash doesn't occur.

This change is motivated by a patch that implements parsing
of YAML block scalars (http://reviews.llvm.org/D9503), as one
of the unittests in that patch triggered this problem.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@236669 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/YAMLParser.h
unittests/Support/YAMLParserTest.cpp

index 3d423293b2749d8f1c0f6b434e0acd05de0ac14d..db888b816cfec69480a2d756c916cdf1203b9678 100644 (file)
@@ -253,7 +253,8 @@ public:
 
   void skip() override {
     getKey()->skip();
-    getValue()->skip();
+    if (Node *Val = getValue())
+      Val->skip();
   }
 
   static inline bool classof(const Node *N) {
index 823a0d6e3e03e4462fa02a7b2bbccea24ffc0d1d..918c2059ea63d55ddfc7bbeecf0f2032521e2db8 100644 (file)
@@ -141,6 +141,10 @@ TEST(YAMLParser, HandlesEndOfFileGracefully) {
   ExpectParseError("In object hitting EOF", "{\"\"");
 }
 
+TEST(YAMLParser, HandlesNullValuesInKeyValueNodesGracefully) {
+  ExpectParseError("KeyValueNode with null value", "test: '");
+}
+
 // Checks that the given string can be parsed into an identical string inside
 // of an array.
 static void ExpectCanParseString(StringRef String) {