31std::optional<SDB_FOOTER_ERROR>
CheckSdbFooter(
const std::vector<uint8_t>& aData,
size_t aFooterStart,
32 const char* aGuid,
size_t aGuidLen )
35 if( aData.size() < 4 || aGuidLen > aData.size() - 4
36 || aFooterStart > aData.size() - aGuidLen - 4 )
38 return SDB_FOOTER_ERROR{ aData.size(),
"PADS binary file too small for the footer" };
41 if( std::memcmp( &aData[aFooterStart], aGuid, aGuidLen ) != 0 )
44 size_t backPointerOffset = aFooterStart + aGuidLen;
45 uint32_t containerItemsOffset =
getU32LE( aData, backPointerOffset );
47 if( containerItemsOffset > aFooterStart || aFooterStart - containerItemsOffset < 4 )
48 return SDB_FOOTER_ERROR{ backPointerOffset,
"Invalid PADS binary container-item back-pointer" };