[PATCH] D108984: [WebAssembly][libObject] Avoid re-use of Section object during parsing
Sam Clegg via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 31 04:13:11 PDT 2021
sbc100 created this revision.
Herald added subscribers: wingo, ecnelises, sunfish, hiraditya, jgravelle-google, dschuff.
Herald added a reviewer: alexander-shaposhnikov.
Herald added a reviewer: rupprecht.
Herald added a reviewer: jhenderson.
sbc100 requested review of this revision.
Herald added subscribers: llvm-commits, MaskRay, aheejin.
Herald added a project: LLVM.
The re-use of this struct across iterations of the loop was causing
fields (specifically Name) to be incorrectly shared between multiple
sections.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D108984
Files:
llvm/lib/Object/WasmObjectFile.cpp
llvm/test/tools/llvm-objcopy/wasm/basic-only-section.test
Index: llvm/test/tools/llvm-objcopy/wasm/basic-only-section.test
===================================================================
--- llvm/test/tools/llvm-objcopy/wasm/basic-only-section.test
+++ llvm/test/tools/llvm-objcopy/wasm/basic-only-section.test
@@ -1,32 +1,35 @@
## Test --only-section.
# RUN: yaml2obj %s -o %t
-# RUN: llvm-objcopy --only-section=producers %t %t2
+# RUN: llvm-objcopy --only-section=foo %t %t2
# RUN: obj2yaml %t2 | FileCheck --implicit-check-not TYPE --implicit-check-not linking %s
## Test that it's the same with only-section + keep-section (for the same section).
-# RUN: llvm-objcopy --only-section=producers --keep-section=producers %t %t2
+# RUN: llvm-objcopy --only-section=foo --keep-section=foo %t %t2
# RUN: obj2yaml %t2 | FileCheck --implicit-check-not TYPE --implicit-check-not linking %s
## Also test that only-section overrides remove-section.
-# RUN: llvm-objcopy --only-section=producers --remove-section=producers %t %t2
+# RUN: llvm-objcopy --only-section=foo --remove-section=foo %t %t2
# RUN: obj2yaml %t2 | FileCheck --implicit-check-not linking %s
-## This file has both known and custom sections. Check that only the producers section is left.
+## This file has both known and custom sections. Check that only the foo section is left.
# CHECK: Sections:
# CHECK-NEXT: - Type: CUSTOM
-# CHECK-NEXT: Name: producers
-# CHECK-NEXT: Tools:
+# CHECK-NEXT: Name: foo
+# CHECK-NEXT: Payload: DEADBEEF
## Test that only-section + keep-section keeps both sections.
-# RUN: llvm-objcopy --only-section=producers --keep-section=linking %t %t2
+# RUN: llvm-objcopy --only-section=foo --keep-section=linking %t %t2
# RUN: obj2yaml %t2 | FileCheck --implicit-check-not=TYPE --check-prefix=KEEP %s
+# KEEP: Name: foo
# KEEP: Name: linking
-# KEEP: Name: producers
--- !WASM
FileHeader:
Version: 0x00000001
Sections:
+ - Type: CUSTOM
+ Name: foo
+ Payload: DEADBEEF
- Type: TYPE
Signatures:
- Index: 0
@@ -37,8 +40,3 @@
- Type: CUSTOM
Name: linking
Version: 2
- - Type: CUSTOM
- Name: producers
- Tools:
- - Name: clang
- Version: 9.0.0
Index: llvm/lib/Object/WasmObjectFile.cpp
===================================================================
--- llvm/lib/Object/WasmObjectFile.cpp
+++ llvm/lib/Object/WasmObjectFile.cpp
@@ -286,9 +286,9 @@
return;
}
- WasmSection Sec;
WasmSectionOrderChecker Checker;
while (Ctx.Ptr < Ctx.End) {
+ WasmSection Sec;
if ((Err = readSection(Sec, Ctx, Checker)))
return;
if ((Err = parseSection(Sec)))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D108984.369674.patch
Type: text/x-patch
Size: 2619 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210831/0c0ac642/attachment.bin>
More information about the llvm-commits
mailing list