Skip to content

Conversation

@tchebb
Copy link
Contributor

@tchebb tchebb commented Sep 4, 2025

Content-Length holds the number of bytes in an HTTP response after encoding and compression. Our compress_response() function breaks that: when the response it's compressing already includes a Content-Length header, it may shorten the body but leave the header unchanged.

I noticed this because of #465, since the textual error message proxied from Reddit gets compressed but already has Content-Length. The issue is masked in normal operation because we don't compress the binary image data that Reddit is supposed to return. In debug builds, hyper catches the issue and panics, but in release builds we return a nonconformant HTTP response.

Fix the issue by removing the header if we choose to compress, letting hyper compute the new value for us.

Content-Length holds the number of bytes in an HTTP response after
encoding and compression. Our compress_response() function breaks that:
when the response it's compressing already includes a Content-Length
header, it may shorten the body but leave the header unchanged.

I noticed this because of redlib-org#465, since the textual error message proxied
from Reddit gets compressed but already has Content-Length. The issue is
masked in normal operation because we don't compress the binary image
data that Reddit is supposed to return. In debug builds, hyper catches
the issue[1] and panics, but in release builds we return a nonconformant
HTTP response.

Fix the issue by removing the header if we choose to compress, letting
hyper compute the new value for us.

[1] https://github.com/hyperium/hyper/blob/v0.14.32/src/proto/h1/role.rs#L708-L725
@sigaloid
Copy link
Member

sigaloid commented Sep 9, 2025

Thanks for the PR! I thought Hyper would recompute that regardless but alas it's low level enough to take me at my word 😅

@sigaloid sigaloid merged commit d510e1c into redlib-org:main Sep 9, 2025
1 of 3 checks passed
@tchebb tchebb deleted the compress-content-length branch September 9, 2025 18:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants