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'