Skip to content
This repository was archived by the owner on Apr 23, 2024. It is now read-only.
This repository was archived by the owner on Apr 23, 2024. It is now read-only.

The PDB checksum checking doesn't work for Windows PDBs #134

Description

@mikem8361

There is very subtle bug in the Windows PDB key generator that caused the pdb checksum list never to be passed to the SymbolStoreKey constructor (one of the closing parentheses is in the wrong place causing pdbChecksums to be passed to the string.Format instead of BuildKey).

PDBFileKeyGenerator.cs line 52:

-       return BuildKey(path, string.Format("{0}{1:x}", signature.ToString("N"), age, pdbChecksums));
+       return BuildKey(path, string.Format("{0}{1:x}", signature.ToString("N"), age), clrSpecialFile: false, pdbChecksums);

Once this was fixed, symbol downloads for Windows PDBs (i.e. Microsoft.Extensions.Hosting.Abstractions.ni.pdb) started failing because ChecksumValidator.cs seems to only handle portable PDBs:

        private static uint GetPdbStreamOffset(Stream pdbStream)
        {
            pdbStream.Position = 0;
            using (var reader = new BinaryReader(pdbStream, Encoding.UTF8, leaveOpen: true))
            {
                pdbStream.Seek(4 + // Signature
                               2 + // Version Major
                               2 + // Version Minor
                               4,  // Reserved)
                               SeekOrigin.Begin);

                // skip the version string
                uint versionStringSize = reader.ReadUInt32();     <<------- exception

                pdbStream.Seek(versionStringSize, SeekOrigin.Current);

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions