Subject: 25.1; shr-use-font nil may use too much memory

From: Christophe Troestler <[email-masked]>
Date: Thu, 15 Dec 2016 12:29:52 +0100

Dear Emacs maintainers,

I use shr to render HTML emails in Emacs.  As I prefer non-proportional 
fonts, I set

    (setq shr-use-fonts nil)

However, with some messages, Emacs started to use all system memory.  If 
shr-use-fonts is t, the rendering is fine.  Attached is a curated 
example triggering the bug: do

    (setq shr-use-fonts nil)
    select the whole html
    M-x shr-render-region

(I know the HTML is invalid but this is how the email message came.)

Best regards,
C.

In GNU Emacs 25.1.1 (x86_64-pc-linux-gnu, GTK+ Version 3.22.4)
 of 2016-12-01, modified by Debian built on trouble
Windowing system distributor 'The X.Org Foundation', version 
11.0.11900000
System Description:	Debian GNU/Linux testing (stretch)

Configured using:
 'configure --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/lib
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --with-pop=yes
 --enable-locallisppath=/etc/emacs25:/etc/emacs:/usr/local/share/emacs/25.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/25.1/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --build x86_64-linux-gnu --prefix=/usr
 --sharedstatedir=/var/lib --libexecdir=/usr/lib
 --localstatedir=/var/lib --infodir=/usr/share/info
 --mandir=/usr/share/man --with-pop=yes
 --enable-locallisppath=/etc/emacs25:/etc/emacs:/usr/local/share/emacs/25.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/25.1/site-lisp:/usr/share/emacs/site-lisp
 --with-sound=alsa --with-x=yes --with-x-toolkit=gtk3
 --with-toolkit-scroll-bars 'CFLAGS=-g -O2
 -fdebug-prefix-map=/build/emacs25-Fs4LPA/emacs25-25.1+1=. -fstack-protector-strong
 -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time
 -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro'
Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND GPM DBUS GCONF GSETTINGS
NOTIFY ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11
Important settings:
  value of $LC_MESSAGES: en_US.UTF-8
  value of $LC_MONETARY: en_GB.UTF-8
  value of $LC_NUMERIC: en_GB.UTF-8
  value of $LC_TIME: en_GB.UTF-8
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: mu4e:view

Minor modes in effect:
  shell-dirtrack-mode: t
  diff-auto-refine-mode: t
  TeX-PDF-mode: t
  erc-list-mode: t
  erc-menu-mode: t
  erc-autojoin-mode: t
  erc-ring-mode: t
  erc-networks-mode: t
  erc-pcomplete-mode: t
  erc-track-mode: t
  erc-match-mode: t
  erc-button-mode: t
  erc-fill-mode: t
  erc-stamp-mode: t
  erc-netsplit-mode: t
  erc-irccontrols-mode: t
  erc-noncommands-mode: t
  erc-move-to-prompt-mode: t
  erc-readonly-mode: t
  desktop-save-mode: t
  show-paren-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  buffer-read-only: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
Making completion list...
Invalid face reference: nil [24 times]
Making completion list...
Invalid face reference: nil [18 times]
QuitInvalid face reference: nil
Invalid face reference: nil [11 times]
Making completion list...
Invalid face reference: nil [24 times]
Making completion list...
Invalid face reference: nil [28 times]

