From 5d515de41617781be12ae71b60bccd7982d34dbd Mon Sep 17 00:00:00 2001 From: Juan Hoyos <19413848+hoyosjs@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:34:21 -0700 Subject: [PATCH] Update resource iteration (#4981) This changes resource iteration in `GetNextLevelResourceEntryRVA` to explicitly cast a potential overflow. It's safe since it will just not iterate any resources. --- src/shared/debug/dbgutil/dbgutil.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/shared/debug/dbgutil/dbgutil.cpp b/src/shared/debug/dbgutil/dbgutil.cpp index 91235f40e7..e9b6f6300a 100644 --- a/src/shared/debug/dbgutil/dbgutil.cpp +++ b/src/shared/debug/dbgutil/dbgutil.cpp @@ -271,18 +271,14 @@ HRESULT GetNextLevelResourceEntryRVA(ICorDebugDataTarget* pDataTarget, IMAGE_RESOURCE_DIRECTORY resourceDirectory; hr = ReadFromDataTarget(pDataTarget, moduleBaseAddress + resourceDirectoryRVA, (BYTE*)&resourceDirectory, sizeof(resourceDirectory)); - - - // The ith resource directory entry is at offset 16 + 8i from the beginning of the resource - // directory table - WORD numNameEntries; - WORD numIDEntries; if (SUCCEEDED(hr)) { - numNameEntries = resourceDirectory.NumberOfNamedEntries; - numIDEntries = resourceDirectory.NumberOfIdEntries; + // The ith resource directory entry is at offset 16 + 8i from the beginning of the resource + // directory table. First come named entries, followed by ID entries. We skip the former. + WORD beginIdEntries = resourceDirectory.NumberOfNamedEntries; + WORD endIdEntries = (WORD)(beginIdEntries + resourceDirectory.NumberOfIdEntries); - for (WORD i = numNameEntries; i < numNameEntries + numIDEntries; i++) + for (WORD i = beginIdEntries; i < endIdEntries; i++) { IMAGE_RESOURCE_DIRECTORY_ENTRY entry; hr = ReadFromDataTarget(pDataTarget, moduleBaseAddress + resourceDirectoryRVA + sizeof(resourceDirectory) + sizeof(entry)*i,