Eric Pouech : dbghelp/msc: Better detect whether IPI stream is present.
Module: wine Branch: master Commit: 0c3274b526eea28f8686ba9c47ae89e3ad4431ac URL: https://source.winehq.org/git/wine.git/?a=commit;h=0c3274b526eea28f8686ba9c4... Author: Eric Pouech <eric.pouech(a)gmail.com> Date: Wed Nov 10 16:42:14 2021 +0100 dbghelp/msc: Better detect whether IPI stream is present. Old version of PDB files can have a stream #4 which is not an IPI stream Available documentation isn't 100% clear about when IPI has been introduced. So decide that IPI is present when header of stream looks like a type stream header. Signed-off-by: Eric Pouech <eric.pouech(a)gmail.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/dbghelp/msc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/dlls/dbghelp/msc.c b/dlls/dbghelp/msc.c index c481c762b1d..4e44655deb5 100644 --- a/dlls/dbghelp/msc.c +++ b/dlls/dbghelp/msc.c @@ -3047,6 +3047,7 @@ static BOOL pdb_init_type_parse(const struct msc_debug_info* msc_dbg, break; default: ERR("-Unknown type info version %d\n", types.version); + return FALSE; } ctp->module = msc_dbg->module; @@ -3324,6 +3325,7 @@ static BOOL pdb_process_internal(const struct process* pcs, BYTE* file; int header_size = 0; PDB_STREAM_INDEXES* psi; + BOOL ipi_ok; pdb_convert_symbols_header(&symbols, &header_size, symbols_image); switch (symbols.version) @@ -3363,7 +3365,7 @@ static BOOL pdb_process_internal(const struct process* pcs, pdb_process_types(msc_dbg, pdb_file); ipi_image = pdb_read_file(pdb_file, 4); - pdb_init_type_parse(msc_dbg, &ipi_ctp, ipi_image); + ipi_ok = pdb_init_type_parse(msc_dbg, &ipi_ctp, ipi_image); /* Read global symbol table */ globalimage = pdb_read_file(pdb_file, symbols.gsym_file); @@ -3387,7 +3389,7 @@ static BOOL pdb_process_internal(const struct process* pcs, modimage = pdb_read_file(pdb_file, sfile.file); if (modimage) { - struct cv_module_snarf cvmod = {&ipi_ctp, (const void*)(modimage + sfile.symbol_size), sfile.lineno2_size, + struct cv_module_snarf cvmod = {ipi_ok ? &ipi_ctp : NULL, (const void*)(modimage + sfile.symbol_size), sfile.lineno2_size, files_image + 12, files_size}; codeview_snarf(msc_dbg, modimage, sizeof(DWORD), sfile.symbol_size, &cvmod, TRUE);
participants (1)
-
Alexandre Julliard