[PATCH] D83673: [DebugInfo] Add unit tests for DWARFListTableHeader::length().
Igor Kudrin via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Jul 13 06:07:04 PDT 2020
ikudrin created this revision.
ikudrin added reviewers: dblaikie, jhenderson.
ikudrin added projects: LLVM, debug-info.
Herald added a subscriber: mgorny.
This adds unit tests to check the expected behavior of the method in case the unit length field is truncated.
Repository:
rG LLVM Github Monorepo
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";
+ 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
@@ -20,6 +20,7 @@
DWARFDebugLineTest.cpp
DWARFDieTest.cpp
DWARFFormValueTest.cpp
+ DWARFListTableTest.cpp
DWARFLocationExpressionTest.cpp
)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D83673.277400.patch
Type: text/x-patch
Size: 4033 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200713/997fd968/attachment.bin>
More information about the llvm-commits
mailing list