[GitHub] [commons-geometry] darkma773r commented on pull request #194: GEOMETRY-142: PointMap and PointSet

2022-03-15 Thread GitBox


darkma773r commented on pull request #194:
URL: https://github.com/apache/commons-geometry/pull/194#issuecomment-1068662469


   Addressed comments and made changes based on recommendations on the dev 
mailing list.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-geometry] darkma773r commented on a change in pull request #194: GEOMETRY-142: PointMap and PointSet

2022-03-15 Thread GitBox


darkma773r commented on a change in pull request #194:
URL: https://github.com/apache/commons-geometry/pull/194#discussion_r827563187



##
File path: 
commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/PointMap3DImpl.java
##
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.geometry.euclidean;
+
+import java.util.List;
+
+import org.apache.commons.geometry.core.collection.PointMap;
+import org.apache.commons.geometry.core.internal.AbstractBucketPointMap;
+import org.apache.commons.geometry.euclidean.threed.Vector3D;
+import org.apache.commons.numbers.core.Precision;
+
+/** Internal {@link PointMap3D} implementation.
+ * @param  Map value type
+ */
+final class PointMap3DImpl
+extends AbstractBucketPointMap
+implements PointMap {
+
+/** Number of children per node. */
+private static final int NODE_CHILD_COUNT = 8;
+
+/** Max entries per node. This value was determined empirically was chosen 
to

Review comment:
   Fixed.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-geometry] darkma773r commented on a change in pull request #194: GEOMETRY-142: PointMap and PointSet

2022-03-15 Thread GitBox


darkma773r commented on a change in pull request #194:
URL: https://github.com/apache/commons-geometry/pull/194#discussion_r827563111



##
File path: 
commons-geometry-euclidean/src/main/java/org/apache/commons/geometry/euclidean/PointMap3DImpl.java
##
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.geometry.euclidean;
+
+import java.util.List;
+
+import org.apache.commons.geometry.core.collection.PointMap;
+import org.apache.commons.geometry.core.internal.AbstractBucketPointMap;
+import org.apache.commons.geometry.euclidean.threed.Vector3D;
+import org.apache.commons.numbers.core.Precision;
+
+/** Internal {@link PointMap3D} implementation.
+ * @param  Map value type
+ */
+final class PointMap3DImpl
+extends AbstractBucketPointMap
+implements PointMap {
+
+/** Number of children per node. */
+private static final int NODE_CHILD_COUNT = 8;
+
+/** Max entries per node. This value was determined empirically was chosen 
to
+ * provide a balance between having a small number of entries in each node 
when
+ * searching and having a large number of samples to provide a good split 
point
+ * during insertion.

Review comment:
   Good idea. Done.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-geometry] darkma773r commented on a change in pull request #194: GEOMETRY-142: PointMap and PointSet

2022-03-15 Thread GitBox


darkma773r commented on a change in pull request #194:
URL: https://github.com/apache/commons-geometry/pull/194#discussion_r827562722



##
File path: 
commons-geometry-examples/examples-jmh/src/main/java/org/apache/commons/geometry/examples/jmh/euclidean/pointmap/RebuildingKDTree.java
##
@@ -0,0 +1,259 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.geometry.examples.jmh.euclidean.pointmap;
+
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
+
+import org.apache.commons.geometry.euclidean.threed.Vector3D;
+import org.apache.commons.numbers.core.Precision.DoubleEquivalence;
+
+/** {@link KDTree} subclass that rebuilds the tree periodically in an
+ * attempt to restrict the overall height of the tree.
+ * @param  Value type
+ */
+public class RebuildingKDTree extends KDTree {
+
+/** Default rebuild maximum. */
+private static final int DEFAULT_REBUILD_MAX = 16;
+
+/** Maximum size of the tree before it is rebuilt. */
+private int rebuildMax = DEFAULT_REBUILD_MAX;
+
+/** Minimum size of the tree before it is rebuilt. */
+private int rebuildMin;
+
+/** Construct a new instance.
+ * @param precision precision context
+ */
+public RebuildingKDTree(final DoubleEquivalence precision) {
+super(precision);
+}
+
+/** {@inheritDoc} */
+@Override
+public V put(final Vector3D key, final V value) {
+final V result = super.put(key, value);
+
+if (size() >= rebuildMax) {
+rebuild();
+}
+
+return result;
+}
+
+/** {@inheritDoc} */
+@Override
+public V remove(final Object key) {
+final V result = super.remove(key);
+
+if (size() <= rebuildMin) {
+rebuild();
+}
+
+return result;
+}
+
+/**
+ * Rebuild the tree, attempting to reduce the tree depth.
+ */
+public void rebuild() {
+int n = size();
+if (n > 0) {
+// construct an array list containing all of the tree nodes
+final List> nodes = collectNodes();
+
+// rebuild recursively and set the new root
+final KDTreeNode newRoot = rebuildRecursive(nodes, 0, n, 0);
+
+setRoot(newRoot);
+}
+
+rebuildMax = Math.max(DEFAULT_REBUILD_MAX, 2 * n);
+rebuildMin = n / 2;
+}
+
+/** Get a list containing all nodes in the tree. The node connections are 
all cleared.
+ * @return list containing all nodes in the tree
+ */
+protected List> collectNodes() {
+final List> nodes = new ArrayList<>(size());
+collectNodesRecursive(getRoot(), nodes);
+
+return nodes;
+}
+
+/** Add nodes in the subtree rooted at {@code curr} to {@code nodes}. The 
node connection
+ * references are all cleared.
+ * @param curr subtree root node
+ * @param nodes node list
+ */
+protected void collectNodesRecursive(final KDTreeNode curr, final 
List> nodes) {
+if (curr != null) {
+collectNodesRecursive(curr.getLeft(), nodes);
+nodes.add(curr);
+collectNodesRecursive(curr.getRight(), nodes);
+
+curr.setParent(null);
+curr.setLeft(null);
+curr.setRight(null);
+}
+}
+
+/** Recursively rebuild the tree using the specified node sublist.
+ * @param nodes node list
+ * @param startIdx sub list start index (inclusive)
+ * @param endIdx sub list end index (exclusive)
+ * @param depth node depth
+ * @return the root of the subtree containing the nodes between {@code 
startIdx} and {@code endIdx}
+ */
+protected KDTreeNode rebuildRecursive(final List> nodes, 
final int startIdx, final int endIdx,
+final int depth) {
+final CutDimension cutDimension = getCutDimensionForDepth(depth);
+
+final KDTreeNode node;
+if ((endIdx - startIdx) < 2) {
+// only a single node here
+node = nodes.get(startIdx);
+} else {
+final int splitIdx = partition(nodes, startIdx, endIdx, 
cutDimension);
+
+node = nodes.get(splitIdx);
+
+if 

[jira] [Commented] (NUMBERS-52) Incomplete beta function I(x, a, b) is inaccurate for large values of a and/or b

2022-03-15 Thread Alex Herbert (Jira)


[ 
https://issues.apache.org/jira/browse/NUMBERS-52?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17507275#comment-17507275
 ] 

Alex Herbert commented on NUMBERS-52:
-

The regularised Beta functions were updated in [NUMBERS-181] with an 
improvement in accuracy. This requires re-evaluation to determine if it is now 
sufficient.

> Incomplete beta function I(x, a, b) is inaccurate for large values of a 
> and/or b
> 
>
> Key: NUMBERS-52
> URL: https://issues.apache.org/jira/browse/NUMBERS-52
> Project: Commons Numbers
>  Issue Type: Bug
>Reporter: Sebastien Brisard
>Priority: Major
>  Labels: gsoc2019, special-functions
>
> This was first reported in MATH-718. The result of the current implementation 
> of the incomplete beta function I(x, a, b) is inaccurate when a and/or b are 
> large-ish. 
> I've skimmed through [slatec|http://www.netlib.org/slatec/fnlib/betai.f], 
> GSL, 
> [Boost|http://www.boost.org/doc/libs/1_38_0/libs/math/doc/sf_and_dist/html/math_toolkit/special/sf_beta/ibeta_function.html]
>  as well as NR. At first sight, neither uses the same method to compute this 
> function. I think [TOMS-708|http://www.netlib.org/toms/708] is probably the 
> best option.
> _Issue moved from MATH project on January 27, 2018 (concerned implementation 
> was moved to module {{commons-numbers-gamma}} of "Commons Numbers")._



--
This message was sent by Atlassian Jira
(v8.20.1#820001)


[jira] [Resolved] (NUMBERS-181) Update the RegularizedBeta function using the Boost implementation

2022-03-15 Thread Alex Herbert (Jira)


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

Alex Herbert resolved NUMBERS-181.
--
Resolution: Implemented

> Update the RegularizedBeta function using the Boost implementation
> --
>
> Key: NUMBERS-181
> URL: https://issues.apache.org/jira/browse/NUMBERS-181
> Project: Commons Numbers
>  Issue Type: Improvement
>  Components: gamma
>Affects Versions: 1.1
>Reporter: Alex Herbert
>Priority: Major
> Fix For: 1.1
>
>
> The gamma functions were updated to use the Boost C++ implementation in 
> NUMBERS-174. This was done for the methods where accuracy was improved over 
> the existing implementation.
> Investigate porting the Boost C++ implementation of the beta function. This 
> may improve accuracy over the existing implementation.
> The implementation may solve the accuracy of the RegularizedBeta when a and b 
> are largeish (NUMBERS-52) and will solve the computation of the complement of 
> the RegularizedBeta function (NUMBERS-169).



--
This message was sent by Atlassian Jira
(v8.20.1#820001)


[jira] [Resolved] (RNG-170) nextBytes(byte[], int, int) to be consistent with JDK range checks for index out of bounds empty bytes

2022-03-15 Thread Alex Herbert (Jira)


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

Alex Herbert resolved RNG-170.
--
Resolution: Fixed

Fixed in commit:

c3c802117da90523ecc0dd1507d895ac9c3f5f54

Range checks now applied as per JDK 9 Objects.checkFromIndexSize.

> nextBytes(byte[], int, int) to be consistent with JDK range checks for index 
> out of bounds empty bytes
> --
>
> Key: RNG-170
> URL: https://issues.apache.org/jira/browse/RNG-170
> Project: Commons RNG
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.4
>Reporter: Alex Herbert
>Priority: Trivial
> Fix For: 1.5
>
>
> The implementation of nextBytes is inconsistent:
> {code:java}
> UniformRandomProvider rng = RandomSource.KISS.create();
> byte[] empty = {};
> // OK
> rng.nextBytes(empty);
> // Throws IndexOutOfBoundsException
> rng.nextBytes(empty, 0, empty.length);
> {code}
> This also throws:
> {code:java}
> byte[] bytes = new byte[10];
> // Throws IndexOutOfBoundsException
> rng.nextBytes(bytes, 0, -1);
> {code}
> The second exception is index out of bounds. This could be:
>  - illegal argument exception (negative length)
>  - index out of bounds
>  - ignore
> The case for ignoring negative length is this loop:
>  
> {code:java}
> for (int j = 0; j < len; j++) {
>     bytes[start + j]++;
> } {code}
> Will not throw for a negative length irrespective of the start index.
>  
> The nextBytes(byte[], int, int) method is not in the JDK generators so there 
> is no precedent for what to do for a negative length here. However 
> System.arraycopy uses the start+length arguments. This test:
> {code:java}
> @ParameterizedTest
> @CsvSource({
> // OK
> "10, 0, 10",
> "10, 5, 5",
> "10, 9, 1",
> "0, 0, 0",
> // Bad
> "10, 0, 11",
> "10, 10, 1",
> "10, 10, 2147483647",
> "10, 0, -1",
> "10, 5, -1",
> })
> void testNextBytesIndices(int size, int start, int len) {
> final SplitMix64 rng = new SplitMix64(123);
> final byte[] bytes = new byte[size];
> // Be consistent with System.arraycopy
> try {
> System.arraycopy(bytes, start, bytes, start, len);
> } catch (Exception ex) {
> // nextBytes should throw the same exception
> Assertions.assertThrows(ex.getClass(), () ->
> rng.nextBytes(bytes, start, len));
> return;
> }
> // OK
> rng.nextBytes(bytes, start, len);
> }
> {code}
> Shows the exception raised should be ArrayIndexOutOfBoundsException 
> (currently it is IndexOutOfBoundsException). It also shows that 
> System.arraycopy will allows zero length for an empty array with start=0.
> I suggest updating the method nextBytes(byte[], start, len) to throw 
> consistent exceptions matching System.arraycopy. This is a minimal change to 
> switch to ArrayIndexOutOfBoundException and to ignore zero length byte[] when 
> start=len=0.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)


[jira] [Commented] (RNG-170) nextBytes(byte[], int, int) to be consistent with JDK range checks for index out of bounds empty bytes

2022-03-15 Thread Alex Herbert (Jira)


[ 
https://issues.apache.org/jira/browse/RNG-170?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17507260#comment-17507260
 ] 

Alex Herbert commented on RNG-170:
--

Java 9 introduced:
{code:java}
Objects.checkFromIndexSize(int fromIndex, int size, int length);
{code}
See [Objects.checkFromIndexSize JDK 11 
javadoc|https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Objects.html#checkFromIndexSize(int,int,int)]

The behaviour of this method is the same as System.arraycopy but throws 
IndexOutOfBoundException, not ArrayIndexOutOfBoundException.

It will allow:
{noformat}
size start len
00 0
10   100{noformat}
The latter is an edge case that also previously threw for nextBytes. So this is 
two behaviour changes introduced by updating to be consistent with the JDK 
range checks, both when the length is 0.

 

> nextBytes(byte[], int, int) to be consistent with JDK range checks for index 
> out of bounds empty bytes
> --
>
> Key: RNG-170
> URL: https://issues.apache.org/jira/browse/RNG-170
> Project: Commons RNG
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.4
>Reporter: Alex Herbert
>Priority: Trivial
> Fix For: 1.5
>
>
> The implementation of nextBytes is inconsistent:
> {code:java}
> UniformRandomProvider rng = RandomSource.KISS.create();
> byte[] empty = {};
> // OK
> rng.nextBytes(empty);
> // Throws IndexOutOfBoundsException
> rng.nextBytes(empty, 0, empty.length);
> {code}
> This also throws:
> {code:java}
> byte[] bytes = new byte[10];
> // Throws IndexOutOfBoundsException
> rng.nextBytes(bytes, 0, -1);
> {code}
> The second exception is index out of bounds. This could be:
>  - illegal argument exception (negative length)
>  - index out of bounds
>  - ignore
> The case for ignoring negative length is this loop:
>  
> {code:java}
> for (int j = 0; j < len; j++) {
>     bytes[start + j]++;
> } {code}
> Will not throw for a negative length irrespective of the start index.
>  
> The nextBytes(byte[], int, int) method is not in the JDK generators so there 
> is no precedent for what to do for a negative length here. However 
> System.arraycopy uses the start+length arguments. This test:
> {code:java}
> @ParameterizedTest
> @CsvSource({
> // OK
> "10, 0, 10",
> "10, 5, 5",
> "10, 9, 1",
> "0, 0, 0",
> // Bad
> "10, 0, 11",
> "10, 10, 1",
> "10, 10, 2147483647",
> "10, 0, -1",
> "10, 5, -1",
> })
> void testNextBytesIndices(int size, int start, int len) {
> final SplitMix64 rng = new SplitMix64(123);
> final byte[] bytes = new byte[size];
> // Be consistent with System.arraycopy
> try {
> System.arraycopy(bytes, start, bytes, start, len);
> } catch (Exception ex) {
> // nextBytes should throw the same exception
> Assertions.assertThrows(ex.getClass(), () ->
> rng.nextBytes(bytes, start, len));
> return;
> }
> // OK
> rng.nextBytes(bytes, start, len);
> }
> {code}
> Shows the exception raised should be ArrayIndexOutOfBoundsException 
> (currently it is IndexOutOfBoundsException). It also shows that 
> System.arraycopy will allows zero length for an empty array with start=0.
> I suggest updating the method nextBytes(byte[], start, len) to throw 
> consistent exceptions matching System.arraycopy. This is a minimal change to 
> switch to ArrayIndexOutOfBoundException and to ignore zero length byte[] when 
> start=len=0.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)


[jira] [Updated] (RNG-170) nextBytes(byte[], int, int) to be consistent with JDK range checks for index out of bounds empty bytes

2022-03-15 Thread Alex Herbert (Jira)


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

Alex Herbert updated RNG-170:
-
Summary: nextBytes(byte[], int, int) to be consistent with JDK range checks 
for index out of bounds empty bytes  (was: nextBytes(byte[], int, int) throws 
index out of bounds for empty bytes)

> nextBytes(byte[], int, int) to be consistent with JDK range checks for index 
> out of bounds empty bytes
> --
>
> Key: RNG-170
> URL: https://issues.apache.org/jira/browse/RNG-170
> Project: Commons RNG
>  Issue Type: Bug
>  Components: core
>Affects Versions: 1.4
>Reporter: Alex Herbert
>Priority: Trivial
> Fix For: 1.5
>
>
> The implementation of nextBytes is inconsistent:
> {code:java}
> UniformRandomProvider rng = RandomSource.KISS.create();
> byte[] empty = {};
> // OK
> rng.nextBytes(empty);
> // Throws IndexOutOfBoundsException
> rng.nextBytes(empty, 0, empty.length);
> {code}
> This also throws:
> {code:java}
> byte[] bytes = new byte[10];
> // Throws IndexOutOfBoundsException
> rng.nextBytes(bytes, 0, -1);
> {code}
> The second exception is index out of bounds. This could be:
>  - illegal argument exception (negative length)
>  - index out of bounds
>  - ignore
> The case for ignoring negative length is this loop:
>  
> {code:java}
> for (int j = 0; j < len; j++) {
>     bytes[start + j]++;
> } {code}
> Will not throw for a negative length irrespective of the start index.
>  
> The nextBytes(byte[], int, int) method is not in the JDK generators so there 
> is no precedent for what to do for a negative length here. However 
> System.arraycopy uses the start+length arguments. This test:
> {code:java}
> @ParameterizedTest
> @CsvSource({
> // OK
> "10, 0, 10",
> "10, 5, 5",
> "10, 9, 1",
> "0, 0, 0",
> // Bad
> "10, 0, 11",
> "10, 10, 1",
> "10, 10, 2147483647",
> "10, 0, -1",
> "10, 5, -1",
> })
> void testNextBytesIndices(int size, int start, int len) {
> final SplitMix64 rng = new SplitMix64(123);
> final byte[] bytes = new byte[size];
> // Be consistent with System.arraycopy
> try {
> System.arraycopy(bytes, start, bytes, start, len);
> } catch (Exception ex) {
> // nextBytes should throw the same exception
> Assertions.assertThrows(ex.getClass(), () ->
> rng.nextBytes(bytes, start, len));
> return;
> }
> // OK
> rng.nextBytes(bytes, start, len);
> }
> {code}
> Shows the exception raised should be ArrayIndexOutOfBoundsException 
> (currently it is IndexOutOfBoundsException). It also shows that 
> System.arraycopy will allows zero length for an empty array with start=0.
> I suggest updating the method nextBytes(byte[], start, len) to throw 
> consistent exceptions matching System.arraycopy. This is a minimal change to 
> switch to ArrayIndexOutOfBoundException and to ignore zero length byte[] when 
> start=len=0.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)


[jira] [Created] (RNG-170) nextBytes(byte[], int, int) throws index out of bounds for empty bytes

2022-03-15 Thread Alex Herbert (Jira)
Alex Herbert created RNG-170:


 Summary: nextBytes(byte[], int, int) throws index out of bounds 
for empty bytes
 Key: RNG-170
 URL: https://issues.apache.org/jira/browse/RNG-170
 Project: Commons RNG
  Issue Type: Bug
  Components: core
Affects Versions: 1.4
Reporter: Alex Herbert
 Fix For: 1.5


The implementation of nextBytes is inconsistent:
{code:java}
UniformRandomProvider rng = RandomSource.KISS.create();
byte[] empty = {};
// OK
rng.nextBytes(empty);
// Throws IndexOutOfBoundsException
rng.nextBytes(empty, 0, empty.length);
{code}
This also throws:
{code:java}
byte[] bytes = new byte[10];
// Throws IndexOutOfBoundsException
rng.nextBytes(bytes, 0, -1);
{code}
The second exception is index out of bounds. This could be:
 - illegal argument exception (negative length)
 - index out of bounds
 - ignore

The case for ignoring negative length is this loop:

 
{code:java}
for (int j = 0; j < len; j++) {
    bytes[start + j]++;
} {code}
Will not throw for a negative length irrespective of the start index.

 

The nextBytes(byte[], int, int) method is not in the JDK generators so there is 
no precedent for what to do for a negative length here. However 
System.arraycopy uses the start+length arguments. This test:
{code:java}
@ParameterizedTest
@CsvSource({
// OK
"10, 0, 10",
"10, 5, 5",
"10, 9, 1",
"0, 0, 0",
// Bad
"10, 0, 11",
"10, 10, 1",
"10, 10, 2147483647",
"10, 0, -1",
"10, 5, -1",
})
void testNextBytesIndices(int size, int start, int len) {
final SplitMix64 rng = new SplitMix64(123);
final byte[] bytes = new byte[size];
// Be consistent with System.arraycopy
try {
System.arraycopy(bytes, start, bytes, start, len);
} catch (Exception ex) {
// nextBytes should throw the same exception
Assertions.assertThrows(ex.getClass(), () ->
rng.nextBytes(bytes, start, len));
return;
}
// OK
rng.nextBytes(bytes, start, len);
}
{code}
Shows the exception raised should be ArrayIndexOutOfBoundsException (currently 
it is IndexOutOfBoundsException). It also shows that System.arraycopy will 
allows zero length for an empty array with start=0.

I suggest updating the method nextBytes(byte[], start, len) to throw consistent 
exceptions matching System.arraycopy. This is a minimal change to switch to 
ArrayIndexOutOfBoundException and to ignore zero length byte[] when start=len=0.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)


[GitHub] [commons-bcel] markro49 opened a new pull request #117: Verifier

2022-03-15 Thread GitBox


markro49 opened a new pull request #117:
URL: https://github.com/apache/commons-bcel/pull/117


   This fixes a number of BCEL issues related to running the Verifier on a bad 
or malformed .class file and having it die with an exception rather than report 
a verification failure.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[jira] [Work logged] (COMPRESS-612) Support atime/ctime and higher time precision for TAR

2022-03-15 Thread ASF GitHub Bot (Jira)


 [ 
https://issues.apache.org/jira/browse/COMPRESS-612?focusedWorklogId=741727=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-741727
 ]

ASF GitHub Bot logged work on COMPRESS-612:
---

Author: ASF GitHub Bot
Created on: 15/Mar/22 16:23
Start Date: 15/Mar/22 16:23
Worklog Time Spent: 10m 
  Work Description: andrebrait commented on pull request #254:
URL: https://github.com/apache/commons-compress/pull/254#issuecomment-1068187687


   @PeterAlfredLee Thanks, I checked it and I found the reason. 
   It's because I removed this:
   
   ```java
   /** Convert millis to seconds */
   public static final int MILLIS_PER_SECOND = 1000;
   ```
   
   I put it back.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Issue Time Tracking
---

Worklog Id: (was: 741727)
Time Spent: 40m  (was: 0.5h)

> Support atime/ctime and higher time precision for TAR
> -
>
> Key: COMPRESS-612
> URL: https://issues.apache.org/jira/browse/COMPRESS-612
> Project: Commons Compress
>  Issue Type: Improvement
>  Components: Archivers
>Affects Versions: 1.21
>Reporter: Andre Brait
>Priority: Major
>  Labels: tar
>  Time Spent: 40m
>  Remaining Estimate: 0h
>
> This is a proposal for some code I have already worked on.
> h3. Context
> I'm coding a tool that requires extracting/compressing files. I noticed the 
> following shortcomings:
>  - -File size is limited to 8GB. This limitation was lifted as of 
> POSIX.1-2001 and it also does not exist on GNU and old GNU formats. Bigger 
> files are fully supported by some TAR archiving tools such as GNU TAR. 
> Reference: 
> [https://lists.gnu.org/archive/html/help-tar/2015-04/msg1.html]-
>  -- I think I was actually wrong here in that current implementation should 
> support files >8GB if using BIGNUMBER_POSIX.
>  - Only modification date is available as a time type.
>  - Maximum granularity is seconds, even though the PAX header contains 100ns 
> intervals
>  - Other time-related PAX headers are considered extra headers (ctime and 
> atime)
> My proposal is as follows:
>  - Migrate time fields from java.util.Date to java.nio.file.attribute.FileTime
>  - Keep backwards compatibility through getter/setter methods and add new 
> ones for FileTime
>  - Parse times in with a maximal granularity of 100ns intervals from PAX 
> headers
>  - Read/write ctime and atime and add corresponding fields
>  - Write times to PAX headers using a maximum granularity of 100ns intervals 
> when in BIGNUMBER_POSIX mode.
>  - -Add a new mode BIGNUMBER_POSIX_2001 for writing big numbers, allowing for 
> the bigger size, mtime, ctime and atime to be written-
>  - -Lift the 8GB limit when using BIGNUMBER_POSIX_2001-
> I already have some code for that in 
> https://github.com/andrebrait/commons-compress/tree/COMPRESS-612
> Since compatibility with Android now requires API level 26 and that includes 
> FileTime, I think we can do that here as well.
> This will bring tar in line with Zip in this regard.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)


[GitHub] [commons-compress] andrebrait commented on pull request #254: COMPRESS-612: improve TAR support for file times

2022-03-15 Thread GitBox


andrebrait commented on pull request #254:
URL: https://github.com/apache/commons-compress/pull/254#issuecomment-1068187687


   @PeterAlfredLee Thanks, I checked it and I found the reason. 
   It's because I removed this:
   
   ```java
   /** Convert millis to seconds */
   public static final int MILLIS_PER_SECOND = 1000;
   ```
   
   I put it back.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[jira] [Comment Edited] (VFS-817) DeadLock on SftpFileObject

2022-03-15 Thread Mykhailo (Jira)


[ 
https://issues.apache.org/jira/browse/VFS-817?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17506868#comment-17506868
 ] 

Mykhailo edited comment on VFS-817 at 3/15/22, 1:25 PM:


Not sure what should i do, please provide more detailed instructions,

Attached core files contains deadlock information and all threads dump with 
call stacks

 

1LKDEADLOCK    Deadlock detected !!!
NULL           -
NULL
2LKDEADLOCKTHR  Thread 
"pool-flow.seda.scc-route-thread-7,SA=PATHW_sftp,TR=7:f89c076e-88f3-45ba-8e7a-65ade0985e50"
 (0x31CA1700)
3LKDEADLOCKWTR    is waiting for:
4LKDEADLOCKMON      sys_mon_t:0x01002DE42530 infl_mon_t: 0x01002DE42580:
4LKDEADLOCKOBJ      
org/apache/commons/vfs2/provider/sftp/SftpFileObject@0xEF515468
3LKDEADLOCKOWN    which is owned by:
2LKDEADLOCKTHR  Thread 
"pool-flow.seda.scc-route-thread-1,SA=PATHW_sftp,TR=8:83e21c98-1a45-45f3-9766-893868cac245"
 (0x31B3DA00)
3LKDEADLOCKWTR    which is waiting for:
4LKDEADLOCKMON      sys_mon_t:0x01002A397F18 infl_mon_t: 0x01002A397F68:
4LKDEADLOCKOBJ      
org/apache/commons/vfs2/provider/sftp/SftpFileSystem@0xB28E18A0
3LKDEADLOCKOWN    which is owned by:
2LKDEADLOCKTHR  Thread 
"pool-flow.seda.scc-route-thread-7,SA=PATHW_sftp,TR=7:f89c076e-88f3-45ba-8e7a-65ade0985e50"
 (0x31CA1700)

 

Java callstack  for 
"pool-flow.seda.scc-route-thread-7,SA=PATHW_sftp,TR=7:f89c076e-88f3-45ba-8e7a-65ade0985e50"
 :
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileObject.doDetach(SftpFileObject.java:140)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileObject@0xEF515468, entry 
count: 1)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileObject.detach(AbstractFileObject.java:484)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileSystem@0xB28E18A0, entry 
count: 2)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileObject.refresh(AbstractFileObject.java:1790)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileSystem.resolveFile(AbstractFileSystem.java:344)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileSystem@0xB28E18A0, entry 
count: 1)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileSystem.resolveFile(AbstractFileSystem.java:307)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:75)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:55)
4XESTACKTRACE                at 
org/apache/commons/vfs2/impl/DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:788)
4XESTACKTRACE                at 
org/apache/commons/vfs2/impl/DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:835)
4XESTACKTRACE                at 
com/scc/smx/components/file/vfs/FileProxyFactory.createVFSFileObjectFileProxy(FileProxyFactory.java:190)

