Fix error-case leaks in lib/base/db.c
This commit is contained in:
@@ -1072,17 +1072,25 @@ db_replay_log(heim_db_t db, heim_error_t *error)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
ret = read_json(heim_string_get_utf8(journal_fname), &journal, error);
|
ret = read_json(heim_string_get_utf8(journal_fname), &journal, error);
|
||||||
if (ret == ENOENT)
|
if (ret == ENOENT) {
|
||||||
|
heim_release(journal_fname);
|
||||||
return 0;
|
return 0;
|
||||||
if (ret == 0 && journal == NULL)
|
}
|
||||||
|
if (ret == 0 && journal == NULL) {
|
||||||
|
heim_release(journal_fname);
|
||||||
return 0;
|
return 0;
|
||||||
if (ret != 0)
|
}
|
||||||
|
if (ret != 0) {
|
||||||
|
heim_release(journal_fname);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
if (heim_get_tid(journal) != HEIM_TID_ARRAY)
|
if (heim_get_tid(journal) != HEIM_TID_ARRAY) {
|
||||||
|
heim_release(journal_fname);
|
||||||
return HEIM_ERROR(error, EINVAL,
|
return HEIM_ERROR(error, EINVAL,
|
||||||
(ret, N_("Invalid journal contents; delete journal",
|
(ret, N_("Invalid journal contents; delete journal",
|
||||||
"")));
|
"")));
|
||||||
|
}
|
||||||
|
|
||||||
len = heim_array_get_length(journal);
|
len = heim_array_get_length(journal);
|
||||||
|
|
||||||
@@ -1091,11 +1099,14 @@ db_replay_log(heim_db_t db, heim_error_t *error)
|
|||||||
if (len > 1)
|
if (len > 1)
|
||||||
db->del_keys = heim_array_get_value(journal, 1);
|
db->del_keys = heim_array_get_value(journal, 1);
|
||||||
ret = db_do_log_actions(db, error);
|
ret = db_do_log_actions(db, error);
|
||||||
if (ret)
|
if (ret) {
|
||||||
|
heim_release(journal_fname);
|
||||||
return ret;
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* Truncate replay log and we're done */
|
/* Truncate replay log and we're done */
|
||||||
ret = open_file(heim_string_get_utf8(journal_fname), 1, 0, NULL, error);
|
ret = open_file(heim_string_get_utf8(journal_fname), 1, 0, NULL, error);
|
||||||
|
heim_release(journal_fname);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
heim_release(db->set_keys);
|
heim_release(db->set_keys);
|
||||||
|
Reference in New Issue
Block a user