diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-08 13:58:00 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-08-08 13:58:00 +0000 |
commit | a97373f235a70b9106a6ae32574f7704aa190414 (patch) | |
tree | fe6b010ec38da9035cfcf0b1d0a81cd92412b6be /llvm/lib/Support/YAMLTraits.cpp | |
parent | e805f44c8f309d03f2f70914419e11de5c9347ee (diff) | |
download | bcm5719-llvm-a97373f235a70b9106a6ae32574f7704aa190414.tar.gz bcm5719-llvm-a97373f235a70b9106a6ae32574f7704aa190414.zip |
Fix bug 20125 - clang-format segfaults on bad config.
The problem was in unchecked dyn_cast inside of Input::createHNodes.
Patch by Roman Kashitsyn!
llvm-svn: 215205
Diffstat (limited to 'llvm/lib/Support/YAMLTraits.cpp')
-rw-r--r-- | llvm/lib/Support/YAMLTraits.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/llvm/lib/Support/YAMLTraits.cpp b/llvm/lib/Support/YAMLTraits.cpp index 5212624f0cd..526667fc59e 100644 --- a/llvm/lib/Support/YAMLTraits.cpp +++ b/llvm/lib/Support/YAMLTraits.cpp @@ -326,7 +326,12 @@ Input::HNode *Input::createHNodes(Node *N) { } else if (MappingNode *Map = dyn_cast<MappingNode>(N)) { MapHNode *mapHNode = new MapHNode(N); for (KeyValueNode &KVN : *Map) { - ScalarNode *KeyScalar = dyn_cast<ScalarNode>(KVN.getKey()); + Node *KeyNode = KVN.getKey(); + ScalarNode *KeyScalar = dyn_cast<ScalarNode>(KeyNode); + if (!KeyScalar) { + setError(KeyNode, "Map key must be a scalar"); + break; + } StringStorage.clear(); StringRef KeyStr = KeyScalar->getValue(StringStorage); if (!StringStorage.empty()) { |