Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/dbghelp/module.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index c6c9d5eb19..765a7235a1 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -934,7 +934,7 @@ BOOL WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr, miw64.SizeOfStruct = sizeof(miw64); if (!SymGetModuleInfoW64(hProcess, dwAddr, &miw64)) return FALSE;
- mi.SizeOfStruct = miw64.SizeOfStruct; + mi.SizeOfStruct = ModuleInfo->SizeOfStruct; mi.BaseOfImage = miw64.BaseOfImage; mi.ImageSize = miw64.ImageSize; mi.TimeDateStamp = miw64.TimeDateStamp; @@ -968,7 +968,7 @@ BOOL WINAPI SymGetModuleInfoW(HANDLE hProcess, DWORD dwAddr, miw64.SizeOfStruct = sizeof(miw64); if (!SymGetModuleInfoW64(hProcess, dwAddr, &miw64)) return FALSE;
- miw.SizeOfStruct = miw64.SizeOfStruct; + miw.SizeOfStruct = ModuleInfo->SizeOfStruct; miw.BaseOfImage = miw64.BaseOfImage; miw.ImageSize = miw64.ImageSize; miw.TimeDateStamp = miw64.TimeDateStamp; @@ -1003,7 +1003,7 @@ BOOL WINAPI SymGetModuleInfo64(HANDLE hProcess, DWORD64 dwAddr, miw64.SizeOfStruct = sizeof(miw64); if (!SymGetModuleInfoW64(hProcess, dwAddr, &miw64)) return FALSE;
- mi64.SizeOfStruct = miw64.SizeOfStruct; + mi64.SizeOfStruct = ModuleInfo->SizeOfStruct; mi64.BaseOfImage = miw64.BaseOfImage; mi64.ImageSize = miw64.ImageSize; mi64.TimeDateStamp = miw64.TimeDateStamp;
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com ---
This problem is visible with any winedbg-generated backtraces that list modules with names exceeding 32 chars, usual offenders are api-ms-* dlls.
dlls/dbghelp/module.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-)
diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index 765a7235a1..9256a8f932 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -919,6 +919,12 @@ BOOL WINAPI EnumerateLoadedModulesW64(HANDLE hProcess, return sz != 0 && i == sz; }
+static void dbghelp_str_WtoA(const WCHAR *src, char *dst, int dst_len) +{ + WideCharToMultiByte(CP_ACP, 0, src, -1, dst, dst_len - 1, NULL, NULL); + dst[dst_len - 1] = 0; +} + /****************************************************************** * SymGetModuleInfo (DBGHELP.@) * @@ -941,12 +947,9 @@ BOOL WINAPI SymGetModuleInfo(HANDLE hProcess, DWORD dwAddr, mi.CheckSum = miw64.CheckSum; mi.NumSyms = miw64.NumSyms; mi.SymType = miw64.SymType; - WideCharToMultiByte(CP_ACP, 0, miw64.ModuleName, -1, - mi.ModuleName, sizeof(mi.ModuleName), NULL, NULL); - WideCharToMultiByte(CP_ACP, 0, miw64.ImageName, -1, - mi.ImageName, sizeof(mi.ImageName), NULL, NULL); - WideCharToMultiByte(CP_ACP, 0, miw64.LoadedImageName, -1, - mi.LoadedImageName, sizeof(mi.LoadedImageName), NULL, NULL); + dbghelp_str_WtoA(miw64.ModuleName, mi.ModuleName, sizeof(mi.ModuleName)); + dbghelp_str_WtoA(miw64.ImageName, mi.ImageName, sizeof(mi.ImageName)); + dbghelp_str_WtoA(miw64.LoadedImageName, mi.LoadedImageName, sizeof(mi.LoadedImageName));
memcpy(ModuleInfo, &mi, ModuleInfo->SizeOfStruct);
@@ -1010,18 +1013,13 @@ BOOL WINAPI SymGetModuleInfo64(HANDLE hProcess, DWORD64 dwAddr, mi64.CheckSum = miw64.CheckSum; mi64.NumSyms = miw64.NumSyms; mi64.SymType = miw64.SymType; - WideCharToMultiByte(CP_ACP, 0, miw64.ModuleName, -1, - mi64.ModuleName, sizeof(mi64.ModuleName), NULL, NULL); - WideCharToMultiByte(CP_ACP, 0, miw64.ImageName, -1, - mi64.ImageName, sizeof(mi64.ImageName), NULL, NULL); - WideCharToMultiByte(CP_ACP, 0, miw64.LoadedImageName, -1, - mi64.LoadedImageName, sizeof(mi64.LoadedImageName), NULL, NULL); - WideCharToMultiByte(CP_ACP, 0, miw64.LoadedPdbName, -1, - mi64.LoadedPdbName, sizeof(mi64.LoadedPdbName), NULL, NULL); + dbghelp_str_WtoA(miw64.ModuleName, mi64.ModuleName, sizeof(mi64.ModuleName)); + dbghelp_str_WtoA(miw64.ImageName, mi64.ImageName, sizeof(mi64.ImageName)); + dbghelp_str_WtoA(miw64.LoadedImageName, mi64.LoadedImageName, sizeof(mi64.LoadedImageName)); + dbghelp_str_WtoA(miw64.LoadedPdbName, mi64.LoadedPdbName, sizeof(mi64.LoadedPdbName));
mi64.CVSig = miw64.CVSig; - WideCharToMultiByte(CP_ACP, 0, miw64.CVData, -1, - mi64.CVData, sizeof(mi64.CVData), NULL, NULL); + dbghelp_str_WtoA(miw64.CVData, mi64.CVData, sizeof(mi64.CVData)); mi64.PdbSig = miw64.PdbSig; mi64.PdbSig70 = miw64.PdbSig70; mi64.PdbAge = miw64.PdbAge;
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com ---
Previous patch takes care of A-structs, this one fixes actual wide strings.
dlls/dbghelp/module.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/dlls/dbghelp/module.c b/dlls/dbghelp/module.c index 9256a8f932..6c7f2dcb6d 100644 --- a/dlls/dbghelp/module.c +++ b/dlls/dbghelp/module.c @@ -100,7 +100,8 @@ static void module_fill_module(const WCHAR* in, WCHAR* out, size_t size)
void module_set_module(struct module* module, const WCHAR* name) { - module_fill_module(name, module->module.ModuleName, sizeof(module->module.ModuleName)); + module_fill_module(name, module->module.ModuleName, + sizeof(module->module.ModuleName) / sizeof(module->module.ModuleName[0])); }
const WCHAR *get_wine_loader_name(void) @@ -910,7 +911,7 @@ BOOL WINAPI EnumerateLoadedModulesW64(HANDLE hProcess, if (!GetModuleInformation(hProcess, hMods[i], &mi, sizeof(mi)) || !GetModuleBaseNameW(hProcess, hMods[i], baseW, sizeof(baseW) / sizeof(WCHAR))) continue; - module_fill_module(baseW, modW, sizeof(modW) / sizeof(CHAR)); + module_fill_module(baseW, modW, sizeof(modW) / sizeof(modW[0])); EnumLoadedModulesCallback(modW, (DWORD_PTR)mi.lpBaseOfDll, mi.SizeOfImage, UserContext); }