summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/YAMLTraits.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2014-08-08 13:58:00 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2014-08-08 13:58:00 +0000
commita97373f235a70b9106a6ae32574f7704aa190414 (patch)
treefe6b010ec38da9035cfcf0b1d0a81cd92412b6be /llvm/lib/Support/YAMLTraits.cpp
parente805f44c8f309d03f2f70914419e11de5c9347ee (diff)
downloadbcm5719-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.cpp7
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()) {
OpenPOWER on IntegriCloud