Subject: bug#36312: closed (Re: bug#36312: 27.0.50; (message) in display spec condition causes emacs_abort())

From: [email-masked] (GNU bug Tracking System)
Date: Fri, 21 Jun 2019 08:15:02 +0000

Your bug report

#36312: 27.0.50; (message) in display spec condition causes emacs_abort()

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
36312: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=36312
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#36312: 27.0.50; (message) in display spec condition causes emacs_abort()
From: Pip Cet <[email-masked]>
To: Eli Zaretskii <[email-masked]>
Cc: [email-masked]
Date: Fri, 21 Jun 2019 08:13:42 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

On Fri, Jun 21, 2019 at 7:34 AM Eli Zaretskii <[email-masked]> wrote:
> > From: Pip Cet <[email-masked]>
> > Date: Thu, 20 Jun 2019 19:32:43 +0000
> > Cc: [email-masked]
> >
> Can we close this bug?  Is the crash fixed in your real-life code as
> well?

Thank you very much, it is!

Subject: 27.0.50; (message) in display spec condition causes emacs_abort()
From: Pip Cet <[email-masked]>
To: [email-masked]
Date: Thu, 20 Jun 2019 16:06:25 +0000
List-Id: <debbugs-submit.debbugs.gnu.org>

In emacs -Q, evaluate

(let ((o (make-overlay (point) (point))))
  (overlay-put o 'after-string (propertize " " 'display
                       '(when (message "a")
  . "b"))))

This causes a SIGABRT in the bidi stack code.

Backtrace:

#0  0x00007ffff4b4d5cb in raise (sig=sig@entry=6)
    at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x000055555559573b in terminate_due_to_signal
    (sig=sig@entry=6, backtrace_limit=backtrace_limit@entry=40) at emacs.c:406
#2  0x0000555555595b37 in emacs_abort () at sysdep.c:2453
#3  0x00005555555942e3 in bidi_pop_it (bidi_it=bidi_it@entry=0x7fffffff99b0)
    at bidi.c:947
#4  0x00005555555b2174 in pop_it (it=0x7fffffff8fc0) at xdisp.c:6356
#5  0x00005555555c3594 in next_overlay_string (it=it@entry=0x7fffffff8fc0)
    at xdisp.c:5754
#6  0x00005555555c8edc in set_iterator_to_next
    (it=0x7fffffff8fc0, reseat_p=<optimized out>) at xdisp.c:7871
#7  0x00005555555cf9ba in display_line
    (it=0x7fffffff8fc0, cursor_vpos=<optimized out>) at xdisp.c:22296
#8  0x00005555555d491b in try_window
    (window=window@entry=0x555555f99fa5, pos=..., flags=flags@entry=1)
    at xdisp.c:17863
#9  0x00005555555e80df in redisplay_window
    (window=0x555555f99fa5, just_this_one_p=<optimized out>) at xdisp.c:17311
#10 0x00005555555eae1e in redisplay_window_1
(window=window@entry=0x555555f99fa5)
    at xdisp.c:15044
#11 0x00005555556eb3ca in internal_condition_case_1
    (bfun=bfun@entry=0x5555555eadf0 <redisplay_window_1>,
arg=0x555555f99fa5, handlers=<optimized out>,
hfun=hfun@entry=0x5555555afd00 <redisplay_window_error>)
    at eval.c:1376
#12 0x00005555555d834f in redisplay_internal () at xdisp.c:14614
#13 0x000055555567b5d7 in read_char
    (commandflag=1, map=0x555556856f83, prev_event=0x0,
used_mouse_menu=0x7fffffffe4db, end_time=0x0) at keyboard.c:2474
#14 0x000055555567df1e in read_key_sequence
    (keybuf=0x7fffffffe5e0, prompt=0x0, dont_downcase_last=<optimized
out>, can_return_switch_frame=true, fix_current_buffer=true,
prevent_redisplay=<optimized out>)
    at keyboard.c:9111
#15 0x000055555567f6fc in command_loop_1 () at lisp.h:1045
#16 0x00005555556eb332 in internal_condition_case
    (bfun=bfun@entry=0x55555567f520 <command_loop_1>,
handlers=handlers@entry=0x55b0, hfun=hfun@entry=0x555555676d20
<cmd_error>) at eval.c:1352
#17 0x0000555555671d14 in command_loop_2 (ignore=ignore@entry=0x0) at
lisp.h:1045
#18 0x00005555556eb2b1 in internal_catch
    (tag=tag@entry=0xcc30, func=func@entry=0x555555671cf0
<command_loop_2>, arg=arg@entry=0x0) at eval.c:1113
#19 0x0000555555671cbb in command_loop () at lisp.h:1045
#20 0x0000555555676926 in recursive_edit_1 () at keyboard.c:714
#21 0x0000555555676c45 in Frecursive_edit () at keyboard.c:786
#22 0x000055555559b227 in main (argc=2, argv=0x7fffffffe978) at emacs.c:1962

It's reproducible here, so I can provide more debugging information if
required.

I'm aware that doing complicated stuff in a display spec condition is
a bad idea, but I think debug messages are such an important special
case that we ought, at least, not to abort completely for those.

Setting redisplay--bidi-inhibit to t works around the problem.