Eric Pouech : dbghelp/msc: Better detect whether IPI stream is present.

Alexandre Julliard julliard at winehq.org
Wed Nov 10 15:34:48 CST 2021


Module: wine
Branch: master
Commit: 0c3274b526eea28f8686ba9c47ae89e3ad4431ac
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=0c3274b526eea28f8686ba9c47ae89e3ad4431ac

Author: Eric Pouech <eric.pouech at 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 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at 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);




More information about the wine-cvs mailing list