Alexandre Julliard : ntdll: Don' t crash on empty table in RtlAddFunctionTable().
Alexandre Julliard
julliard at winehq.org
Thu Jan 24 14:42:52 CST 2019
Module: wine
Branch: master
Commit: 7f4e5b1ed8c6f53e1f936eff745d2071e4aa6f9d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=7f4e5b1ed8c6f53e1f936eff745d2071e4aa6f9d
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Jan 24 16:45:54 2019 +0100
ntdll: Don't crash on empty table in RtlAddFunctionTable().
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/signal_x86_64.c | 2 +-
dlls/ntdll/tests/exception.c | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c
index cbb3dd7..c3cc3d8 100644
--- a/dlls/ntdll/signal_x86_64.c
+++ b/dlls/ntdll/signal_x86_64.c
@@ -3458,7 +3458,7 @@ BOOLEAN CDECL RtlAddFunctionTable( RUNTIME_FUNCTION *table, DWORD count, DWORD64
return FALSE;
entry->base = addr;
- entry->end = addr + table[count - 1].EndAddress;
+ entry->end = addr + (count ? table[count - 1].EndAddress : 0);
entry->table = table;
entry->count = count;
entry->max_count = 0;
diff --git a/dlls/ntdll/tests/exception.c b/dlls/ntdll/tests/exception.c
index dee8a9f..f7b8f21 100644
--- a/dlls/ntdll/tests/exception.c
+++ b/dlls/ntdll/tests/exception.c
@@ -2103,6 +2103,14 @@ static void test_dynamic_unwind(void)
ok( !pRtlDeleteFunctionTable( runtime_func ),
"RtlDeleteFunctionTable returned success for nonexistent table runtime_func = %p\n", runtime_func );
+ /* Empty table */
+ ok( pRtlAddFunctionTable( runtime_func, 0, (ULONG_PTR)code_mem ),
+ "RtlAddFunctionTable failed for empty table\n" );
+ ok( pRtlDeleteFunctionTable( runtime_func ),
+ "RtlDeleteFunctionTable failed for empty table\n" );
+ ok( !pRtlDeleteFunctionTable( runtime_func ),
+ "RtlDeleteFunctionTable succeeded twice for empty table\n" );
+
/* Test RtlInstallFunctionTableCallback with both low bits unset */
table = (ULONG_PTR)code_mem;
ok( !pRtlInstallFunctionTableCallback( table, (ULONG_PTR)code_mem, code_offset + 32, &dynamic_unwind_callback, (PVOID*)&count, NULL ),
More information about the wine-cvs
mailing list