Java callstack for 
"pool-flow.seda.scc-route-thread-1,SA=PATHW_sftp,TR=8:83e21c98-1a45-45f3-9766-893868cac245":
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileSystem.putChannel(SftpFileSystem.java:350)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileObject.statSelf(SftpFileObject.java:527)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileObject@0xEF515468, entry 
count: 2)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileObject.getPermissions(SftpFileObject.java:457)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileObject@0xEF515468, entry 
count: 1)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileObject.doIsWriteable(SftpFileObject.java:262)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileObject.isWriteable(AbstractFileObject.java:1625)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileObject.moveTo(AbstractFileObject.java:1677)
4XESTACKTRACE                at 
com/scc/smx/components/file/vfs/VFSFileObjectFileProxy.moveTo(VFSFileObjectFileProxy.java:298)

 

as for me problem may be caused by added 11 synchronized`s on methods to work 
with 'private SftpATTRS attrs' in SftpFileObject.java, but i`m not sure


was (Author: JIRAUSER286567):
Not sure what should i do, please provide some more detailed instructions,

Attached cores files contains deadlock information and all threads dump with 
call stacks

 

1LKDEADLOCK    Deadlock detected !!!
NULL           -
NULL
2LKDEADLOCKTHR  Thread 

