diff options
| -rw-r--r-- | llvm/lib/DebugInfo/MSF/MSFCommon.cpp | 9 | ||||
| -rw-r--r-- | llvm/unittests/DebugInfo/PDB/MSFBuilderTest.cpp | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/llvm/lib/DebugInfo/MSF/MSFCommon.cpp b/llvm/lib/DebugInfo/MSF/MSFCommon.cpp index d79ccafe898..fdab7884646 100644 --- a/llvm/lib/DebugInfo/MSF/MSFCommon.cpp +++ b/llvm/lib/DebugInfo/MSF/MSFCommon.cpp @@ -44,5 +44,14 @@ Error llvm::msf::validateSuperBlock(const SuperBlock &SB) { return make_error<MSFError>(msf_error_code::invalid_format, "Block 0 is reserved"); + if (SB.BlockMapAddr >= SB.NumBlocks) + return make_error<MSFError>(msf_error_code::invalid_format, + "Block map address is invalid."); + + if (SB.FreeBlockMapBlock != 1 && SB.FreeBlockMapBlock != 2) + return make_error<MSFError>( + msf_error_code::invalid_format, + "The free block map isn't at block 1 or block 2."); + return Error::success(); } diff --git a/llvm/unittests/DebugInfo/PDB/MSFBuilderTest.cpp b/llvm/unittests/DebugInfo/PDB/MSFBuilderTest.cpp index bc1ec522fb4..5f2f0c271e9 100644 --- a/llvm/unittests/DebugInfo/PDB/MSFBuilderTest.cpp +++ b/llvm/unittests/DebugInfo/PDB/MSFBuilderTest.cpp @@ -30,6 +30,7 @@ protected: ::memset(&SB, 0, sizeof(SB)); ::memcpy(SB.MagicBytes, msf::Magic, sizeof(msf::Magic)); + SB.FreeBlockMapBlock = 1; SB.BlockMapAddr = 1; SB.BlockSize = 4096; SB.NumDirectoryBytes = 0; |

