Просмотр исходного кода

Merge branch '3943_crash_ctrl_o'

* 3943_crash_ctrl_o:
  Ticket #3943: fix crash when switching from subshell.
Andrew Borodin 6 лет назад
Родитель
Сommit
791148ed66
1 измененных файлов с 8 добавлено и 10 удалено
  1. 8 10
      src/filemanager/panel.c

+ 8 - 10
src/filemanager/panel.c

@@ -1349,6 +1349,14 @@ adjust_top_file (WPanel * panel)
 {
     int items;
 
+    /* Update panel->selected to avoid out of range in panel->dir.list[panel->selected]
+     * when panel is redrawing when directory is reloading, for example in path:
+     * dir_list_reload() -> mc_refresh() -> dialog_change_screen_size() ->
+     * midnight_callback (MSG_RESIZE) -> setup_panels() -> panel_callback(MSG_DRAW) ->
+     * display_mini_info()
+     */
+    panel->selected = CLAMP (panel->selected, 0, panel->dir.len - 1);
+
     items = panel_items (panel);
 
     if (panel->dir.len <= items)
@@ -4498,16 +4506,6 @@ set_panel_formats (WPanel * p)
 void
 select_item (WPanel * panel)
 {
-    /* Although currently all over the code we set the selection and
-       top file to decent values before calling select_item, I could
-       forget it someday, so it's better to do the actual fitting here */
-
-    if (panel->selected < 0)
-        panel->selected = 0;
-
-    if (panel->selected > panel->dir.len - 1)
-        panel->selected = panel->dir.len - 1;
-
     adjust_top_file (panel);
 
     panel->dirty = 1;