[GitHub] [commons-collections] garydgregory closed pull request #290: Bump checkstyle from 9.3 to 10.0

2022-03-15 Thread GitBox


garydgregory closed pull request #290:
URL: https://github.com/apache/commons-collections/pull/290


   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-collections] dependabot[bot] commented on pull request #290: Bump checkstyle from 9.3 to 10.0

2022-03-15 Thread GitBox


dependabot[bot] commented on pull request #290:
URL: 
https://github.com/apache/commons-collections/pull/290#issuecomment-1067950239


   OK, I won't notify you again about this release, but will get in touch when 
a new version is available. If you'd rather skip all updates until the next 
major or minor version, let me know by commenting `@dependabot ignore this 
major version` or `@dependabot ignore this minor version`. You can also ignore 
all major, minor, or patch releases for a dependency by adding an [`ignore` 
condition](https://docs.github.com/en/code-security/supply-chain-security/configuration-options-for-dependency-updates#ignore)
 with the desired `update_types` to your config file.
   
   If you change your mind, just re-open this PR and I'll resolve any conflicts 
on it.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-collections] garydgregory commented on pull request #290: Bump checkstyle from 9.3 to 10.0

2022-03-15 Thread GitBox


garydgregory commented on pull request #290:
URL: 
https://github.com/apache/commons-collections/pull/290#issuecomment-1067950202


   Closing: Requires Java 11.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-scxml] garydgregory commented on pull request #35: Bump jackson-databind from 2.9.3 to 2.13.2

