Subject: bug#39892: 28.0.50; Crash when running async command

From: Robert Pluim <[email-masked]>
Date: Wed, 04 Mar 2020 11:01:57 +0100

>>>>> On Wed, 04 Mar 2020 08:07:21 +0530, Ravine Var <[email-masked]> said:

    Ravine> Emacs crashes when the output of 'gpg -d' is processed
    Ravine> in the '*Async Shell Command*' buffer. This happens when the
    Ravine> "Noto Sans Symbols2" font is used. To reproduce:

    Ravine> * Inside the emacs git tree, do:
    Ravine>    "gzip configure"
    Ravine>    "gpg -c configure.gz"

    Ravine> * Start 'emacs -Q'

    Ravine> * Eval this: (set-fontset-font t 'unicode "Noto Sans Symbols2" nil 'append)

    Ravine> * In dired, run dired-do-async-shell-command (&) on configure.gz.gpg and
    Ravine>   give 'gpg -d'. gpg now sends the decrypted output to stdout.

    Ravine> * At this point emacs crashes.

Indeed. A simpler recipe is to do the set-fontset-font and then

'C-x 8 RET e9f8'

The relevant code is:

  for (i = 0; i < size; i++)
    {
      Lisp_Object rfont_def = AREF (vec, i);
      Lisp_Object font_def = RFONT_DEF_FONT_DEF (rfont_def);

'vec' at that point is

[
[nil [#<font-spec nil nil nil nil iso10646-1 nil nil nil nil nil nil nil nil> 144 nil] nil 0]
nil
[nil [#<font-spec nil nil Noto\ Sans\ Symbols2 nil nil nil nil nil nil nil nil nil ((:name . "Noto Sans Symbols2"))> 0 0] nil 2]
]

and i == 1, so rfont_def ends up as nil.

How did that 'nil' get in there?

Robert