Do not barf on invalid ELF files
authorTudor Bosman <tudorb@fb.com>
Fri, 19 Sep 2014 19:58:10 +0000 (12:58 -0700)
committerdcsommer <dcsommer@fb.com>
Fri, 19 Sep 2014 22:31:15 +0000 (15:31 -0700)
Summary: The Haskell runtime does magic, and loads an ET_REL file directly.

Test Plan: ran it

Reviewed By: jon.coens@fb.com

Subscribers: njormrod, rkroll

FB internal diff: D1566853

Tasks: 4401996

@override-unit-failures

folly/experimental/symbolizer/ElfCache.cpp

index d56f91ae02fc2b9da76050091839c9600c880839..713cd1d47da4718c5de4dca7f91f250a731a5090 100644 (file)
@@ -49,10 +49,9 @@ std::shared_ptr<ElfFile> SignalSafeElfCache::getFile(StringPiece p) {
 
   const char* msg = "";
   int r = f->openNoThrow(path.data(), true, &msg);
-  if (r == ElfFile::kSystemError) {
+  if (r != ElfFile::kSuccess) {
     return nullptr;
   }
-  FOLLY_SAFE_CHECK(r == ElfFile::kSuccess, msg);
 
   map_[path] = n;
   return f;
@@ -79,10 +78,9 @@ std::shared_ptr<ElfFile> ElfCache::getFile(StringPiece p) {
   // No negative caching
   const char* msg = "";
   int r = entry->file.openNoThrow(path.c_str(), true, &msg);
-  if (r == ElfFile::kSystemError) {
+  if (r != ElfFile::kSuccess) {
     return nullptr;
   }
-  FOLLY_SAFE_CHECK(r == ElfFile::kSuccess, msg);
 
   if (files_.size() == capacity_) {
     auto& e = lruList_.front();