File invalid_dirty_panel.patch of Package mc.8087

Author: Adam Majer <amajer@suse.de>
Date: Tue Apr 10 11:30:52 CEST 2018
Bug: 1087708
Summary: other_panel can be invalid?

Reproducer is

1. set right panel to Information
2. edit and copy a text file
3. delete the file

valgrind seems inconclusive where the pointer was removed.
Seems it was already reused? Not setting other_panel dirty
bit doesn't seem to have any effect, and in worse case it
may cosmetic only...

==24241== Invalid write of size 4
==24241==    at 0x429365: compute_dir_size_destroy_ui (file.c:2523)
==24241==    by 0x426A5F: panel_operate_init_totals (file.c:1324)
==24241==    by 0x429E20: panel_operate (file.c:2852)
==24241==    by 0x4198EB: copy_cmd (cmd.c:894)
==24241==    by 0x44AF43: midnight_execute_cmd (midnight.c:1142)
==24241==    by 0x44B8B9: midnight_callback (midnight.c:1588)
==24241==    by 0x4168DE: send_message (widget-common.h:162)
==24241==    by 0x416BDF: buttonbar_call (buttonbar.c:154)
==24241==    by 0x416C64: buttonbar_callback (buttonbar.c:173)
==24241==    by 0x41E36E: send_message (widget-common.h:162)
==24241==    by 0x41ED36: dlg_try_hotkey (dialog.c:463)
==24241==    by 0x41EE56: dlg_key_event (dialog.c:508)
==24241==  Address 0x7366ca8 is 24 bytes before a block of size 8,160 free'd
==24241==    at 0x4C2A37C: free (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24241==    by 0x5D31895: __gconv_close (gconv_close.c:41)
==24241==    by 0x5D3110E: iconv_close (iconv_close.c:35)
==24241==    by 0x4859E8: mc_search__recode_str (lib.c:83)
==24241==    by 0x485A67: mc_search__get_one_symbol (lib.c:110)
==24241==    by 0x48B834: mc_search__cond_struct_new_regex_accum_append (regex.c:170)
==24241==    by 0x48BB05: mc_search__cond_struct_new_regex_ci_str (regex.c:241)
==24241==    by 0x48CC5A: mc_search__cond_struct_new_init_regex (regex.c:726)
==24241==    by 0x45C1F9: mc_search__cond_struct_new (search.c:79)
==24241==    by 0x45C5B4: mc_search_prepare (search.c:236)
==24241==    by 0x45C6DC: mc_search_run (search.c:279)
==24241==    by 0x4242A6: regex_command_for (ext.c:923)
==24241==  Block was alloc'd at
==24241==    at 0x4C29130: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==24241==    by 0x5D3135E: __gconv_open (gconv_open.c:164)
==24241==    by 0x5D30E47: iconv_open (iconv_open.c:71)
==24241==    by 0x5811FD8: try_conversion (gconvert.c:176)
==24241==    by 0x581256E: g_iconv_open (gconvert.c:225)
==24241==    by 0x485988: mc_search__recode_str (lib.c:75)
==24241==    by 0x485A67: mc_search__get_one_symbol (lib.c:110)
==24241==    by 0x48B834: mc_search__cond_struct_new_regex_accum_append (regex.c:170)
==24241==    by 0x48BB05: mc_search__cond_struct_new_regex_ci_str (regex.c:241)
==24241==    by 0x48CC5A: mc_search__cond_struct_new_init_regex (regex.c:726)
==24241==    by 0x45C1F9: mc_search__cond_struct_new (search.c:79)
==24241==    by 0x45C5B4: mc_search_prepare (search.c:236)

Index: mc-4.8.11/src/filemanager/file.c
===================================================================
--- mc-4.8.11.orig/src/filemanager/file.c
+++ mc-4.8.11/src/filemanager/file.c
@@ -2520,7 +2520,7 @@ compute_dir_size_destroy_ui (ComputeDirS
     if (ui != NULL)
     {
         /* schedule to update passive panel */
-        other_panel->dirty = 1;
+        // other_panel->dirty = 1;
 
         /* close and destroy dialog */
         dlg_run_done (ui->dlg);
openSUSE Build Service is sponsored by