[llvm] r240357 - Fix PR23914.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Mon Jun 22 19:07:56 PDT 2015


Thanks!

On 22 June 2015 at 19:36, Evgeniy Stepanov <eugeni.stepanov at gmail.com> wrote:
> 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: }
> +
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list