gracefully handle hashtab_search failures
Otherwise we crash on a null pointer exception. Test: Reference a non-existent type in test code and make sure the test doesn't crash. Change-Id: I5839d2740d51c0df7a8909a3f8430850ae1b2675
This commit is contained in:
parent
1b2ea497aa
commit
bb880a2826
1 changed files with 6 additions and 1 deletions
|
@ -116,11 +116,16 @@ void *init_type_iter(void *policydbp, const char *type, bool is_attr)
|
||||||
} else {
|
} else {
|
||||||
out->alltypes = TYPE_ITER_LOOKUP;
|
out->alltypes = TYPE_ITER_LOOKUP;
|
||||||
out->d = static_cast<type_datum *>(hashtab_search(db->p_types.table, type));
|
out->d = static_cast<type_datum *>(hashtab_search(db->p_types.table, type));
|
||||||
|
if (out->d == nullptr) {
|
||||||
|
std::cerr << "\"" << type << "\" does not exist" << std::endl;
|
||||||
|
free(out);
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
if (is_attr && out->d->flavor != TYPE_ATTRIB) {
|
if (is_attr && out->d->flavor != TYPE_ATTRIB) {
|
||||||
std::cerr << "\"" << type << "\" MUST be an attribute in the policy" << std::endl;
|
std::cerr << "\"" << type << "\" MUST be an attribute in the policy" << std::endl;
|
||||||
free(out);
|
free(out);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
} else if (!is_attr && out->d->flavor !=TYPE_TYPE) {
|
} else if (!is_attr && out->d->flavor != TYPE_TYPE) {
|
||||||
std::cerr << "\"" << type << "\" MUST be a type in the policy" << std::endl;
|
std::cerr << "\"" << type << "\" MUST be a type in the policy" << std::endl;
|
||||||
free(out);
|
free(out);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
Loading…
Reference in a new issue