mirror of
https://github.com/tstack/lnav.git
synced 2024-10-26 21:19:54 +03:00
[text] add some missing bound check on the filtered line index for the TEXT view
Fixes #1056
This commit is contained in:
parent
eb0bd4ac9a
commit
bf3fe7fc2c
@ -86,6 +86,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch)
|
||||
auto* tss = top_view->get_sub_source();
|
||||
|
||||
tss->toggle_apply_filters();
|
||||
top_view->reload_data();
|
||||
break;
|
||||
}
|
||||
case ' ': {
|
||||
@ -102,6 +103,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch)
|
||||
fs.set_filter_enabled(tf, !tf->is_enabled());
|
||||
tss->text_filters_changed();
|
||||
lv.reload_data();
|
||||
top_view->reload_data();
|
||||
return true;
|
||||
}
|
||||
case 't': {
|
||||
@ -123,6 +125,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch)
|
||||
|
||||
tss->text_filters_changed();
|
||||
lv.reload_data();
|
||||
top_view->reload_data();
|
||||
return true;
|
||||
}
|
||||
case 'D': {
|
||||
@ -139,6 +142,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch)
|
||||
fs.delete_filter(tf->get_id());
|
||||
lv.reload_data();
|
||||
tss->text_filters_changed();
|
||||
top_view->reload_data();
|
||||
return true;
|
||||
}
|
||||
case 'i': {
|
||||
@ -576,6 +580,7 @@ filter_sub_source::rl_perform(readline_curses* rc)
|
||||
lnav_data.ld_filter_help_status_source.fss_prompt.clear();
|
||||
this->fss_editing = false;
|
||||
this->fss_editor->set_visible(false);
|
||||
top_view->reload_data();
|
||||
this->tss_view->reload_data();
|
||||
}
|
||||
|
||||
|
@ -72,10 +72,14 @@ textfile_sub_source::text_value_for_line(textview_curses& tc,
|
||||
if (rend_iter == this->tss_rendered_files.end()) {
|
||||
auto* lfo = dynamic_cast<line_filter_observer*>(
|
||||
lf->get_logline_observer());
|
||||
auto read_result = lf->read_line(
|
||||
lf->begin() + lfo->lfo_filter_state.tfs_index[line]);
|
||||
if (read_result.isOk()) {
|
||||
value_out = to_string(read_result.unwrap());
|
||||
if (line < 0 || line >= lfo->lfo_filter_state.tfs_index.size()) {
|
||||
value_out.clear();
|
||||
} else {
|
||||
auto read_result = lf->read_line(
|
||||
lf->begin() + lfo->lfo_filter_state.tfs_index[line]);
|
||||
if (read_result.isOk()) {
|
||||
value_out = to_string(read_result.unwrap());
|
||||
}
|
||||
}
|
||||
} else {
|
||||
rend_iter->second.rf_text_source->text_value_for_line(
|
||||
@ -122,8 +126,11 @@ textfile_sub_source::text_size_for_line(textview_curses& tc,
|
||||
if (rend_iter == this->tss_rendered_files.end()) {
|
||||
auto* lfo = dynamic_cast<line_filter_observer*>(
|
||||
lf->get_logline_observer());
|
||||
retval = lf->line_length(lf->begin()
|
||||
+ lfo->lfo_filter_state.tfs_index[line]);
|
||||
if (line < 0 || line >= lfo->lfo_filter_state.tfs_index.size()) {
|
||||
} else {
|
||||
retval = lf->line_length(
|
||||
lf->begin() + lfo->lfo_filter_state.tfs_index[line]);
|
||||
}
|
||||
} else {
|
||||
retval = rend_iter->second.rf_text_source->text_size_for_line(
|
||||
tc, line, flags);
|
||||
@ -325,6 +332,9 @@ textfile_sub_source::text_crumbs_for_line(
|
||||
if (meta_iter != this->tss_doc_metadata.end()) {
|
||||
auto* lfo
|
||||
= dynamic_cast<line_filter_observer*>(lf->get_logline_observer());
|
||||
if (line < 0 || line >= lfo->lfo_filter_state.tfs_index.size()) {
|
||||
return;
|
||||
}
|
||||
auto ll_iter = lf->begin() + lfo->lfo_filter_state.tfs_index[line];
|
||||
auto ll_next_iter = ll_iter + 1;
|
||||
auto end_offset = (ll_next_iter == lf->end())
|
||||
@ -766,6 +776,9 @@ textfile_sub_source::anchor_for_row(vis_line_t vl)
|
||||
}
|
||||
|
||||
auto* lfo = dynamic_cast<line_filter_observer*>(lf->get_logline_observer());
|
||||
if (vl >= lfo->lfo_filter_state.tfs_index.size()) {
|
||||
return retval;
|
||||
}
|
||||
auto ll_iter = lf->begin() + lfo->lfo_filter_state.tfs_index[vl];
|
||||
auto ll_next_iter = ll_iter + 1;
|
||||
auto end_offset = (ll_next_iter == lf->end())
|
||||
|
Loading…
Reference in New Issue
Block a user