blob: f8da402752cb8ac9c01bad6e8a1f4c1dc9ff1257 [file] [log] [blame]
/* Force elision of assert() */
#ifndef NDEBUG
#define NDEBUG
#endif
#include <assert.h>
#include <stddef.h>
#include <stdint.h>
#include <stdlib.h>
/* NOLINTNEXTLINE(bugprone-suspicious-include) */
#include "bios_table.c"
/* Satisfy the symbol needs of bios_table.c */
uint32_t crc32(const void* data __attribute__((unused)),
size_t size __attribute__((unused)))
{
return 0;
}
/* This is the non-death version of TEST(Iterator, DeathTest) */
int main(void)
{
struct pldm_bios_attr_table_entry entries[2] = {0};
struct pldm_bios_table_iter* iter;
int result;
static_assert(2 * sizeof(entries[0]) == sizeof(entries), "");
entries[0].attr_type = PLDM_BIOS_PASSWORD;
entries[1].attr_type = PLDM_BIOS_STRING_READ_ONLY;
iter = pldm_bios_table_iter_create(entries, sizeof(entries),
PLDM_BIOS_ATTR_TABLE);
/*
* We expect the test configuration to claim the iterator has reached the
* end beause the there's no entry length descriptor for the
* PLDM_BIOS_PASSWORD entry type. By the attr_able_entry_length()
* implementation this would normally trigger an assert() to uphold that the
* necessary pointers are not NULL. However, we've defined NDEBUG above and
* so the assert() is elided. That should force us down the path of the
* early-exit, which should in-turn yield a `true` result from
* pldm_bios_table_iter_is_end() to prevent further attempts to access
* invalid objects.
*/
result = pldm_bios_table_iter_is_end(iter) ? EXIT_SUCCESS : EXIT_FAILURE;
pldm_bios_table_iter_free(iter);
exit(result);
return 0;
}