[PATCH] D38082: [yaml2obj] - Don't crash on one more invalid document.

Rafael Avila de Espindola via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 20 09:07:52 PDT 2017


LGTM

George Rimar via Phabricator <reviews at reviews.llvm.org> writes:

> grimar updated this revision to Diff 116008.
> grimar added a comment.
>
> - Fixed last minute renaming mistake.
>
>
> https://reviews.llvm.org/D38082
>
> Files:
>   lib/Support/YAMLTraits.cpp
>   test/Object/yaml2obj-invalid.yaml
>
>
> Index: test/Object/yaml2obj-invalid.yaml
> ===================================================================
> --- test/Object/yaml2obj-invalid.yaml
> +++ test/Object/yaml2obj-invalid.yaml
> @@ -0,0 +1,4 @@
> +AAA: | BBB
> +
> +# RUN: not yaml2obj %s 2>&1 | FileCheck %s
> +# CHECK: Map value must not be empty
> Index: lib/Support/YAMLTraits.cpp
> ===================================================================
> --- lib/Support/YAMLTraits.cpp
> +++ lib/Support/YAMLTraits.cpp
> @@ -374,18 +374,22 @@
>      auto mapHNode = llvm::make_unique<MapHNode>(N);
>      for (KeyValueNode &KVN : *Map) {
>        Node *KeyNode = KVN.getKey();
> -      ScalarNode *KeyScalar = dyn_cast<ScalarNode>(KeyNode);
> -      if (!KeyScalar) {
> -        setError(KeyNode, "Map key must be a scalar");
> +      ScalarNode *Key = dyn_cast<ScalarNode>(KeyNode);
> +      Node *Value = KVN.getValue();
> +      if (!Key || !Value) {
> +        if (!Key)
> +          setError(KeyNode, "Map key must be a scalar");
> +        if (!Value)
> +          setError(KeyNode, "Map value must not be empty");
>          break;
>        }
>        StringStorage.clear();
> -      StringRef KeyStr = KeyScalar->getValue(StringStorage);
> +      StringRef KeyStr = Key->getValue(StringStorage);
>        if (!StringStorage.empty()) {
>          // Copy string to permanent storage
>          KeyStr = StringStorage.str().copy(StringAllocator);
>        }
> -      auto ValueHNode = this->createHNodes(KVN.getValue());
> +      auto ValueHNode = this->createHNodes(Value);
>        if (EC)
>          break;
>        mapHNode->Mapping[KeyStr] = std::move(ValueHNode);
>
>
> Index: test/Object/yaml2obj-invalid.yaml
> ===================================================================
> --- test/Object/yaml2obj-invalid.yaml
> +++ test/Object/yaml2obj-invalid.yaml
> @@ -0,0 +1,4 @@
> +AAA: | BBB
> +
> +# RUN: not yaml2obj %s 2>&1 | FileCheck %s
> +# CHECK: Map value must not be empty
> Index: lib/Support/YAMLTraits.cpp
> ===================================================================
> --- lib/Support/YAMLTraits.cpp
> +++ lib/Support/YAMLTraits.cpp
> @@ -374,18 +374,22 @@
>      auto mapHNode = llvm::make_unique<MapHNode>(N);
>      for (KeyValueNode &KVN : *Map) {
>        Node *KeyNode = KVN.getKey();
> -      ScalarNode *KeyScalar = dyn_cast<ScalarNode>(KeyNode);
> -      if (!KeyScalar) {
> -        setError(KeyNode, "Map key must be a scalar");
> +      ScalarNode *Key = dyn_cast<ScalarNode>(KeyNode);
> +      Node *Value = KVN.getValue();
> +      if (!Key || !Value) {
> +        if (!Key)
> +          setError(KeyNode, "Map key must be a scalar");
> +        if (!Value)
> +          setError(KeyNode, "Map value must not be empty");
>          break;
>        }
>        StringStorage.clear();
> -      StringRef KeyStr = KeyScalar->getValue(StringStorage);
> +      StringRef KeyStr = Key->getValue(StringStorage);
>        if (!StringStorage.empty()) {
>          // Copy string to permanent storage
>          KeyStr = StringStorage.str().copy(StringAllocator);
>        }
> -      auto ValueHNode = this->createHNodes(KVN.getValue());
> +      auto ValueHNode = this->createHNodes(Value);
>        if (EC)
>          break;
>        mapHNode->Mapping[KeyStr] = std::move(ValueHNode);


More information about the llvm-commits mailing list