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

Knut Anders Hatlen commented on DERBY-6196:
-------------------------------------------

This is the code that causes the exception:

                    // Replace a random value from the sample with the new value
                    int keyToReplace = Math.abs(r.nextInt())%k;                 
   
                    sampledKeys.set(keyToReplace, key);

Notice that the exception says the index is -3, whereas the code apparently 
ensures that the index is positive by calling Math.abs(int). However, 
Math.abs(int) may return a negative number if it is called on 
Integer.MIN_VALUE, since there is no positive integer that is large enough to 
hold it.

java.util.Random already has a method for drawing a random number in the 
interval [0,k). We should make the test use that method instead.
                
> ArrayIndexOutOfBoundsException in SURQueryMixTest
> -------------------------------------------------
>
>                 Key: DERBY-6196
>                 URL: https://issues.apache.org/jira/browse/DERBY-6196
>             Project: Derby
>          Issue Type: Bug
>          Components: Test
>    Affects Versions: 10.11.0.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>            Priority: Minor
>
> I got this failure when running suites.All on a patch for DERBY-6169 
> (although the part of the test that fails does not involve Derby, so I think 
> it's not caused by the patch):
> java.lang.ArrayIndexOutOfBoundsException: -3
>       at java.util.ArrayList.elementData(ArrayList.java:371)
>       at java.util.ArrayList.set(ArrayList.java:399)
>       at 
> org.apache.derbyTesting.functionTests.tests.jdbcapi.SURQueryMixTest.createRandomSample(SURQueryMixTest.java:211)
>       at 
> org.apache.derbyTesting.functionTests.tests.jdbcapi.SURQueryMixTest.updateRandomSampleOfNRecords(SURQueryMixTest.java:268)
>       at 
> org.apache.derbyTesting.functionTests.tests.jdbcapi.SURQueryMixTest.runTest(SURQueryMixTest.java:119)
>       at 
> org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:117)
>       at 
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBareOverridable(BaseJDBCTestCase.java:442)
>       at 
> org.apache.derbyTesting.junit.BaseJDBCTestCase.runBare(BaseJDBCTestCase.java:459)
>       at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
>       at junit.extensions.TestSetup$1.protect(TestSetup.java:23)
>       at junit.extensions.TestSetup.run(TestSetup.java:27)
>       at 
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
>       at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
>       at junit.extensions.TestSetup$1.protect(TestSetup.java:23)
>       at junit.extensions.TestSetup.run(TestSetup.java:27)
>       at 
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
>       at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
>       at junit.extensions.TestSetup$1.protect(TestSetup.java:23)
>       at junit.extensions.TestSetup.run(TestSetup.java:27)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to