[llvm] r240357 - Fix PR23914.
Evgeniy Stepanov
eugeni.stepanov at gmail.com
Mon Jun 22 16:36:03 PDT 2015
Author: eugenis
Date: Mon Jun 22 18:36:03 2015
New Revision: 240357
URL: http://llvm.org/viewvc/llvm-project?rev=240357&view=rev
Log:
Fix PR23914.
r226830 moved the declaration of Buf to a nested scope, resulting
in a dangling reference (in StringRef Name), and a use-after-free.
Added:
llvm/trunk/test/MC/ELF/symver-pr23914.s
Modified:
llvm/trunk/lib/MC/ELFObjectWriter.cpp
Modified: llvm/trunk/lib/MC/ELFObjectWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/ELFObjectWriter.cpp?rev=240357&r1=240356&r2=240357&view=diff
==============================================================================
--- llvm/trunk/lib/MC/ELFObjectWriter.cpp (original)
+++ llvm/trunk/lib/MC/ELFObjectWriter.cpp Mon Jun 22 18:36:03 2015
@@ -842,12 +842,12 @@ void ELFObjectWriter::computeSymbolTable
// seems that this information is not easily accessible from the
// ELFObjectWriter.
StringRef Name = Symbol.getName();
+ SmallString<32> Buf;
if (!Name.startswith("?") && !Name.startswith("@?") &&
!Name.startswith("__imp_?") && !Name.startswith("__imp_@?")) {
// This symbol isn't following the MSVC C++ name mangling convention. We
// can thus safely interpret the @@@ in symbol names as specifying symbol
// versioning.
- SmallString<32> Buf;
size_t Pos = Name.find("@@@");
if (Pos != StringRef::npos) {
Buf += Name.substr(0, Pos);
Added: llvm/trunk/test/MC/ELF/symver-pr23914.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/symver-pr23914.s?rev=240357&view=auto
==============================================================================
--- llvm/trunk/test/MC/ELF/symver-pr23914.s (added)
+++ llvm/trunk/test/MC/ELF/symver-pr23914.s Mon Jun 22 18:36:03 2015
@@ -0,0 +1,16 @@
+// Regression test for PR23914.
+// RUN: llvm-mc -filetype=obj -triple x86_64-pc-linux-gnu %s -o - | llvm-readobj -r -t | FileCheck %s
+
+defined:
+ .symver defined, aaaaaaaaaaaaaaaaaa@@@AAAAAAAAAAAAA
+
+// CHECK: Symbol {
+// CHECK: Name: aaaaaaaaaaaaaaaaaa@@AAAAAAAAAAAAA
+// CHECK-NEXT: Value: 0x0
+// CHECK-NEXT: Size: 0
+// CHECK-NEXT: Binding: Local
+// CHECK-NEXT: Type: None
+// CHECK-NEXT: Other: 0
+// CHECK-NEXT: Section: .text
+// CHECK-NEXT: }
+
More information about the llvm-commits
mailing list