[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) |
Hi,
Whereas `gzip -d' does, zlib-decompress-region doesn't decompress
corrupted data of a certain kind. For instance, visiting
https://www.gutenberg.org/no-such-page-exists
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)
(erase-buffer)
(set-buffer-multibyte nil)
(insert-file-contents "/TEMP/corrupted-data.gz")
(sit-for 1)
(prog1
(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 @@
(widen)
(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
corrupted-data.gz
Description: Binary data
- bug#33133: 26.1.50; zlib-decompress-region too rigid,
Katsumi Yamaoka <=