2022-03-15 Thread GitBox


garydgregory commented on pull request #35:
URL: https://github.com/apache/commons-scxml/pull/35#issuecomment-1067947675


   @dependabot rebase


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-scxml] garydgregory commented on pull request #41: Bump jaxb-impl from 2.3.6 to 3.0.2

2022-03-15 Thread GitBox


garydgregory commented on pull request #41:
URL: https://github.com/apache/commons-scxml/pull/41#issuecomment-1067947300


   @dependabot rebase


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-scxml] garydgregory merged pull request #40: Bump junit-jupiter-engine from 5.4.2 to 5.8.2

2022-03-15 Thread GitBox


garydgregory merged pull request #40:
URL: https://github.com/apache/commons-scxml/pull/40


   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-scxml] garydgregory merged pull request #39: Bump jackson-core from 2.9.3 to 2.13.2

2022-03-15 Thread GitBox


garydgregory merged pull request #39:
URL: https://github.com/apache/commons-scxml/pull/39


   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[GitHub] [commons-scxml] garydgregory merged pull request #42: Bump Saxon-HE from 9.6.0-1 to 11.2

2022-03-15 Thread GitBox


garydgregory merged pull request #42:
URL: https://github.com/apache/commons-scxml/pull/42


   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@commons.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org




[jira] [Created] (RNG-169) Update byte[] array conversion use optimum memory allocation

