Subject: bug#56789: 28.1.90; Emoji composition problems with Harfbuzz 5.0.1-1

From: Simon Pugnet <[email-masked]>
Date: Wed, 27 Jul 2022 06:10:06 +0000

I have just updated the Harfbuzz package in Arch Linux to
harfbuzz-5.0.1-1 and I've noticed that some emojis are no longer
displayed properly. From an initial investigation it appears to be
only composed sequences that have problems.

Instead of seeing a correctly composed emoji sequence as before, I now
only see an empty box with a single-pixel border.

Calling describe-char on one of these boxes shows the base emojis
properly. For example: -

             position: 20 of 39 (49%), column: 19
            character: 👩 (displayed as 👩) (codepoint 128105,
            #o372151, #x1f469)
              charset: unicode (Unicode (ISO10646))
code point in charset: 0x1F469
               script: emoji
               syntax: w 	which means: word
             category: .:Base
             to input: type "C-x 8 RET 1f469" or "C-x 8 RET WOMAN"
          buffer code: #xF0 #x9F #x91 #xA9
            file code: #xF0 #x9F #x91 #xA9 (encoded by coding system
            utf-8-unix)
              display: composed to form "👩‍❤️‍👨" (see below)

Composed with the following character(s) "‍❤️‍👨" using this font:
  ftcrhb:-GOOG-Noto Color
  Emoji-normal-normal-normal-*-13-*-*-*-m-0-iso10646-1
by these glyphs:
  [0 5 128105 2178 16 0 17 13 4 [0 0 0]]
with these character(s):
  ‍ (#x200d) ZERO WIDTH JOINER
  ❤ (#x2764) HEAVY BLACK HEART
  ️ (#xfe0f) VARIATION SELECTOR-16
  ‍ (#x200d) ZERO WIDTH JOINER
  👨 (#x1f468) MAN

Each individual character image is shown properly for me, but the
composition isn't (in this case it previously showed a man and a woman
and a love heart in between them). i.e. I see something like 'display:
composed to form "[ ]" (see below)' in the output above.

I'm not sure if this is a bug in Emacs or Harfbuzz however it only
started happening after the upgrade to 5.0.1-1

Thank you for your time,

Simon

In GNU Emacs 28.1.90 (build 18, x86_64-pc-linux-gnu, GTK+ Version
3.24.34, cairo version 1.17.6)
 of 2022-07-26 built on palenque
Repository revision: 970190b84485e4511b094546395a7e710f894fae
Repository branch: emacs-28
Windowing system distributor 'The X.Org Foundation', version
11.0.12101004
System Description: Arch Linux

Configured using:
 'configure --with-native-compilation --with-json --with-modules
 --with-xinput2'

Configured features:
ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ
JPEG
JSON LCMS2 LIBOTF LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP
NOTIFY
INOTIFY PDUMPER PNG RSVG SECCOMP SOUND THREADS TIFF
TOOLKIT_SCROLL_BARS
X11 XDBE XIM XPM GTK3 ZLIB

Important settings:
  value of $LC_CTYPE: en_GB.UTF-8
  value of $LANG: en_GB.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Text

Minor modes in effect:
  tooltip-mode: t
  global-eldoc-mode: t
  show-paren-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  indent-tabs-mode: t
  transient-mark-mode: t

Load-path shadows:
None found.

Features:
(shadow sort mail-extr emacsbug message rmc puny dired dired-loaddefs
rfc822 mml mml-sec epa derived epg rfc6068 epg-config gnus-util rmail
rmail-loaddefs auth-source eieio eieio-core eieio-loaddefs
password-cache json map comp comp-cstr warnings rx cl-seq cl-macs
cl-extra text-property-search time-date subr-x seq byte-opt gv
bytecomp
byte-compile cconv mm-decode mm-bodies mm-encode mail-parse rfc2231
mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums
mm-util mail-prsvr mail-utils wid-edit descr-text help-mode
cl-loaddefs
cl-lib iso-transl tooltip eldoc paren electric uniquify ediff-hook
vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list replace newcomment text-mode lisp-mode prog-mode
register
page tab-bar menu-bar rfn-eshadow isearch easymenu timer select
scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors
frame minibuffer cl-generic cham georgian utf-8-lang misc-lang
vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932
hebrew greek romanian slovak czech european ethiopic indian cyrillic
chinese composite emoji-zwj charscript charprop case-table epa-hook
jka-cmpr-hook help simple abbrev obarray cl-preloaded nadvice button
loaddefs faces cus-face macroexp files window text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote threads dbusbind inotify lcms2
dynamic-setting system-font-setting font-render-setting cairo
move-toolbar gtk x-toolkit x multi-tty make-network-process
native-compile emacs)

Memory information:
((conses 16 114901 17962)
 (symbols 48 21114 1)
 (strings 32 87518 2289)
 (string-bytes 1 2298262)
 (vectors 16 28938)
 (vector-slots 8 1511821 27694)
 (floats 8 34 74)
 (intervals 56 291 0)
 (buffers 992 13))