From cd3ef0bf7d64dfa15c80abe8aac5458cb157dbb4 Mon Sep 17 00:00:00 2001 From: Michael Maltsev <4129781+m417z@users.noreply.github.com> Date: Sat, 5 Apr 2025 16:50:07 +0300 Subject: [PATCH] Graceful handling for invalid target function --- Source/SlimDetours/Disassembler.c | 4 ++-- Source/SlimDetours/Transaction.c | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Source/SlimDetours/Disassembler.c b/Source/SlimDetours/Disassembler.c index b378544e..74d8e626 100644 --- a/Source/SlimDetours/Disassembler.c +++ b/Source/SlimDetours/Disassembler.c @@ -1058,9 +1058,9 @@ Invalid( UNREFERENCED_PARAMETER(pDisasm); UNREFERENCED_PARAMETER(pEntry); UNREFERENCED_PARAMETER(pbDst); + UNREFERENCED_PARAMETER(pbSrc); - ASSERT(!"Invalid Instruction"); - return pbSrc + 1; + return NULL; } static diff --git a/Source/SlimDetours/Transaction.c b/Source/SlimDetours/Transaction.c index 53b7705b..51845de4 100644 --- a/Source/SlimDetours/Transaction.c +++ b/Source/SlimDetours/Transaction.c @@ -360,6 +360,13 @@ SlimDetoursAttach( DETOUR_TRACE(" SlimDetoursCopyInstruction(%p,%p)\n", pbTrampoline, pbSrc); pbSrc = (PBYTE)SlimDetoursCopyInstruction(pbTrampoline, pbSrc, NULL, &lExtra); + if (pbSrc == NULL) + { + Status = STATUS_ILLEGAL_INSTRUCTION; + DETOUR_BREAK(); + goto fail; + } + DETOUR_TRACE(" SlimDetoursCopyInstruction() = %p (%d bytes)\n", pbSrc, (int)(pbSrc - pbOp)); pbTrampoline += (pbSrc - pbOp) + lExtra; cbTarget = PtrOffset(pbTarget, pbSrc);