[llvm] [llvm-pdbutil] Print error on invalid YAML (PR #207528)

via llvm-commits llvm-commits at lists.llvm.org
Sat Jul 4 10:28:47 PDT 2026


https://github.com/Nerixyz updated https://github.com/llvm/llvm-project/pull/207528

>From 0f14d167261414b26ffec4b9c6609219a24066e4 Mon Sep 17 00:00:00 2001
From: Nerixyz <nerixdev at outlook.de>
Date: Sat, 4 Jul 2026 18:33:01 +0200
Subject: [PATCH 1/2] [llvm-pdbutil] Print error on invalid YAML

---
 llvm/test/tools/llvm-pdbutil/invalid-yaml.test | 10 ++++++++++
 llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp       | 10 +++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)
 create mode 100644 llvm/test/tools/llvm-pdbutil/invalid-yaml.test

diff --git a/llvm/test/tools/llvm-pdbutil/invalid-yaml.test b/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
new file mode 100644
index 0000000000000..e650a3d5e72bc
--- /dev/null
+++ b/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
@@ -0,0 +1,10 @@
+## Test that we produce an error if the YAML input is invalid.
+# RUN: not llvm-pdbutil yaml2pdb %s --pdb=%t.pdb 2>&1 | FileCheck %s
+
+---
+- A list is not valid
+# CHECK: invalid-yaml.test:[[@LINE-1]]:1: error: not a mapping
+# CHECK-NEXT: - A list
+# CHECK-NEXT: ^
+# CHECK-NEXT: llvm-pdbutil: failed to parse YAML input: invalid argument
+...
diff --git a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
index 77aed01ad498f..553866f4e9bc4 100644
--- a/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
+++ b/llvm/tools/llvm-pdbutil/llvm-pdbutil.cpp
@@ -819,16 +819,24 @@ static void yamlToPdb(StringRef Path, unsigned DocNum) {
 
   std::unique_ptr<MemoryBuffer> &Buffer = ErrorOrBuffer.get();
 
-  llvm::yaml::Input In(Buffer->getBuffer());
+  llvm::yaml::Input In(
+      Buffer->getMemBufferRef(), nullptr,
+      [](const SMDiagnostic &Diag, void *) { Diag.print(nullptr, errs()); });
+
   for (unsigned CurrentDoc = 1; CurrentDoc < DocNum; ++CurrentDoc) {
     if (!In.nextDocument())
       ExitOnErr(createFileError(
           Path, createStringErrorV("cannot find the {0}{1} document", DocNum,
                                    getOrdinalSuffix(DocNum))));
   }
+
   pdb::yaml::PdbObject YamlObj(Allocator);
   In >> YamlObj;
 
+  if (std::error_code EC = In.error())
+    ExitOnErr(
+        createStringErrorV("failed to parse YAML input: {0}", EC.message()));
+
   PDBFileBuilder Builder(Allocator);
 
   uint32_t BlockSize = 4096;

>From 6fe63881f9817e8c408f8ed0964f3eea9e79ce81 Mon Sep 17 00:00:00 2001
From: Nerixyz <nerixdev at outlook.de>
Date: Sat, 4 Jul 2026 19:28:35 +0200
Subject: [PATCH 2/2] fix: don't check error code message (OS dependent)

---
 llvm/test/tools/llvm-pdbutil/invalid-yaml.test | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/llvm/test/tools/llvm-pdbutil/invalid-yaml.test b/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
index e650a3d5e72bc..4f65161c47d4a 100644
--- a/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
+++ b/llvm/test/tools/llvm-pdbutil/invalid-yaml.test
@@ -6,5 +6,5 @@
 # CHECK: invalid-yaml.test:[[@LINE-1]]:1: error: not a mapping
 # CHECK-NEXT: - A list
 # CHECK-NEXT: ^
-# CHECK-NEXT: llvm-pdbutil: failed to parse YAML input: invalid argument
+# CHECK-NEXT: llvm-pdbutil: failed to parse YAML input:
 ...



More information about the llvm-commits mailing list