mirror of
https://github.com/xroche/httrack.git
synced 2026-06-29 21:45:24 +03:00
The request Accept-Encoding offered only gzip even though the response parser already recognized deflate/x-deflate. But the actual decode path (hts_zunpack) used zlib's gzread, which only inflates gzip and copies any deflate body through verbatim, so a deflate response would have been written out still compressed. Advertising deflate without fixing that would corrupt files. Rewrite hts_zunpack to inflate via inflateInit2 with format detection: gzip and zlib (RFC1950) auto-detect with +32 windowBits, everything else is treated as raw deflate (RFC1951). Then add deflate to the advertised list through a small hts_acceptencoding() helper shared with the test. A new -#test=acceptencoding self-test asserts the advertised header carries both gzip and deflate, and round-trips gzip, zlib and raw-deflate bodies through hts_zunpack on disk. Both halves fail on the old binary. Brotli is intentionally out of scope (new dependency, larger change). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Signed-off-by: Xavier Roche <roche@httrack.com>
12 lines
256 B
Bash
Executable File
12 lines
256 B
Bash
Executable File
#!/bin/bash
|
|
#
|
|
|
|
set -euo pipefail
|
|
|
|
# Accept-Encoding (#450): advertise gzip+deflate; decode gzip/zlib/raw-deflate.
|
|
dir=$(mktemp -d)
|
|
trap 'rm -rf "$dir"' EXIT
|
|
|
|
httrack -O /dev/null -#test=acceptencoding "$dir" run |
|
|
grep -q "acceptencoding self-test OK"
|