<Sound Dev> [9] Review Request: 8135160 Endless Loop in RiffReader

Phil Race philip.race at oracle.com
Fri Sep 25 16:12:31 UTC 2015

> long ret = Math.min(stream.skip(remaining), remaining);

what is to stop stream.skip returning '-100' ?

should you not check for negative ?


On 09/24/2015 04:38 PM, Sergey Bylokhov wrote:
> Hello.
> Please review the fix for jdk9.
>     While working on some bugs in javasound, I found one issue which 
> can cause an endless loop for some specific audio file. The bug is 
> located in the com.sun.media.sound.RIFFReader.skipBytes() method, 
> which incorrectly assumes that Inputstrem.skip() method should return 
> -1 at the end of the stream. Note that the specification of the read() 
> method has this assumption.
> The current implementation of the skip method has a loop which stops 
> when the necessary amount of bytes are skipped or the -1 is returned.
> In the fix I change implementation of this loop:
>  - The check for the negative value is removed, because such checks 
> are not specified.
>  - The check for the zero is enhanced using read() method. This is 
> necessary, because the specification of the skip method mention that 
> the zero can be returned if EOF occurred or nothing was skipped for 
> some other reason and the user should try again.
>  - Note that the skip method can return more bytes than was requested 
> if EOF occurred(at least this part of spec is unclear???), the check 
> for this is also added(otherwise the avail variable can became negative).
> One new test was added, it was used as initial reproducer. One existed 
> test was updated.
> Bug: https://bugs.openjdk.java.net/browse/JDK-8135160
> Webrev can be found at: 
> http://cr.openjdk.java.net/~serb/8135160/webrev.00
> ps: Note that two review requests still active in the javasound:
> http://mail.openjdk.java.net/pipermail/sound-dev/2015-September/000330.html 
> http://mail.openjdk.java.net/pipermail/sound-dev/2015-September/000332.html 

More information about the sound-dev mailing list