[ 
https://issues.apache.org/jira/browse/IO-537?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gary Gregory resolved IO-537.
-----------------------------
       Resolution: Fixed
    Fix Version/s: 2.6

[~borowis],

Thank you for your report.

Fixed with commit d4f28d7ff397386b208823c577180938e15769d3.

Please verify and close.

Gary


> BOMInputStream shouldn't sort array of BOMs in-place
> ----------------------------------------------------
>
>                 Key: IO-537
>                 URL: https://issues.apache.org/jira/browse/IO-537
>             Project: Commons IO
>          Issue Type: Improvement
>          Components: Streams/Writers
>    Affects Versions: 2.4, 2.5
>         Environment: OS: Ubuntu 16.04
> java version "1.7.0_80"
> Java(TM) SE Runtime Environment (build 1.7.0_80-b15)
> Java HotSpot(TM) 64-Bit Server VM (build 24.80-b11, mixed mode)
>            Reporter: Borys Zibrov
>              Labels: BOMInputStream
>             Fix For: 2.6
>
>
> BOMInputStream constructor code sorts array of BOMs to distinguish between 
> UTF-32LE and UTF-16LE:
> {code}
>     public BOMInputStream(InputStream delegate, boolean include, 
> ByteOrderMark... boms) {
>         super(delegate);
>         if (boms == null || boms.length == 0) {
>             throw new IllegalArgumentException("No BOMs specified");
>         }
>         this.include = include;
>         // Sort the BOMs to match the longest BOM first because some BOMs 
> have the same starting two bytes.
>         Arrays.sort(boms, ByteOrderMarkLengthComparator);
>         this.boms = Arrays.asList(boms);
>     }
> {code}
> The problem is the array is sorted in-place so that's 1) not expected by the 
> caller 2) makes code not safe, if array is shared between threads and all 
> create BOMInputStreams with single array of BOMs results are unpredictable.
> Instead a copy of the input array should be made and then sorted.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to