[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