You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Luís Filipe Nassif (Jira)" <ji...@apache.org> on 2022/04/19 13:42:00 UTC

[jira] [Commented] (COMPRESS-618) Make ZipFile thread safe

    [ https://issues.apache.org/jira/browse/COMPRESS-618?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17524315#comment-17524315 ] 

Luís Filipe Nassif commented on COMPRESS-618:
---------------------------------------------

Please also check this: [https://github.com/sepinf-inc/IPED/issues/1068]

 

Synchronization on ZipFile.getInputStream(ze) only works with splitted archives and ignoreLocalFileHeader == true if the ZipSplitReadOnlySeekableByteChannel passed to constructor is used as lock, otherwise reading the returned input streams concurrently with other calls to getInputStream() results in concurrency issues.

> Make ZipFile thread safe
> ------------------------
>
>                 Key: COMPRESS-618
>                 URL: https://issues.apache.org/jira/browse/COMPRESS-618
>             Project: Commons Compress
>          Issue Type: Improvement
>          Components: Archivers
>    Affects Versions: 1.21
>            Reporter: Luís Filipe Nassif
>            Priority: Major
>
> Sorry if another issue already exists for this, I couldn't find one. When I enable the ignoreLocalFileHeader constructor flag, I started to get BufferOverflowException/BufferUnderFlowException while calling ZipFile.getInputStream(ZipArchiveEntry). Looking at the code, there is some local instances of byte[] and ByteBuffer reused by some private methods that should be the cause of those exceptions. Everything seems fine if ignoreLocalFileHeader is false, but I need to open very large zip files as fast as possible. If I synchronize on ZipFile.getInputStream(ze), it seems to workaround. Actually, I don't know if ZipFile was designed to be thread safe, but it would be nice to be. I also saw some synchronization code in BoundedSeekableByteChannelInputStream class, so not sure if this issue is an enhancement or bug report...



--
This message was sent by Atlassian Jira
(v8.20.7#820007)