shared/logs-show: restore infinite loop avoidance for corrupted journals
Fixes a bug introduced in e44f06065b: it was
supposed to be a refactoring, but unfortunately FOREACH_ARRAY is implemented
using a for loop, so when the 'goto finish' was replaced by 'break', it only
broke the inner loop, leading to a infinite loop.
This commit is contained in:
committed by
Yu Watanabe
parent
193134de54
commit
1e8c0c671e
@@ -2056,7 +2056,7 @@ int journal_get_boots(sd_journal *j, BootId **ret_boots, size_t *ret_n_boots) {
|
||||
if (sd_id128_equal(i->id, boot.id))
|
||||
/* The boot id is already stored, something wrong with the journal files.
|
||||
* Exiting as otherwise this problem would cause an infinite loop. */
|
||||
break;
|
||||
goto finish;
|
||||
|
||||
if (!GREEDY_REALLOC(boots, n_boots + 1))
|
||||
return -ENOMEM;
|
||||
@@ -2064,6 +2064,7 @@ int journal_get_boots(sd_journal *j, BootId **ret_boots, size_t *ret_n_boots) {
|
||||
boots[n_boots++] = boot;
|
||||
}
|
||||
|
||||
finish:
|
||||
*ret_boots = TAKE_PTR(boots);
|
||||
*ret_n_boots = n_boots;
|
||||
return n_boots > 0;
|
||||
|
||||
Reference in New Issue
Block a user