From 5d27dd6484d1c20d7f8c22d15c84423ff74594f2 Mon Sep 17 00:00:00 2001 From: Tassilo Horn Date: Thu, 3 Mar 2011 09:01:31 +0100 Subject: [PATCH] Work around numbers too big to be read. --- lisp/ChangeLog | 5 +++++ lisp/nnimap.el | 20 ++++++++++++++++---- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index e78128666..0df762900 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2011-03-03 Tassilo Horn + + * nnimap.el (nnimap-parse-flags): Add a workaround for FETCH lines with + numbers too big to be `read'. + 2011-03-02 Teodor Zlatanov * password-cache.el (password-in-cache-p): Add autoload. diff --git a/lisp/nnimap.el b/lisp/nnimap.el index c579261e3..aa4ecbc3b 100644 --- a/lisp/nnimap.el +++ b/lisp/nnimap.el @@ -1496,10 +1496,22 @@ textual parts.") (setq start (point)) (goto-char end)) (while (re-search-forward "^\\* [0-9]+ FETCH " start t) - (setq elems (read (current-buffer))) - (push (cons (cadr (memq 'UID elems)) - (cadr (memq 'FLAGS elems))) - articles)) + (let ((p (point))) + ;; FIXME: For FETCH lines like "* 2971 FETCH (FLAGS (%Recent) UID + ;; 12509 MODSEQ (13419098521433281274))" we get an + ;; overflow-error. The handler simply deletes that large number + ;; and reads again. But maybe there's a better fix... + (setq elems (condition-case nil (read (current-buffer)) + (overflow-error + ;; After an overflow-error, point is just after + ;; the too large number. So delete it and try + ;; again. + (delete-region (point) (progn (backward-word) (point))) + (goto-char p) + (read (current-buffer))))) + (push (cons (cadr (memq 'UID elems)) + (cadr (memq 'FLAGS elems))) + articles))) (push (nconc (list group uidnext totalp permanent-flags uidvalidity vanished highestmodseq) articles) -- 2.25.1