getsentry/symbolic

Portable PDB reader row-size broken for MAUI

vaind opened this issue · 3 comments

vaind commented

When the Portable PDB reader iterates rows in the CustomDebugInformation table in the attached .pdb (see MauiApp1.zip), it determines the row size to be 6,

image

however when the same file is opened in ILSpy (actually, you need to open the .dll but it loads the .pdb), the row size, according to their offsets, is 8 (see the diff between offsets).

image

This causes all the rows except for the first one to be read incorrectly CustomDebugInformationIterator::next(), thus not reading the embedded sources even though they're available.

I'm not yet sure what the issue is, any ideas @loewenheim ?

Fixing this should also revert #751

I'll have a look and see if I can find anything.

I'm pretty sure I've found the cause. The problem is that the parsing logic incorrectly assumes that the #Pdb stream is always parsed before the #~ stream, which is not necessarily the case. The order is relevant because the #Pdb stream contains the sizes of tables referenced by, but not contained in, the ppdb file, and without this information tables can't be parsed correctly.

vaind commented

Thanks for the quick fix @loewenheim