tags 432682 + patch thanks Sorry, that bug report didn't actually say anything! Here's the real backtrace:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000403828 in ch_length () at ch.c:508
508 if (ch_flags & CH_HELPFILE)
(gdb) bt
#0 0x0000000000403828 in ch_length () at ch.c:508
#1 0x00000000004041cd in ch_seek (pos=0) at ch.c:419
#2 0x000000000040b7cd in jump_loc (pos=0, sline=0) at jump.c:199
#3 0x000000000040baf4 in repaint () at jump.c:98
#4 0x00000000004105fb in error (fmt=0x415328 "%s", parg=0x7fffd65b9a10) at
output.c:529
#5 0x00000000004092b6 in edit_ifile (ifile=0x6277d0) at edit.c:311
#6 0x000000000040946a in edit_istep (h=0x6277d0, n=-1, dir=1) at edit.c:527
#7 0x0000000000407167 in commands () at command.c:1412
#8 0x0000000000402158 in main (argc=<value optimized out>, argv=<value
optimized out>) at main.c:286
My interpretation of the crash is that less is attempting to get information
about the file it's failing to display in order to decide where to place the
cursor. It decides that the display is "squished", meaning that the first
displayed line is not at the top of the screen, and wants to repaint the
screen. This repaint causes it to try to find out the final cursor location
from the current position in the (non-existant) file, and crash.
This repainting behaviour seemed to have no effect in any test case I could
come up with, so I removed it. The patch that does this is:
--- output.c.orig 2007-07-15 18:51:25.000000000 +0100
+++ output.c 2007-07-15 19:07:09.000000000 +0100
@@ -525,8 +525,6 @@
if (any_display && is_tty)
{
- if (!oldbot)
- squish_check();
at_exit();
clear_bot();
at_enter(AT_STANDOUT);
Of course, less's assessment that the display is "squished" is wrong anyway
(it blanked the screen before displaying this short file) which is why I
believe it's safe to remove it. However, if you disagree with this resolution
you might like to investigate making the squished detection more clever.
Bruce
smime.p7s
Description: S/MIME cryptographic signature

