[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#33133: 26.1.50; zlib-decompress-region too rigid

From: Katsumi Yamaoka
Subject: bug#33133: 26.1.50; zlib-decompress-region too rigid
Date: Wed, 24 Oct 2018 08:07:50 +0900
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1.50 (x86_64-unknown-cygwin)


Whereas `gzip -d' does, zlib-decompress-region doesn't decompress
corrupted data of a certain kind.  For instance, visiting


using eww shows raw gzipped data.  The data extracted is attached.
As for `gzip -d', it says "unexpected end of file" in stderr.
Here is a recipe to reproduce zlib-decompress-region not working:

(let ((buffer (get-buffer-create "*testing*"))
      (coding-system-for-read 'binary)
      (cw (selected-window))
      jka-compr-compression-info-list format-alist)
  (switch-to-buffer-other-window buffer)
  (set-buffer-multibyte nil)
  (insert-file-contents "/TEMP/corrupted-data.gz")
  (sit-for 1)
      (zlib-decompress-region (point-min) (point-max))
    (select-window cw)))

If there is no prospect to improve zlib-decompress-region, how
about this workaround?

--- url-http.el~        2018-09-12 07:48:16.110765500 +0000
+++ url-http.el 2018-10-23 23:04:48.060829900 +0000
@@ -951,7 +951,12 @@
        (goto-char (point-min))
        (when (search-forward "\n\n")
-         (zlib-decompress-region (point) (point-max)))))))
+         (or (zlib-decompress-region (point) (point-max))
+             (let ((coding-system-for-write 'binary)
+                   (coding-system-for-read 'binary)
+                   (default-process-coding-system (cons 'binary 'binary)))
+               (zerop (call-process-region (point) (point-max) "gzip"
+                                           t '(t nil) nil "-d")))))))))
 ;; Miscellaneous
 (defun url-http-activate-callback ()

In GNU Emacs 26.1.50 (build 1, x86_64-unknown-cygwin, GTK+ Version 3.22.28)
 of 2018-10-22 built on localhost
Windowing system distributor 'The Cygwin/X Project', version 11.0.12001000

Attachment: corrupted-data.gz
Description: Binary data

reply via email to

[Prev in Thread] Current Thread [Next in Thread]