[PATCH] D28502: [compiler-rt] [Interception] Properly check for export table's size before referring to its elements.

Marcos Pividori via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Jan 29 23:45:17 PST 2017


mpividori updated this revision to Diff 86245.
mpividori added a comment.

@kubamracek @zturner
I updated the diff to use a gtest.


https://reviews.llvm.org/D28502

Files:
  lib/interception/interception_win.cc
  lib/interception/tests/interception_win_test.cc


Index: lib/interception/tests/interception_win_test.cc
===================================================================
--- lib/interception/tests/interception_win_test.cc
+++ lib/interception/tests/interception_win_test.cc
@@ -613,6 +613,13 @@
   EXPECT_FALSE(TestFunctionPatching(kUnpatchableCode6, override, prefix));
 }
 
+TEST(Interception, EmptyExportTable) {
+  // We try to get a pointer to a function from an executable that doesn't
+  // export any symbol (empty export table).
+  uptr FunPtr = InternalGetProcAddress((void *)GetModuleHandleA(0), "example");
+  EXPECT_EQ(0U, FunPtr);
+}
+
 }  // namespace __interception
 
 #endif  // SANITIZER_WINDOWS
Index: lib/interception/interception_win.cc
===================================================================
--- lib/interception/interception_win.cc
+++ lib/interception/interception_win.cc
@@ -878,6 +878,8 @@
 
   IMAGE_DATA_DIRECTORY *export_directory =
       &headers->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT];
+  if (export_directory->Size == 0)
+      return 0;
   RVAPtr<IMAGE_EXPORT_DIRECTORY> exports(module,
                                          export_directory->VirtualAddress);
   RVAPtr<DWORD> functions(module, exports->AddressOfFunctions);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D28502.86245.patch
Type: text/x-patch
Size: 1249 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170130/7720215e/attachment.bin>


More information about the llvm-commits mailing list