[llvm] [Object][DirectX] Fix UB when parsing a DXContainer from a null buffer (PR #200865)

via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 1 09:50:04 PDT 2026


llvmorg-github-actions[bot] wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-directx

Author: Ilia Kuklin (kuilpd)

<details>
<summary>Changes</summary>

Adds an additional check that `Src != nullptr` before doing other operations on it, which caused a UB in one test with #<!-- -->200413.

---
Full diff: https://github.com/llvm/llvm-project/pull/200865.diff


2 Files Affected:

- (modified) llvm/lib/Object/DXContainer.cpp (+1-1) 
- (modified) llvm/unittests/Object/DXContainerTest.cpp (+6) 


``````````diff
diff --git a/llvm/lib/Object/DXContainer.cpp b/llvm/lib/Object/DXContainer.cpp
index 0ca2fc6de3857..6d50ff7edcd30 100644
--- a/llvm/lib/Object/DXContainer.cpp
+++ b/llvm/lib/Object/DXContainer.cpp
@@ -21,7 +21,7 @@ static Error parseFailed(const Twine &Msg) {
 }
 
 static bool readIsOutOfBounds(StringRef Buffer, const char *Src, size_t Size) {
-  return Src < Buffer.begin() || Src + Size > Buffer.end();
+  return !Src || Src < Buffer.begin() || Src + Size > Buffer.end();
 }
 
 template <typename T>
diff --git a/llvm/unittests/Object/DXContainerTest.cpp b/llvm/unittests/Object/DXContainerTest.cpp
index 1526e1a380672..4eb81e0a0ed3a 100644
--- a/llvm/unittests/Object/DXContainerTest.cpp
+++ b/llvm/unittests/Object/DXContainerTest.cpp
@@ -50,6 +50,12 @@ TEST(DXCFile, EmptyFile) {
       FailedWithMessage("Reading structure out of file bounds"));
 }
 
+TEST(DXCFile, NullBuffer) {
+  EXPECT_THAT_EXPECTED(
+      DXContainer::create(MemoryBufferRef(StringRef(), "")),
+      FailedWithMessage("Reading structure out of file bounds"));
+}
+
 TEST(DXCFile, ParseHeader) {
   uint8_t Buffer[] = {0x44, 0x58, 0x42, 0x43, 0x00, 0x00, 0x00, 0x00,
                       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

``````````

</details>


https://github.com/llvm/llvm-project/pull/200865


More information about the llvm-commits mailing list