On Wed, 26 Jun 2024 14:35:57 GMT, Daniel Jeliński <djelin...@openjdk.org> wrote:

> Currently HttpUrlConnection accepts truncated responses: if the server sends 
> a `Content-Length` header, and then closes the connection before transferring 
> all promised bytes, the input stream reports a clean EOF.
> 
> In this PR I modify the MeteredStream class to throw an IOException when it 
> detects EOF before receiving all promised response bytes. MeteredStream (or 
> its subclass KeepAliveStream) is used when the response contains a 
> content-length header.
> 
> The included test fails without the change, passes with it.
> The same exception message and type is reported when a chunked response 
> (`Transfer-Encoding: chunked`) is truncated.
> Unknown length responses that are terminated by EOF continue to work.
> 
> 2 tests depended on the old behavior and had to be adjusted. The remaining 
> tier 1-3 tests continue to pass.

src/java.base/share/classes/sun/net/www/MeteredStream.java line 58:

> 56:         if (n == -1) {
> 57:             if (expected > count) {
> 58:                 throw new IOException("Premature EOF");

Hello Daniel, should we instead throw `java.io.EOFException` which is much more 
precise than a generic `IOException`? `EOFException` states:


 * Signals that an end of file or end of stream has been reached
 * unexpectedly during input.

which I think accurately depicts what's happening here.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/19909#discussion_r1656418442

Reply via email to