From 9bca03bf81c4f3e68242325b779438afa14024f4 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sun, 18 Dec 2016 00:41:10 +0000 Subject: [PATCH] [PDB] Validate superblock addresses - Validate the address of the block map. - Validate the address of the free block map. llvm-svn: 290053 --- llvm/lib/DebugInfo/MSF/MSFCommon.cpp | 9 +++++++++ llvm/unittests/DebugInfo/PDB/MSFBuilderTest.cpp | 1 + 2 files changed, 10 insertions(+) diff --git a/llvm/lib/DebugInfo/MSF/MSFCommon.cpp b/llvm/lib/DebugInfo/MSF/MSFCommon.cpp index d79ccaf..fdab788 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(msf_error_code::invalid_format, "Block 0 is reserved"); + if (SB.BlockMapAddr >= SB.NumBlocks) + return make_error(msf_error_code::invalid_format, + "Block map address is invalid."); + + if (SB.FreeBlockMapBlock != 1 && SB.FreeBlockMapBlock != 2) + return make_error( + 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 bc1ec52..5f2f0c2 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; -- 2.7.4