diff options
-rw-r--r-- | firmware/lib/cgptlib/cgptlib_internal.c | 2 | ||||
-rw-r--r-- | tests/cgptlib_test.c | 24 |
2 files changed, 26 insertions, 0 deletions
diff --git a/firmware/lib/cgptlib/cgptlib_internal.c b/firmware/lib/cgptlib/cgptlib_internal.c index 9fdf9e28..4eea03df 100644 --- a/firmware/lib/cgptlib/cgptlib_internal.c +++ b/firmware/lib/cgptlib/cgptlib_internal.c @@ -131,6 +131,8 @@ int IsKernelEntry(const GptEntry *e) int CheckEntries(GptEntry *entries, GptHeader *h) { + if (!entries) + return GPT_ERROR_INVALID_ENTRIES; GptEntry *entry; uint32_t crc32; uint32_t i; diff --git a/tests/cgptlib_test.c b/tests/cgptlib_test.c index 21334a57..363ecc8a 100644 --- a/tests/cgptlib_test.c +++ b/tests/cgptlib_test.c @@ -1146,6 +1146,30 @@ static int SanityCheckTest(void) EXPECT(MASK_BOTH == gpt->valid_entries); EXPECT((GPT_MODIFIED_HEADER2 | GPT_MODIFIED_ENTRIES2) == gpt->modified); + /* Test unloaded entry array. */ + gpt = GetEmptyGptData(); + BuildTestGptData(gpt); + gpt->primary_entries = NULL; + EXPECT(GPT_SUCCESS == GptSanityCheck(gpt)); + EXPECT(MASK_SECONDARY == gpt->valid_entries); + gpt = GetEmptyGptData(); + BuildTestGptData(gpt); + gpt->secondary_entries = NULL; + EXPECT(GPT_SUCCESS == GptSanityCheck(gpt)); + EXPECT(MASK_PRIMARY == gpt->valid_entries); + + /* Test unloaded header. */ + gpt = GetEmptyGptData(); + BuildTestGptData(gpt); + gpt->primary_header = NULL; + EXPECT(GPT_SUCCESS == GptSanityCheck(gpt)); + EXPECT(MASK_SECONDARY == gpt->valid_headers); + gpt = GetEmptyGptData(); + BuildTestGptData(gpt); + gpt->secondary_header = NULL; + EXPECT(GPT_SUCCESS == GptSanityCheck(gpt)); + EXPECT(MASK_PRIMARY == gpt->valid_headers); + return TEST_OK; } |