Load-path shadows:
~/.opam/system/share/emacs/site-lisp/merlin-company hides 
~/.opam/4.03.0/share/emacs/site-lisp/merlin-company
~/.opam/system/share/emacs/site-lisp/merlin-ac hides 
~/.opam/4.03.0/share/emacs/site-lisp/merlin-ac
~/.opam/system/share/emacs/site-lisp/merlin-compat hides 
~/.opam/4.03.0/share/emacs/site-lisp/merlin-compat
~/.opam/system/share/emacs/site-lisp/merlin-iedit hides 
~/.opam/4.03.0/share/emacs/site-lisp/merlin-iedit
~/.opam/system/share/emacs/site-lisp/merlin-cap hides 
~/.opam/4.03.0/share/emacs/site-lisp/merlin-cap
~/.opam/system/share/emacs/site-lisp/merlin hides 
~/.opam/4.03.0/share/emacs/site-lisp/merlin
~/.opam/system/share/emacs/site-lisp/caml-compat hides 
~/software/OCaml/tuareg/caml-mode/caml-compat
~/.opam/system/share/emacs/site-lisp/caml-font hides 
~/software/OCaml/tuareg/caml-mode/caml-font
~/.opam/system/share/emacs/site-lisp/caml-hilit hides 
~/software/OCaml/tuareg/caml-mode/caml-hilit
~/.opam/system/share/emacs/site-lisp/inf-caml hides 
~/software/OCaml/tuareg/caml-mode/inf-caml
~/.opam/system/share/emacs/site-lisp/caml-help hides 
~/software/OCaml/tuareg/caml-mode/caml-help
~/.opam/system/share/emacs/site-lisp/caml-types hides 
~/software/OCaml/tuareg/caml-mode/caml-types
~/.opam/system/share/emacs/site-lisp/caml-xemacs hides 
~/software/OCaml/tuareg/caml-mode/caml-xemacs
~/.opam/system/share/emacs/site-lisp/camldebug hides 
~/software/OCaml/tuareg/caml-mode/camldebug
~/.opam/system/share/emacs/site-lisp/caml hides 
~/software/OCaml/tuareg/caml-mode/caml
~/.opam/system/share/emacs/site-lisp/caml-emacs hides 
~/software/OCaml/tuareg/caml-mode/caml-emacs
/home/trch/software/mu/mu4e/mu4e-headers hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-headers
/home/trch/software/mu/mu4e/mu4e-contrib hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-contrib
/home/trch/software/mu/mu4e/mu4e-context hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-context
/home/trch/software/mu/mu4e/mu4e-message hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-message
/home/trch/software/mu/mu4e/org-old-mu4e hides 
/usr/share/emacs25/site-lisp/mu4e/org-old-mu4e
/home/trch/software/mu/mu4e/mu4e hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e
/home/trch/software/mu/mu4e/mu4e-mark hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-mark
/home/trch/software/mu/mu4e/mu4e-compose hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-compose
/home/trch/software/mu/mu4e/mu4e-draft hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-draft
/home/trch/software/mu/mu4e/mu4e-lists hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-lists
/home/trch/software/mu/mu4e/mu4e-meta hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-meta
/home/trch/software/mu/mu4e/mu4e-view hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-view
/home/trch/software/mu/mu4e/mu4e-speedbar hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-speedbar
/home/trch/software/mu/mu4e/mu4e-vars hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-vars
/home/trch/software/mu/mu4e/org-mu4e hides 
/usr/share/emacs25/site-lisp/mu4e/org-mu4e
/home/trch/software/mu/mu4e/mu4e-utils hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-utils
/home/trch/software/mu/mu4e/mu4e-proc hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-proc
/home/trch/software/mu/mu4e/mu4e-main hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-main
/home/trch/software/mu/mu4e/mu4e-actions hides 
/usr/share/emacs25/site-lisp/mu4e/mu4e-actions
/usr/share/emacs/25.1/site-lisp/debian-startup hides 
/usr/share/emacs/site-lisp/debian-startup
/usr/share/emacs25/site-lisp/flim/md4 hides 
/usr/share/emacs/25.1/lisp/md4
/usr/share/emacs25/site-lisp/flim/hex-util hides 
/usr/share/emacs/25.1/lisp/hex-util
/home/trch/.emacs.d/elpa/soap-client-3.1.1/soap-inspect hides 
/usr/share/emacs/25.1/lisp/net/soap-inspect
/usr/share/emacs25/site-lisp/flim/sasl-cram hides 
/usr/share/emacs/25.1/lisp/net/sasl-cram
/usr/share/emacs25/site-lisp/flim/sasl-ntlm hides 
/usr/share/emacs/25.1/lisp/net/sasl-ntlm
/usr/share/emacs25/site-lisp/flim/sasl hides 
/usr/share/emacs/25.1/lisp/net/sasl
/usr/share/emacs25/site-lisp/flim/hmac-def hides 
/usr/share/emacs/25.1/lisp/net/hmac-def
/home/trch/.emacs.d/elpa/soap-client-3.1.1/soap-client hides 
/usr/share/emacs/25.1/lisp/net/soap-client
/usr/share/emacs25/site-lisp/flim/hmac-md5 hides 
/usr/share/emacs/25.1/lisp/net/hmac-md5
/usr/share/emacs25/site-lisp/flim/ntlm hides 
/usr/share/emacs/25.1/lisp/net/ntlm
/usr/share/emacs25/site-lisp/flim/sasl-digest hides 
/usr/share/emacs/25.1/lisp/net/sasl-digest
/usr/share/emacs25/site-lisp/latex-cjk-thai/thai-word hides 
/usr/share/emacs/25.1/lisp/language/thai-word
/usr/share/emacs25/site-lisp/auctex/toolbar-x hides 
/usr/share/emacs/site-lisp/auctex/toolbar-x
/usr/share/emacs25/site-lisp/auctex/context hides 
/usr/share/emacs/site-lisp/auctex/context
/usr/share/emacs25/site-lisp/auctex/tex hides 
/usr/share/emacs/site-lisp/auctex/tex
/usr/share/emacs25/site-lisp/auctex/tex-style hides 
/usr/share/emacs/site-lisp/auctex/tex-style
/usr/share/emacs25/site-lisp/auctex/prv-emacs hides 
/usr/share/emacs/site-lisp/auctex/prv-emacs
/usr/share/emacs25/site-lisp/auctex/plain-tex hides 
/usr/share/emacs/site-lisp/auctex/plain-tex
/usr/share/emacs25/site-lisp/auctex/font-latex hides 
/usr/share/emacs/site-lisp/auctex/font-latex
/usr/share/emacs25/site-lisp/auctex/tex-jp hides 
/usr/share/emacs/site-lisp/auctex/tex-jp
/usr/share/emacs25/site-lisp/auctex/tex-fold hides 
/usr/share/emacs/site-lisp/auctex/tex-fold
/usr/share/emacs25/site-lisp/auctex/tex-font hides 
/usr/share/emacs/site-lisp/auctex/tex-font
/usr/share/emacs25/site-lisp/auctex/tex-info hides 
/usr/share/emacs/site-lisp/auctex/tex-info
/usr/share/emacs25/site-lisp/auctex/tex-buf hides 
/usr/share/emacs/site-lisp/auctex/tex-buf
/usr/share/emacs25/site-lisp/auctex/multi-prompt hides 
/usr/share/emacs/site-lisp/auctex/multi-prompt
/usr/share/emacs25/site-lisp/auctex/texmathp hides 
/usr/share/emacs/site-lisp/auctex/texmathp
/usr/share/emacs25/site-lisp/auctex/preview hides 
/usr/share/emacs/site-lisp/auctex/preview
/usr/share/emacs25/site-lisp/auctex/tex-mik hides 
/usr/share/emacs/site-lisp/auctex/tex-mik
/usr/share/emacs25/site-lisp/auctex/context-en hides 
/usr/share/emacs/site-lisp/auctex/context-en
/usr/share/emacs25/site-lisp/auctex/latex hides 
/usr/share/emacs/site-lisp/auctex/latex
/usr/share/emacs25/site-lisp/auctex/context-nl hides 
/usr/share/emacs/site-lisp/auctex/context-nl
/usr/share/emacs25/site-lisp/auctex/bib-cite hides 
/usr/share/emacs/site-lisp/auctex/bib-cite
/usr/share/emacs25/site-lisp/auctex/tex-bar hides 
/usr/share/emacs/site-lisp/auctex/tex-bar

