changeset 100871:1d5b4a08955f

Gnus: Fix edge cases with no data being returned and Courier eccentricity. * lisp/gnus/nnimap.el (nnimap-retrieve-headers-progress): Handle edge case where `headers' is nil. This can occur if the IMAP server does not have permissions to read messages from a folder, but can write new messages to the folder. (nnimap-request-article-part): Do not insert `data' if it is nil. * lisp/net/imap.el (imap-parse-fetch): Courier can insert spurious blank characters which will confuse `read', so skip past them.
author Michael Olson <mwolson@gnu.org>
date Sat, 03 Jan 2009 23:05:42 +0000
parents 373ba628faa9
children c6aed22590ab
files lisp/gnus/nnimap.el lisp/net/imap.el
diffstat 2 files changed, 8 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/gnus/nnimap.el	Sat Jan 03 19:43:54 2009 +0000
+++ b/lisp/gnus/nnimap.el	Sat Jan 03 23:05:42 2009 +0000
@@ -620,7 +620,7 @@
        ;; to make it more clear.
        (mm-with-unibyte-buffer
 	 (buffer-disable-undo)
-	 (insert headers)
+	 (when headers (insert headers))
 	 (let ((head (nnheader-parse-naked-head uid)))
 	   (mail-header-set-number head uid)
 	   (mail-header-set-chars head chars)
@@ -950,9 +950,10 @@
 	      (erase-buffer)
 	      (let ((data (imap-fetch article part prop nil
 				      nnimap-server-buffer)))
-		(insert (nnimap-demule (if detail
-					   (nth 2 (car data))
-					 data))))
+		(when data
+		  (insert (nnimap-demule (if detail
+					     (nth 2 (car data))
+					   data)))))
 	      (nnheader-ms-strip-cr)
 	      (gnus-message
 	       10 "nnimap: Fetching (part of) article %d from %s...done"
--- a/lisp/net/imap.el	Sat Jan 03 19:43:54 2009 +0000
+++ b/lisp/net/imap.el	Sat Jan 03 23:05:42 2009 +0000
@@ -2493,7 +2493,9 @@
   (when (eq (char-after) ?\()
     (let (uid flags envelope internaldate rfc822 rfc822header rfc822text
 	      rfc822size body bodydetail bodystructure flags-empty)
-      (while (not (eq (char-after) ?\)))
+      (while (let ((moved (skip-chars-forward " \t")))
+	       (prog1 (not (eq (char-after) ?\)))
+		 (unless (= moved 0) (backward-char))))
 	(imap-forward)
 	(let ((token (read (current-buffer))))
 	  (imap-forward)