[PATCH] D127369: [Object][COFF] Fix section name parsing error when the name field is not null-padded

Pengxuan Zheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 9 12:58:48 PDT 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
pzheng marked an inline comment as done.
Closed by commit rG064db243113c: [Object][COFF] Fix section name parsing error when the name field is not null… (authored by pzheng).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D127369

Files:
  llvm/lib/Object/COFFObjectFile.cpp
  llvm/test/tools/llvm-objdump/COFF/Inputs/long-section-name.yaml
  llvm/test/tools/llvm-objdump/COFF/long-section-name.test


Index: llvm/test/tools/llvm-objdump/COFF/long-section-name.test
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objdump/COFF/long-section-name.test
@@ -0,0 +1,30 @@
+# RUN: yaml2obj %S/Inputs/long-section-name.yaml -o %t.obj
+
+## Replace the section name field of the object file with /4\0abcde emulating
+## a section name field not fully null-padded at the end.
+# RUN: %python %s %t.obj
+
+## This should print the LongSectionName section.
+# RUN: llvm-objdump --headers %t.obj | FileCheck %s
+
+# CHECK: LongSectionName
+
+import sys
+
+if len(sys.argv) < 2:
+  print("Use: python3 long-section-name.test <OBJECT_FILE>")
+  exit(1)
+
+pattern = b'/4'
+replacement = b'/4\0abcde'
+
+data = None
+with open(sys.argv[1], "rb") as inp:
+  data = inp.read()
+with open(sys.argv[1], "wb") as outp:
+  pos = data.find(pattern)
+  if pos == -1:
+    sys.exit("Error: Pattern /4 not found in " + sys.argv[1])
+  outp.write(data[:pos])
+  outp.write(replacement)
+  outp.write(data[pos + len(replacement):])
Index: llvm/test/tools/llvm-objdump/COFF/Inputs/long-section-name.yaml
===================================================================
--- /dev/null
+++ llvm/test/tools/llvm-objdump/COFF/Inputs/long-section-name.yaml
@@ -0,0 +1,15 @@
+--- !COFF
+header:
+  Machine:         IMAGE_FILE_MACHINE_ARM64
+  Characteristics: [  ]
+sections:
+  - Name:            LongSectionName
+    Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
+symbols:
+  - Name:            LongSectionName
+    Value:           0
+    SectionNumber:   1
+    SimpleType:      IMAGE_SYM_TYPE_NULL
+    ComplexType:     IMAGE_SYM_DTYPE_NULL
+    StorageClass:    IMAGE_SYM_CLASS_STATIC
+...
Index: llvm/lib/Object/COFFObjectFile.cpp
===================================================================
--- llvm/lib/Object/COFFObjectFile.cpp
+++ llvm/lib/Object/COFFObjectFile.cpp
@@ -1168,7 +1168,7 @@
         return createStringError(object_error::parse_failed,
                                  "invalid section name");
     } else {
-      if (Name.substr(1).getAsInteger(10, Offset))
+      if (Name.substr(1).consumeInteger(10, Offset))
         return createStringError(object_error::parse_failed,
                                  "invalid section name");
     }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D127369.435657.patch
Type: text/x-patch
Size: 2337 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220609/72363a6a/attachment.bin>


More information about the llvm-commits mailing list