Features:
(shadow face-remap emacsbug rect url-cache sgml-mode tramp-cache tramp
tramp-compat tramp-loaddefs trampver ucs-normalize texmathp misearch
multi-isearch view shr-color color shr dom org-element org-rmail org-mhe
org-irc org-info org-gnus org-docview org-bibtex org-bbdb org-w3m
latexenc preview prv-emacs tex-buf flyspell ispell reftex-dcr reftex
reftex-vars latex tex-style tex-mode compile shell vc-git diff-mode
font-latex tex dbus crm bibtex merlin-compat merlin-cap merlin
caml-types caml-emacs tq log-edit pcvs-util add-log erc-list erc-menu
erc-join erc-ring erc-networks erc-pcomplete erc-track erc-match
erc-button erc-fill erc-stamp erc-netsplit erc-goodies erc erc-backend
erc-compat pp twittering-mode url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util mailcap xml
org-mu4e org org-macro org-footnote org-pcomplete pcomplete org-list
org-faces org-entities noutline outline easy-mmode org-version
ob-emacs-lisp ob ob-tangle ob-ref ob-lob ob-table ob-exp org-src ob-keys
ob-comint ob-core ob-eval org-compat org-macs org-loaddefs find-func
mu-cite alist std11 pccl pccl-20 pcustom poem poem-e20 poem-e20_3 pces
pces-e20 pces-20 broken poe pym static apel-ver product advice
mu4e-contrib mu4e desktop frameset mu4e-speedbar speedbar sb-image
ezimage dframe mu4e-main mu4e-context mu4e-view thingatpt comint
ansi-color ring mu4e-headers mu4e-compose mu4e-draft mu4e-actions ido
rfc2368 smtpmail sendmail mu4e-mark mu4e-message html2text mu4e-proc
mu4e-utils mu4e-lists mu4e-vars message format-spec rfc822 mml mml-sec
mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045
ietf-drums mailabbrev mail-utils gmm-utils mailheader hl-line mu4e-meta
w3m browse-url doc-view subr-x jka-compr dired image-mode timezone
w3m-hist w3m-fb bookmark-w3m w3m-ems wid-edit w3m-ccl ccl w3m-favicon
w3m-image w3m-proc w3m-util epa-file epa derived epg cl quail edmacro
kmacro paren icalendar diary-lib diary-loaddefs cal-menu calendar
cal-loaddefs server finder-inf url-auth url-parse auth-source cl-seq
eieio eieio-core cl-macs gnus-util mm-util help-fns mail-prsvr
password-cache url-vars info package epg-config seq byte-opt gv bytecomp
byte-compile cl-extra help-mode easymenu cconv cl-loaddefs pcase cl-lib
debian-el debian-el-loaddefs w3m-load preview-latex tex-site auto-loads
time-date mule-util tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type mwheel x-win term/common-win x-dnd tool-bar dnd fontset
image regexp-opt fringe tabulated-list newcomment elisp-mode lisp-mode
prog-mode register page menu-bar rfn-eshadow timer select scroll-bar
mouse jit-lock font-lock syntax facemenu font-core frame 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 charscript case-table epa-hook
jka-cmpr-hook help simple abbrev minibuffer cl-preloaded nadvice
loaddefs button faces cus-face macroexp files text-properties overlay
sha1 md5 base64 format env code-pages mule custom widget
hashtable-print-readable backquote dbusbind inotify dynamic-setting
system-font-setting font-render-setting move-toolbar gtk x-toolkit x
multi-tty make-network-process emacs)

Memory information:
((conses 16 495487 54606)
 (symbols 48 47242 0)
 (miscs 40 780 900)
 (strings 32 120118 67618)
 (string-bytes 1 3695674)
 (vectors 16 69741)
 (vector-slots 8 1959822 190296)
 (floats 8 651 474)
 (intervals 56 5527 1327)
 (buffers 976 37))