RFR: 8282648: Problems due to conflicting specification of Inflater::inflate(..) and InflaterInputStream::read(..) [v4]
Volker Simonis
simonis at openjdk.java.net
Mon Apr 11 10:43:31 UTC 2022
On Fri, 8 Apr 2022 13:21:06 GMT, Jaikiran Pai <jpai at openjdk.org> wrote:
>> Volker Simonis has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Added API-refinement to GZIPInputStream::read()/ZipInputStream::read() and an Implementation note to ZipFile::getInputStream()
>
> src/java.base/share/classes/java/util/zip/ZipInputStream.java line 173:
>
>> 171: * bytes are read and {@code 0} is returned.
>> 172: * <p>
>> 173: * If <i>n</i> denotes the returned number of inflated bytes then {@code b[off]}
>
> I think this might need a slightly different wording since in this case of `ZipInputStream#read(...)`, the entry's compression method decides whether or not an inflater will be used to return inflated bytes.
>
> So maybe we should just remove the reference to "inflated bytes" and instead say:
>
> * If <i>n</i> denotes the return value, then {@code b[off]} through {@code b[off+}<i>n</i>{@code -1]}
> * will contain the data that has been read. The elements {@code b[off+}<i>n</i>{@code ]} through
> * {@code b[off+}<i>len</i>{@code -1]} are undefined and the implementation may update them during this read
> * operation. If the return value is -1 or an exception is thrown the whole content of {@code b} is undefined.
Thanks for spotting this. As the restriction only applies to compressed entries, I've simply prefixed the text with "*If the current entry is compressed and..*"
-------------
PR: https://git.openjdk.java.net/jdk/pull/7986
More information about the core-libs-dev
mailing list