internet time @ ???
tenpo ni li "???"

rnd's website |

midnight commander subshell bug

After updating Alpine Linux on my VPS to version 3.14, I noticed that Midnight Commander (mc) crashed with a segmentation fault around 90% of the time, and at other times it ran, but refused to accept any input.

At first, I thought that it had to do with the OS update itself and something was wrong with the version of mc or some other package built in Alpine, so I tried building mc with ncurses instead of slang as it was before, but to no effect. To make matters worse, the bug disappeared when I tried to trace it in strace or valgrind.

Eventually, I figured out that the best way to find out the cause is to just build the mc package with the debugging symbols. To do that in Alpine, you need to modify the APKBUILD file describing the package by adding a $pkgname-dbg subpackage and setting a !strip option, so that abuild doesn’t remove the debugging symbols and knows where to put them.

As a result, I was able to trace the bug to its source: a g_string_free operation that is called even though the pointer to the string is empty. As it turned out, it’s a known issue listed as mc bug #4213.

Until the bug is fixed, the best option is to always run mc with subshells disabled. In my case, I just added the following string to my ~/.profile:

alias mc='mc -u'