summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/lib/cgptlib/cgptlib_internal.c2
-rw-r--r--tests/cgptlib_test.c24
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;
}