Suspicious 'completed' variable in ResponseContent.UnknownLengthBodyParser#accept

Daniel Fuchs daniel.fuchs at oracle.com
Wed Aug 18 09:55:17 UTC 2021


Hi Andrey,

Thanks for the notice. I believe the variable is not needed,
it's probably a copy-paste error. You will see that such a
variable is also declared in the FixedLengthBodyParser where
it's actually used.

The UnknownLenghtParser will parse the bytes until the
connection is closed (or an exception occurs) - so
`completed` is not really needed there.

best regards,

-- daniel

On 18/08/2021 10:38, Andrey Turbanov wrote:
> Hello
> 
> During investigation of results of IDEA inspections I found suspicious
> code in a method
> 'jdk.internal.net.http.ResponseContent.UnknownLengthBodyParser#accept'
> https://github.com/openjdk/jdk/blob/master/src/java.net.http/share/classes/jdk/internal/net/http/ResponseContent.java#L492
> 
> boolean completed = false;
> try {
>      if (debug.on())
>          debug.log("Parser got %d bytes ", b.remaining());
> 
>      if (b.hasRemaining()) {
>          // only reduce demand if we actually push something.
>          // we would not have come here if there was no
>          // demand.
>          boolean hasDemand = sub.demand().tryDecrement();
>          assert hasDemand;
>          breceived += b.remaining();
>          pusher.onNext(List.of(b.asReadOnlyBuffer()));
>      }
> } catch (Throwable t) {
>      if (debug.on()) debug.log("Unexpected exception", t);
>      closedExceptionally = t;
>      if (!completed) {
>          onComplete.accept(t);
>      }
> }
> 
> 
> Variable 'completed' has an initial value 'false' and never assigned again.
> Then it's checked in the 'catch' section.
> It seems it should be set to 'true' somewhere.
> 
> 
> Andrey Turbanov
> 



More information about the net-dev mailing list