2022-03-15 Thread Alex Herbert (Jira)
Alex Herbert created RNG-169:


 Summary: Update byte[] array conversion use optimum memory 
allocation
 Key: RNG-169
 URL: https://issues.apache.org/jira/browse/RNG-169
 Project: Commons RNG
  Issue Type: Improvement
  Components: simple
Affects Versions: 1.4
Reporter: Alex Herbert
 Fix For: 1.5


The seed conversion routines in ByteArray2LongArray and ByteArray2IntArray can 
be optimised for memory usage.

The converters can be updated to implement Seed2ArrayConverter. This allows the 
length of the output seed to be constructed to the correct length. This will 
avoid converting part of the byte[] seed that is not used.

In addition the input seed is expanded if it is not modulus 8 or 4 respectively 
using Arrays.copyOf. This will zero fill the end of the seed. The array can 
then be converted by the NumberFactory without an exception.

These routines should be updated to use the same method as NumberFactory to 
fill in a long[] and then add any trailing bytes to the final long.

This avoids any array copy when using arbitrary seed lengths, e.g. 
SecureRandom.getSeed(13).




--
This message was sent by Atlassian Jira
(v8.20.1#820001)


[jira] [Commented] (VFS-817) DeadLock on SftpFileObject

2022-03-15 Thread Mykhailo (Jira)


[ 
https://issues.apache.org/jira/browse/VFS-817?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=17506868#comment-17506868
 ] 

Mykhailo commented on VFS-817:
--

Not sure what should i do, please provide some more detailed instructions,

Attached cores files contains deadlock information and all threads dump with 
call stacks

 

1LKDEADLOCK    Deadlock detected !!!
NULL           -
NULL
2LKDEADLOCKTHR  Thread 
"pool-flow.seda.scc-route-thread-7,SA=PATHW_sftp,TR=7:f89c076e-88f3-45ba-8e7a-65ade0985e50"
 (0x31CA1700)
3LKDEADLOCKWTR    is waiting for:
4LKDEADLOCKMON      sys_mon_t:0x01002DE42530 infl_mon_t: 0x01002DE42580:
4LKDEADLOCKOBJ      
org/apache/commons/vfs2/provider/sftp/SftpFileObject@0xEF515468
3LKDEADLOCKOWN    which is owned by:
2LKDEADLOCKTHR  Thread 
"pool-flow.seda.scc-route-thread-1,SA=PATHW_sftp,TR=8:83e21c98-1a45-45f3-9766-893868cac245"
 (0x31B3DA00)
3LKDEADLOCKWTR    which is waiting for:
4LKDEADLOCKMON      sys_mon_t:0x01002A397F18 infl_mon_t: 0x01002A397F68:
4LKDEADLOCKOBJ      
org/apache/commons/vfs2/provider/sftp/SftpFileSystem@0xB28E18A0
3LKDEADLOCKOWN    which is owned by:
2LKDEADLOCKTHR  Thread 
"pool-flow.seda.scc-route-thread-7,SA=PATHW_sftp,TR=7:f89c076e-88f3-45ba-8e7a-65ade0985e50"
 (0x31CA1700)

 

Java callstack  for 
"pool-flow.seda.scc-route-thread-7,SA=PATHW_sftp,TR=7:f89c076e-88f3-45ba-8e7a-65ade0985e50"
 :
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileObject.doDetach(SftpFileObject.java:140)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileObject@0xEF515468, entry 
count: 1)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileObject.detach(AbstractFileObject.java:484)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileSystem@0xB28E18A0, entry 
count: 2)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileObject.refresh(AbstractFileObject.java:1790)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileSystem.resolveFile(AbstractFileSystem.java:344)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileSystem@0xB28E18A0, entry 
count: 1)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileSystem.resolveFile(AbstractFileSystem.java:307)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:75)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractOriginatingFileProvider.findFile(AbstractOriginatingFileProvider.java:55)
4XESTACKTRACE                at 
org/apache/commons/vfs2/impl/DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:788)
4XESTACKTRACE                at 
org/apache/commons/vfs2/impl/DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:835)
4XESTACKTRACE                at 
com/scc/smx/components/file/vfs/FileProxyFactory.createVFSFileObjectFileProxy(FileProxyFactory.java:190)

