[PATCH] D83673: [DebugInfo] Add unit tests for DWARFListTableHeader::length().

Igor Kudrin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 14 02:36:20 PDT 2020


This revision was automatically updated to reflect the committed changes.
ikudrin marked an inline comment as done.
Closed by commit rGdd6faf13d8e2: [DebugInfo] Add unit tests for DWARFListTableHeader::length(). (authored by ikudrin).

Changed prior to commit:
  https://reviews.llvm.org/D83673?vs=277400&id=277721#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D83673/new/

https://reviews.llvm.org/D83673

Files:
  llvm/unittests/DebugInfo/DWARF/CMakeLists.txt
  llvm/unittests/DebugInfo/DWARF/DWARFListTableTest.cpp


Index: llvm/unittests/DebugInfo/DWARF/DWARFListTableTest.cpp
===================================================================
--- /dev/null
+++ llvm/unittests/DebugInfo/DWARF/DWARFListTableTest.cpp
@@ -0,0 +1,76 @@
+//===- DWARFListTableTest.cpp ---------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/DebugInfo/DWARF/DWARFListTable.h"
+#include "llvm/Testing/Support/Error.h"
+#include "gtest/gtest.h"
+
+using namespace llvm;
+
+namespace {
+
+TEST(DWARFListTableHeader, TruncatedLength) {
+  static const char SecData[] = "\x33\x22\x11"; // Truncated DWARF32 length
+  DWARFDataExtractor Extractor(StringRef(SecData, sizeof(SecData) - 1),
+                               /*isLittleEndian=*/true,
+                               /*AddrSize=*/4);
+  DWARFListTableHeader Header(/*SectionName=*/".debug_rnglists",
+                              /*ListTypeString=*/"range");
+  uint64_t Offset = 0;
+  EXPECT_THAT_ERROR(
+      Header.extract(Extractor, &Offset),
+      FailedWithMessage(
+          "parsing .debug_rnglists table at offset 0x0: unexpected end of data "
+          "at offset 0x3 while reading [0x0, 0x4)"));
+  // length() is expected to return 0 to indicate that the unit length field
+  // can not be parsed and so we can not, for example, skip the current set
+  // to continue parsing from the next one.
+  EXPECT_EQ(Header.length(), 0u);
+}
+
+TEST(DWARFListTableHeader, TruncatedLengthDWARF64) {
+  static const char SecData[] =
+      "\xff\xff\xff\xff"      // DWARF64 mark
+      "\x55\x44\x33\x22\x11"; // Truncated DWARF64 length
+  DWARFDataExtractor Extractor(StringRef(SecData, sizeof(SecData) - 1),
+                               /*isLittleEndian=*/true,
+                               /*AddrSize=*/4);
+  DWARFListTableHeader Header(/*SectionName=*/".debug_rnglists",
+                              /*ListTypeString=*/"range");
+  uint64_t Offset = 0;
+  EXPECT_THAT_ERROR(
+      Header.extract(Extractor, &Offset),
+      FailedWithMessage(
+          "parsing .debug_rnglists table at offset 0x0: unexpected end of data "
+          "at offset 0x9 while reading [0x4, 0xc)"));
+  // length() is expected to return 0 to indicate that the unit length field
+  // can not be parsed and so we can not, for example, skip the current set
+  // to continue parsing from the next one.
+  EXPECT_EQ(Header.length(), 0u);
+}
+
+TEST(DWARFListTableHeader, TruncatedHeader) {
+  static const char SecData[] = "\x02\x00\x00\x00" // Length
+                                "\x05\x00";        // Version
+  DWARFDataExtractor Extractor(StringRef(SecData, sizeof(SecData) - 1),
+                               /*isLittleEndian=*/true,
+                               /*AddrSize=*/4);
+  DWARFListTableHeader Header(/*SectionName=*/".debug_rnglists",
+                              /*ListTypeString=*/"range");
+  uint64_t Offset = 0;
+  EXPECT_THAT_ERROR(
+      Header.extract(Extractor, &Offset),
+      FailedWithMessage(".debug_rnglists table at offset 0x0 has too small "
+                        "length (0x6) to contain a complete header"));
+  // length() is expected to return the full length of the set if the unit
+  // length field is read, even if an error occurred during the parsing,
+  // to allow skipping the current set and continue parsing from the next one.
+  EXPECT_EQ(Header.length(), 6u);
+}
+
+} // end anonymous namespace
Index: llvm/unittests/DebugInfo/DWARF/CMakeLists.txt
===================================================================
--- llvm/unittests/DebugInfo/DWARF/CMakeLists.txt
+++ llvm/unittests/DebugInfo/DWARF/CMakeLists.txt
@@ -21,6 +21,7 @@
   DWARFDieTest.cpp
   DWARFExpressionCompactPrinterTest.cpp
   DWARFFormValueTest.cpp
+  DWARFListTableTest.cpp
   DWARFLocationExpressionTest.cpp
   )
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83673.277721.patch
Type: text/x-patch
Size: 4076 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200714/22f026ad/attachment.bin>


More information about the llvm-commits mailing list