]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't double-decompress cached HTTP responses (bug#36773)
authorPip Cet <pipcet@gmail.com>
Thu, 25 Jul 2019 13:22:15 +0000 (13:22 +0000)
committerEli Zaretskii <eliz@gnu.org>
Sat, 27 Jul 2019 10:54:04 +0000 (13:54 +0300)
* 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
lisp/url/url-http.el

index cbcbdfaeb2eca1dc8989ee8083b8e89085283500..fd00dd19bc2e73deedd0f1cfc2370aa0e6bcd3ac 100644 (file)
@@ -284,11 +284,13 @@ comma-separated list, and return the pruned list."
 
 \f
 ;;;###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 @@ matches may be returned from the message body."
                  (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 @@ matches may be returned from the message body."
                ;; 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))))))))))))
 \f
 ;; Parse a list of tokens separated by commas.
 ;; It runs from point to the end of the visible part of the buffer.
index f7f2f3d179dc7d713eecdc949cc152349b0e2e0a..838f0a30c1f3e731c459a811b7ea30592290b6ff 100644 (file)
@@ -959,7 +959,7 @@ should be shown to the user."
                   (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)