diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-25 17:05:55 -0400 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-25 17:05:55 -0400 |
commit | 241bcd01833274da114b709d2f2b13d4429c7fd9 (patch) | |
tree | 3d89ff4bef505134ab5c51a9f3319c03295ced50 /c_src/cmd_list_journal.c | |
parent | fa0a54c45c44e8ff3885ccc72a43fd2d96e01b14 (diff) |
Fix infinite loop in cmd_list_journal
list_journal can print the entire contents of the journal, and non-dirty
entries don't get validated, so we have to account for that.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'c_src/cmd_list_journal.c')
-rw-r--r-- | c_src/cmd_list_journal.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/c_src/cmd_list_journal.c b/c_src/cmd_list_journal.c index fe9e3bbd..7b0008de 100644 --- a/c_src/cmd_list_journal.c +++ b/c_src/cmd_list_journal.c @@ -90,9 +90,13 @@ static bool entry_matches_transaction_filter(struct jset_entry *entry, if (!entry->level && (entry->type == BCH_JSET_ENTRY_btree_keys || entry->type == BCH_JSET_ENTRY_overwrite)) - jset_entry_for_each_key(entry, k) + jset_entry_for_each_key(entry, k) { + if (!k->k.u64s) + break; + if (bkey_matches_filter(filter, entry, k)) return true; + } return false; } @@ -105,10 +109,13 @@ static bool should_print_transaction(struct jset_entry *entry, struct jset_entry bool have_log_messages = false; bool have_non_log_messages = false; - darray_for_each(msg_filter, i) - if (!strncmp(*i, l->d, b)) - return false; - + if (msg_filter.nr) { + darray_for_each(msg_filter, i) + if (!strncmp(*i, l->d, b)) + goto found; + return false; + } +found: if (!key_filter.nr) return true; @@ -140,10 +147,14 @@ static bool should_print_entry(struct jset_entry *entry, d_btree_id filter) entry->type != BCH_JSET_ENTRY_overwrite) return true; - jset_entry_for_each_key(entry, k) + jset_entry_for_each_key(entry, k) { + if (!k->k.u64s) + break; + darray_for_each(filter, id) if (entry->btree_id == *id) return true; + } return false; } |