From ea640581bad1c596f657ca405f6c97e1b4fc4b11 Mon Sep 17 00:00:00 2001 From: Lars Ingebrigtsen Date: Thu, 23 Jun 2022 11:22:29 +0200 Subject: [PATCH] Ensure that nnimap doesn't send too long lines to the server * lisp/gnus/nnimap.el (nnimap-retrieve-headers): Don't send too-long lines to the server (bug#56138). --- lisp/gnus/nnimap.el | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el index afd5418912f..c158367b736 100644 --- a/lisp/gnus/nnimap.el +++ b/lisp/gnus/nnimap.el @@ -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) -- 2.39.2