It's not a ls bug. I've stepped through the code with gdb and it looks just fine. At this point I think Epsilon (a 32-bit app) is corrupting the image of its child process in a strange way. I'm working with the author at Lugaru (who's very responsive) to track it down. He couldn't reproduce it right away. I just reproduced it on a virgin CentOS 8 image at Linode with utterly no modifications. I just spun up the VM, logged in, scp'd the Epsilon RPM, dnf installed it, and demonstrated the issue. I extracted the formatting code from the ls source to create a short test program that doesn't rely on anything external like a file's actual modes. It's just the code that builds the string from the mode word. It looks like it mysteriously skips the middle of the routine for no reason when spawned either as a grandchild through bash or directly via whatever Epsilon uses to spawn a child process. It's definitely a spooky Halloween bug!