Skip to content

Commit 0c3274b

Browse files
EPouechjulliard
authored andcommitted
dbghelp/msc: Better detect whether IPI stream is present.
Old version of PDB files can have a stream wine-mirror#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@gmail.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
1 parent 92fabc6 commit 0c3274b

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

dlls/dbghelp/msc.c

+4-2
Original file line numberDiff line numberDiff line change
@@ -3047,6 +3047,7 @@ static BOOL pdb_init_type_parse(const struct msc_debug_info* msc_dbg,
30473047
break;
30483048
default:
30493049
ERR("-Unknown type info version %d\n", types.version);
3050+
return FALSE;
30503051
}
30513052

30523053
ctp->module = msc_dbg->module;
@@ -3324,6 +3325,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
33243325
BYTE* file;
33253326
int header_size = 0;
33263327
PDB_STREAM_INDEXES* psi;
3328+
BOOL ipi_ok;
33273329

33283330
pdb_convert_symbols_header(&symbols, &header_size, symbols_image);
33293331
switch (symbols.version)
@@ -3363,7 +3365,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
33633365
pdb_process_types(msc_dbg, pdb_file);
33643366

33653367
ipi_image = pdb_read_file(pdb_file, 4);
3366-
pdb_init_type_parse(msc_dbg, &ipi_ctp, ipi_image);
3368+
ipi_ok = pdb_init_type_parse(msc_dbg, &ipi_ctp, ipi_image);
33673369

33683370
/* Read global symbol table */
33693371
globalimage = pdb_read_file(pdb_file, symbols.gsym_file);
@@ -3387,7 +3389,7 @@ static BOOL pdb_process_internal(const struct process* pcs,
33873389
modimage = pdb_read_file(pdb_file, sfile.file);
33883390
if (modimage)
33893391
{
3390-
struct cv_module_snarf cvmod = {&ipi_ctp, (const void*)(modimage + sfile.symbol_size), sfile.lineno2_size,
3392+
struct cv_module_snarf cvmod = {ipi_ok ? &ipi_ctp : NULL, (const void*)(modimage + sfile.symbol_size), sfile.lineno2_size,
33913393
files_image + 12, files_size};
33923394
codeview_snarf(msc_dbg, modimage, sizeof(DWORD), sfile.symbol_size,
33933395
&cvmod, TRUE);

0 commit comments

Comments
 (0)