[lld] r191403 - [ELF] Fix use after free.
Sean Silva
silvas at purdue.edu
Thu Sep 26 16:08:54 PDT 2013
asan?
On Wed, Sep 25, 2013 at 6:12 PM, Michael J. Spencer
<bigcheesegs at gmail.com>wrote:
> Author: mspencer
> Date: Wed Sep 25 17:12:14 2013
> New Revision: 191403
>
> URL: http://llvm.org/viewvc/llvm-project?rev=191403&view=rev
> Log:
> [ELF] Fix use after free.
>
> Modified:
> lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
> lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
>
> Modified: lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h?rev=191403&r1=191402&r2=191403&view=diff
>
> ==============================================================================
> --- lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h (original)
> +++ lld/trunk/include/lld/ReaderWriter/ELFLinkingContext.h Wed Sep 25
> 17:12:14 2013
> @@ -156,7 +156,7 @@ public:
> virtual void setNoAllowDynamicLibraries() { _noAllowDynamicLibraries =
> true; }
>
> /// Searches directories for a match on the input File
> - llvm::ErrorOr<std::string>
> + llvm::ErrorOr<StringRef>
> searchLibrary(StringRef libName,
> const std::vector<StringRef> &searchPath) const;
>
>
> Modified: lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp?rev=191403&r1=191402&r2=191403&view=diff
>
> ==============================================================================
> --- lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp (original)
> +++ lld/trunk/lib/ReaderWriter/ELF/ELFLinkingContext.cpp Wed Sep 25
> 17:12:14 2013
> @@ -149,48 +149,49 @@ ELFLinkingContext::create(llvm::Triple t
> }
> }
>
> -llvm::ErrorOr<std::string> ELFLinkingContext::searchLibrary(
> +llvm::ErrorOr<StringRef> ELFLinkingContext::searchLibrary(
> StringRef libName, const std::vector<StringRef> &searchPath) const {
> bool foundFile = false;
> StringRef pathref;
> + SmallString<128> path;
> for (StringRef dir : searchPath) {
> // Search for dynamic library
> if (!_isStaticExecutable) {
> - SmallString<128> dynlibPath;
> + path.clear();
> if (dir.startswith("=/")) {
> - dynlibPath.assign(_sysrootPath);
> - dynlibPath.append(dir.substr(1));
> + path.assign(_sysrootPath);
> + path.append(dir.substr(1));
> } else {
> - dynlibPath.assign(dir);
> + path.assign(dir);
> }
> - llvm::sys::path::append(dynlibPath, Twine("lib") + libName + ".so");
> - pathref = dynlibPath.str();
> + llvm::sys::path::append(path, Twine("lib") + libName + ".so");
> + pathref = path.str();
> if (llvm::sys::fs::exists(pathref)) {
> foundFile = true;
> }
> }
> // Search for static libraries too
> if (!foundFile) {
> - SmallString<128> archivefullPath;
> + path.clear();
> if (dir.startswith("=/")) {
> - archivefullPath.assign(_sysrootPath);
> - archivefullPath.append(dir.substr(1));
> + path.assign(_sysrootPath);
> + path.append(dir.substr(1));
> } else {
> - archivefullPath.assign(dir);
> + path.assign(dir);
> }
> - llvm::sys::path::append(archivefullPath, Twine("lib") + libName +
> ".a");
> - pathref = archivefullPath.str();
> + llvm::sys::path::append(path, Twine("lib") + libName + ".a");
> + pathref = path.str();
> if (llvm::sys::fs::exists(pathref)) {
> foundFile = true;
> }
> }
> if (foundFile)
> - return (*(new (_alloc) std::string(pathref.str())));
> + return StringRef(*new (_alloc) std::string(pathref));
> }
> if (!llvm::sys::fs::exists(libName))
> return llvm::make_error_code(llvm::errc::no_such_file_or_directory);
>
> - return std::string(libName);
> + return libName;
> }
>
> std::unique_ptr<File> ELFLinkingContext::createUndefinedSymbolFile() {
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130926/5d00ba79/attachment.html>
More information about the llvm-commits
mailing list