From 026f799e42c2ca2fa3a3dc1467c8b2ebd5983dd0 Mon Sep 17 00:00:00 2001 From: Pip Cet Date: Thu, 25 Jul 2019 13:22:15 +0000 Subject: [PATCH 2/2] Don't double-decompress cached HTTP responses (bug#36773) * lisp/url/url-http.el (url-handle-content-transfer-encoding): Modify the message headers as well as the message body to reflect decompression. * lisp/mail/mail-utils.el (mail-fetch-field): Add DELETE argument, to delete header lines included in the result. --- lisp/mail/mail-utils.el | 13 ++++++++++--- lisp/url/url-http.el | 2 +- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lisp/mail/mail-utils.el b/lisp/mail/mail-utils.el index cbcbdfaeb2..fd00dd19bc 100644 --- a/lisp/mail/mail-utils.el +++ b/lisp/mail/mail-utils.el @@ -284,11 +284,13 @@ 'rmail-dont-reply-to ;;;###autoload -(defun mail-fetch-field (field-name &optional last all list) +(defun mail-fetch-field (field-name &optional last all list delete) "Return the value of the header field whose type is FIELD-NAME. If second arg LAST is non-nil, use the last field of type FIELD-NAME. If third arg ALL is non-nil, concatenate all such fields with commas between. If 4th arg LIST is non-nil, return a list of all such fields. +If 5th arg DELETE is non-nil, delete all header lines that are +included in the result. The buffer should be narrowed to just the header, else false matches may be returned from the message body." (save-excursion @@ -311,7 +313,9 @@ mail-fetch-field (setq value (concat value (if (string= value "") "" ", ") (buffer-substring-no-properties - opoint (point))))))) + opoint (point))))) + (if delete + (delete-region (point-at-bol) (point))))) (if list value (and (not (string= value "")) value))) @@ -324,7 +328,10 @@ mail-fetch-field ;; Back up over newline, then trailing spaces or tabs (forward-char -1) (skip-chars-backward " \t" opoint) - (buffer-substring-no-properties opoint (point))))))))) + (prog1 + (buffer-substring-no-properties opoint (point)) + (if delete + (delete-region (point-at-bol) (1+ (point)))))))))))) ;; Parse a list of tokens separated by commas. ;; It runs from point to the end of the visible part of the buffer. diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 527760118d..41bad9dba0 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -951,7 +951,7 @@ url-http-parse-headers (start end &optional allow-partial)) (defun url-handle-content-transfer-encoding () - (let ((encoding (mail-fetch-field "content-encoding"))) + (let ((encoding (mail-fetch-field "content-encoding" nil nil nil t))) (when (and encoding (fboundp 'zlib-available-p) (zlib-available-p) -- 2.22.0