mirror of https://github.com/tstack/lnav.git
[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();
|
auto* tss = top_view->get_sub_source();
|
||||||
|
|
||||||
tss->toggle_apply_filters();
|
tss->toggle_apply_filters();
|
||||||
|
top_view->reload_data();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ' ': {
|
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());
|
fs.set_filter_enabled(tf, !tf->is_enabled());
|
||||||
tss->text_filters_changed();
|
tss->text_filters_changed();
|
||||||
lv.reload_data();
|
lv.reload_data();
|
||||||
|
top_view->reload_data();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case 't': {
|
case 't': {
|
||||||
|
@ -123,6 +125,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch)
|
||||||
|
|
||||||
tss->text_filters_changed();
|
tss->text_filters_changed();
|
||||||
lv.reload_data();
|
lv.reload_data();
|
||||||
|
top_view->reload_data();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case 'D': {
|
case 'D': {
|
||||||
|
@ -139,6 +142,7 @@ filter_sub_source::list_input_handle_key(listview_curses& lv, int ch)
|
||||||
fs.delete_filter(tf->get_id());
|
fs.delete_filter(tf->get_id());
|
||||||
lv.reload_data();
|
lv.reload_data();
|
||||||
tss->text_filters_changed();
|
tss->text_filters_changed();
|
||||||
|
top_view->reload_data();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case 'i': {
|
case 'i': {
|
||||||
|
@ -576,6 +580,7 @@ filter_sub_source::rl_perform(readline_curses* rc)
|
||||||
lnav_data.ld_filter_help_status_source.fss_prompt.clear();
|
lnav_data.ld_filter_help_status_source.fss_prompt.clear();
|
||||||
this->fss_editing = false;
|
this->fss_editing = false;
|
||||||
this->fss_editor->set_visible(false);
|
this->fss_editor->set_visible(false);
|
||||||
|
top_view->reload_data();
|
||||||
this->tss_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()) {
|
if (rend_iter == this->tss_rendered_files.end()) {
|
||||||
auto* lfo = dynamic_cast<line_filter_observer*>(
|
auto* lfo = dynamic_cast<line_filter_observer*>(
|
||||||
lf->get_logline_observer());
|
lf->get_logline_observer());
|
||||||
auto read_result = lf->read_line(
|
if (line < 0 || line >= lfo->lfo_filter_state.tfs_index.size()) {
|
||||||
lf->begin() + lfo->lfo_filter_state.tfs_index[line]);
|
value_out.clear();
|
||||||
if (read_result.isOk()) {
|
} else {
|
||||||
value_out = to_string(read_result.unwrap());
|
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 {
|
} else {
|
||||||
rend_iter->second.rf_text_source->text_value_for_line(
|
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()) {
|
if (rend_iter == this->tss_rendered_files.end()) {
|
||||||
auto* lfo = dynamic_cast<line_filter_observer*>(
|
auto* lfo = dynamic_cast<line_filter_observer*>(
|
||||||
lf->get_logline_observer());
|
lf->get_logline_observer());
|
||||||
retval = lf->line_length(lf->begin()
|
if (line < 0 || line >= lfo->lfo_filter_state.tfs_index.size()) {
|
||||||
+ lfo->lfo_filter_state.tfs_index[line]);
|
} else {
|
||||||
|
retval = lf->line_length(
|
||||||
|
lf->begin() + lfo->lfo_filter_state.tfs_index[line]);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
retval = rend_iter->second.rf_text_source->text_size_for_line(
|
retval = rend_iter->second.rf_text_source->text_size_for_line(
|
||||||
tc, line, flags);
|
tc, line, flags);
|
||||||
|
@ -325,6 +332,9 @@ textfile_sub_source::text_crumbs_for_line(
|
||||||
if (meta_iter != this->tss_doc_metadata.end()) {
|
if (meta_iter != this->tss_doc_metadata.end()) {
|
||||||
auto* lfo
|
auto* lfo
|
||||||
= dynamic_cast<line_filter_observer*>(lf->get_logline_observer());
|
= 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_iter = lf->begin() + lfo->lfo_filter_state.tfs_index[line];
|
||||||
auto ll_next_iter = ll_iter + 1;
|
auto ll_next_iter = ll_iter + 1;
|
||||||
auto end_offset = (ll_next_iter == lf->end())
|
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());
|
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_iter = lf->begin() + lfo->lfo_filter_state.tfs_index[vl];
|
||||||
auto ll_next_iter = ll_iter + 1;
|
auto ll_next_iter = ll_iter + 1;
|
||||||
auto end_offset = (ll_next_iter == lf->end())
|
auto end_offset = (ll_next_iter == lf->end())
|
||||||
|
|
Loading…
Reference in New Issue