Subject: Gnus hangs during smiley treatment

From: Dave Abrahams <[email-masked]>
Date: Thu, 12 Jul 2012 05:16:44 -0400

I have no idea why this happens for me, but on one particular message,
Emacs freezes.  I have to `C-g' and I get this backtrace.  Looks like
maybe it's infinitely recursing, adding smileys(?)

--8<---------------cut here---------------start------------->8---
Debugger entered--Lisp error: (quit)
  (let ((entry (assq category gnus-article-image-alist))) (unless entry (setq entry (list category)) (push entry gnus-article-image-alist)) (nconc entry (list image)))
  gnus-add-image(smiley (image :type xpm :file "/opt/local/share/emacs/24.1/etc/images/smilies/sad.xpm" :ascent center))
  smiley-region(2333 6479)
  (let ((images (smiley-region (point) (point-max)))) (when images (gnus-add-wash-type (quote smiley)) (dolist (image images) (gnus-add-image (quote smiley) image))))
  (if (memq (quote smiley) gnus-article-wash-types) (gnus-delete-images (quote smiley)) (article-goto-body) (let ((images (smiley-region (point) (point-max)))) (when images (gnus-add-wash-type (quote smiley)) (dolist (image images) (gnus-add-image (quote smiley) image)))))
  (let ((inhibit-read-only t)) (if (memq (quote smiley) gnus-article-wash-types) (gnus-delete-images (quote smiley)) (article-goto-body) (let ((images (smiley-region (point) (point-max)))) (when images (gnus-add-wash-type (quote smiley)) (dolist (image images) (gnus-add-image (quote smiley) image))))))
  (save-current-buffer (set-buffer gnus-article-buffer) (let ((inhibit-read-only t)) (if (memq (quote smiley) gnus-article-wash-types) (gnus-delete-images (quote smiley)) (article-goto-body) (let ((images (smiley-region (point) (point-max)))) (when images (gnus-add-wash-type (quote smiley)) (dolist (image images) (gnus-add-image (quote smiley) image)))))))
  (with-current-buffer gnus-article-buffer (let ((inhibit-read-only t)) (if (memq (quote smiley) gnus-article-wash-types) (gnus-delete-images (quote smiley)) (article-goto-body) (let ((images (smiley-region (point) (point-max)))) (when images (gnus-add-wash-type (quote smiley)) (dolist (image images) (gnus-add-image (quote smiley) image)))))))
  (progn (with-current-buffer gnus-article-buffer (let ((inhibit-read-only t)) (if (memq (quote smiley) gnus-article-wash-types) (gnus-delete-images (quote smiley)) (article-goto-body) (let ((images (smiley-region ... ...))) (when images (gnus-add-wash-type (quote smiley)) (dolist (image images) (gnus-add-image ... image))))))))
  (if (buffer-live-p (get-buffer gnus-article-buffer)) (progn (with-current-buffer gnus-article-buffer (let ((inhibit-read-only t)) (if (memq (quote smiley) gnus-article-wash-types) (gnus-delete-images (quote smiley)) (article-goto-body) (let ((images ...)) (when images (gnus-add-wash-type ...) (dolist ... ...))))))))
  (when (buffer-live-p (get-buffer gnus-article-buffer)) (with-current-buffer gnus-article-buffer (let ((inhibit-read-only t)) (if (memq (quote smiley) gnus-article-wash-types) (gnus-delete-images (quote smiley)) (article-goto-body) (let ((images (smiley-region ... ...))) (when images (gnus-add-wash-type (quote smiley)) (dolist (image images) (gnus-add-image ... image))))))))
  (gnus-with-article-buffer (if (memq (quote smiley) gnus-article-wash-types) (gnus-delete-images (quote smiley)) (article-goto-body) (let ((images (smiley-region (point) (point-max)))) (when images (gnus-add-wash-type (quote smiley)) (dolist (image images) (gnus-add-image (quote smiley) image))))))
  gnus-treat-smiley()
  funcall(gnus-treat-smiley)
  (save-restriction (funcall (cadr elem)))
  (progn (save-restriction (funcall (cadr elem))))
  (if (and (or (consp val) treated-type) (or (not gnus-inhibit-article-treatments) (eq gnus-treat-condition (quote head))) (gnus-treat-predicate val) (or (not (get (car elem) (quote highlight))) highlightp)) (progn (save-restriction (funcall (cadr elem)))))
  (when (and (or (consp val) treated-type) (or (not gnus-inhibit-article-treatments) (eq gnus-treat-condition (quote head))) (gnus-treat-predicate val) (or (not (get (car elem) (quote highlight))) highlightp)) (save-restriction (funcall (cadr elem))))
  (dolist (elem alist) (setq val (save-excursion (when (gnus-buffer-live-p gnus-summary-buffer) (set-buffer gnus-summary-buffer)) (symbol-value (car elem)))) (when (and (or (consp val) treated-type) (or (not gnus-inhibit-article-treatments) (eq gnus-treat-condition (quote head))) (gnus-treat-predicate val) (or (not (get (car elem) (quote highlight))) highlightp)) (save-restriction (funcall (cadr elem)))))
  gnus-treat-article(nil 1 1 "text/plain")
  (save-restriction (article-goto-body) (narrow-to-region (point) (point-max)) (gnus-treat-article nil 1 1 "text/plain") (widen))
  (if (and handles (or (not (stringp (car handles))) (cdr handles))) (progn (when (and (not ihandles) (not gnus-displaying-mime)) (article-goto-body) (delete-region (point) (point-max))) (let ((gnus-displaying-mime t)) (gnus-mime-display-part handles))) (save-restriction (article-goto-body) (narrow-to-region (point) (point-max)) (gnus-treat-article nil 1 1 "text/plain") (widen)))
  gnus-display-mime()
  funcall(gnus-display-mime)
  (progn (funcall gnus-display-mime-function))
  (if gnus-display-mime-function (progn (funcall gnus-display-mime-function)))
  (when gnus-display-mime-function (funcall gnus-display-mime-function))
  (let ((gnus-article-buffer (current-buffer)) buffer-read-only (inhibit-read-only t)) (unless (eq major-mode (quote gnus-article-mode)) (gnus-article-mode)) (setq buffer-read-only nil gnus-article-wash-types nil gnus-article-image-alist nil) (gnus-run-hooks (quote gnus-tmp-internal-hook)) (when gnus-display-mime-function (funcall gnus-display-mime-function)))
  gnus-article-prepare-display()
  (progn (gnus-article-prepare-display) (goto-char (point-min)) (when gnus-break-pages (gnus-narrow-to-page)))
  (if (or (numberp article) (stringp article)) (progn (gnus-article-prepare-display) (goto-char (point-min)) (when gnus-break-pages (gnus-narrow-to-page))))
  (when (or (numberp article) (stringp article)) (gnus-article-prepare-display) (goto-char (point-min)) (when gnus-break-pages (gnus-narrow-to-page)))
  gnus-article-prepare(126 nil)
  gnus-summary-display-article(126)
  gnus-summary-next-article(nil)
  call-interactively(gnus-summary-next-article nil nil)
--8<---------------cut here---------------end--------------->8---

Ma Gnus v0.6
GNU Emacs 24.1.1 (x86_64-apple-darwin11.4.0, Carbon Version 1.6.0 AppKit 1138.47)
 of 2012-06-27 on pluto.luannocracy.com
200 news.gmane.org InterNetNews NNRP server INN 2.5.1 ready (posting ok)
101 Capability list:
VERSION 2
IMPLEMENTATION INN 2.5.1
AUTHINFO USER
HDR
LIST ACTIVE ACTIVE.TIMES DISTRIB.PATS HEADERS NEWSGROUPS OVERVIEW.FMT
OVER
POST
READER
STARTTLS
.
382 Begin TLS negotiation now
101 Capability list:
VERSION 2
IMPLEMENTATION INN 2.5.1
AUTHINFO USER
HDR
LIST ACTIVE ACTIVE.TIMES DISTRIB.PATS HEADERS NEWSGROUPS OVERVIEW.FMT
OVER
POST
READER
.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com