Java callstack for 
"pool-flow.seda.scc-route-thread-1,SA=PATHW_sftp,TR=8:83e21c98-1a45-45f3-9766-893868cac245":
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileSystem.putChannel(SftpFileSystem.java:350)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileObject.statSelf(SftpFileObject.java:527)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileObject@0xEF515468, entry 
count: 2)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileObject.getPermissions(SftpFileObject.java:457)
5XESTACKTRACE                   (entered lock: 
org/apache/commons/vfs2/provider/sftp/SftpFileObject@0xEF515468, entry 
count: 1)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/sftp/SftpFileObject.doIsWriteable(SftpFileObject.java:262)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileObject.isWriteable(AbstractFileObject.java:1625)
4XESTACKTRACE                at 
org/apache/commons/vfs2/provider/AbstractFileObject.moveTo(AbstractFileObject.java:1677)
4XESTACKTRACE                at 
com/scc/smx/components/file/vfs/VFSFileObjectFileProxy.moveTo(VFSFileObjectFileProxy.java:298)

 

as for me problem may be caused by added 11 synchronized`s on methods to work 
with 'private SftpATTRS attrs' in SftpFileObject.java, but i`m not sure

> DeadLock on SftpFileObject
> --
>
> Key: VFS-817
> URL: https://issues.apache.org/jira/browse/VFS-817
> Project: Commons VFS
>  Issue Type: Bug
>Affects Versions: 2.9.0
>Reporter: Mykhailo
>Priority: Major
> Attachments: cores.zip
>
>
>