Subject: bug#10035: Crash in check_x_frame in w32fns.c

From: Juanma Barranquero <[email-masked]>
Date: Mon, 14 Nov 2011 16:46:29 +0100

Another example, with a different recipe. I get this one by doing

emacs w32proc.c      ;; it has changes, so the diff is not empty
C-x v =
and, in the diff buffer,
C-x h

but not from -Q, alas.

Breakpoint 1, w32_abort () at w32fns.c:7190
7190      button = MessageBox (NULL,
(gdb) bt
#0  w32_abort () at w32fns.c:7190
#1  0x010ee13d in row_equal_p (a=0x542a6b8, b=0x53776b8,
mouse_face_p=1) at dispnew.c:1294
#2  0x010f498b in scrolling_window (w=0x39e1e00, header_line_p=0) at
dispnew.c:4305
#3  0x010f317a in update_window (w=0x39e1e00, force_p=1) at dispnew.c:3605
#4  0x010f287a in update_window_tree (w=0x39e1e00, force_p=1) at dispnew.c:3349
#5  0x010f2853 in update_window_tree (w=0x39af200, force_p=1) at dispnew.c:3347
#6  0x010f25c9 in update_frame (f=0x3a2de00, force_p=1,
inhibit_hairy_id_p=0) at dispnew.c:3276
#7  0x011ff1ea in redisplay_internal () at xdisp.c:13238
#8  0x011ffb84 in redisplay_preserve_echo_area (from_where=8) at xdisp.c:13389
#9  0x010205b7 in detect_input_pending_run_timers (do_display=1) at
keyboard.c:10474
#10 0x0104bd45 in wait_reading_process_output (time_limit=300,
microsecs=0, read_kbd=-1, do_display=1, wait_for_cell=54720538,
wait_proc=0x0,
    just_wait_proc=0) at process.c:4701
#11 0x010f99d9 in sit_for (timeout=1200, reading=1, do_display=1) at
dispnew.c:5994
#12 0x01009253 in read_char (commandflag=1, nmaps=6, maps=0x88f960,
prev_event=54720538, used_mouse_menu=0x88fa48, end_time=0x0) at
keyboard.c:2687
#13 0x0101c2bd in read_key_sequence (keybuf=0x88fbd0, bufsize=30,
prompt=54720538, dont_downcase_last=0, can_return_switch_frame=1,
    fix_current_buffer=1) at keyboard.c:9290
#14 0x01005c70 in command_loop_1 () at keyboard.c:1447
#15 0x01032e63 in internal_condition_case (bfun=0x1005678
<command_loop_1>, handlers=54778266, hfun=0x1004e97 <cmd_error>) at
eval.c:1499
#16 0x010052d4 in command_loop_2 (ignore=54720538) at keyboard.c:1158
#17 0x01032886 in internal_catch (tag=54776290, func=0x10052b0
<command_loop_2>, arg=54720538) at eval.c:1256
#18 0x01005290 in command_loop () at keyboard.c:1137
#19 0x0100486c in recursive_edit_1 () at keyboard.c:757
#20 0x01004b87 in Frecursive_edit () at keyboard.c:821
#21 0x010028b5 in main (argc=1, argv=0xc32c68) at emacs.c:1707
(gdb) frame 1
#1  0x010ee13d in row_equal_p (a=0x542a6b8, b=0x53776b8,
mouse_face_p=1) at dispnew.c:1294
1294      xassert (verify_row_hash (a));
(gdb) p a->enabled_p
$1 = 1
(gdb) p b->enabled_p
$2 = 1
(gdb) prowx a
y=150 x=0 pwid=16 a+d=12+3=15 phys=12+3=15 vis=15  L=0 T=2 R=0
start=415 end=417 ENA DISP
(gdb) prowx b
y=150 x=0 pwid=16 a+d=12+3=15 phys=12+3=15 vis=15  L=0 T=2 R=0
start=415 end=417 ENA DISP
(gdb) pgrowx a
TEXT: 2 glyphs
  0    0: CHAR[ ] pos=415 blev=0,btyp=L w=8 a+d=12+3 face=39 MB
  1    8: CHAR[ ] pos=0 blev=0,btyp=B w=8 a+d=12+3 face=43 MB
(gdb) pgrowx b
TEXT: 2 glyphs
  0    0: CHAR[ ] pos=415 blev=0,btyp=L w=8 a+d=12+3 face=39 MB
  1    8: CHAR[ ] pos=0 blev=0,btyp=B w=8 a+d=12+3 face=43 MB
(gdb) p a->hash
$3 = 1275
(gdb) p b->hash
$4 = 1275