]> git.eshelyaron.com Git - emacs.git/commitdiff
Ensure that nnimap doesn't send too long lines to the server
authorLars Ingebrigtsen <larsi@gnus.org>
Thu, 23 Jun 2022 09:22:29 +0000 (11:22 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Thu, 23 Jun 2022 09:23:08 +0000 (11:23 +0200)
* lisp/gnus/nnimap.el (nnimap-retrieve-headers): Don't send
too-long lines to the server (bug#56138).

lisp/gnus/nnimap.el

index afd5418912f0d7ab31924e682322a1305f159a52..c158367b736ee8963d73c7938b1d8a40f46e42d2 100644 (file)
@@ -239,12 +239,21 @@ during splitting, which may be slow."
     (when (nnimap-change-group group server)
       (with-current-buffer (nnimap-buffer)
        (erase-buffer)
-       (nnimap-wait-for-response
-        (nnimap-send-command
-         "UID FETCH %s %s"
-         (nnimap-article-ranges (gnus-compress-sequence articles))
-         (nnimap-header-parameters))
-        t)
+        (let ((ranges (gnus-compress-sequence articles))
+              sequence)
+          ;; If we have a lot of ranges, split them up to avoid
+          ;; generating too-long lines.  (The limit is 8192 octects,
+          ;; and this should guarantee that it's (much) shorter than
+          ;; that.)
+          (while ranges
+            (setq sequence
+                 (nnimap-send-command
+                  "UID FETCH %s %s"
+                  (nnimap-article-ranges (seq-take ranges 200))
+                  (nnimap-header-parameters)))
+            (setq ranges (nthcdr 200 ranges)))
+          ;; Wait for the final one.
+         (nnimap-wait-for-response sequence t))
        (unless (process-live-p (get-buffer-process (current-buffer)))
          (error "IMAP server %S closed connection" nnimap-address))
        (nnimap-transform-headers)