bad logic in jvm:guessWSHome() in old test harness affects j9 runs
------------------------------------------------------------------

                 Key: DERBY-2265
                 URL: https://issues.apache.org/jira/browse/DERBY-2265
             Project: Derby
          Issue Type: Bug
    Affects Versions: 10.3.0.0
         Environment: wctme5.7_foundation (j2ME 1.0) or weme6.1 (foundation, 
j2ME 1.1)
            Reporter: Myrna van Lunteren
         Assigned To: Myrna van Lunteren
            Priority: Minor


Running derbyall using either wcmte5.7_foundation or weme6.1 results in the 
following stack trace.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException
        at java.lang.String.substring(String.java:1043)
        at 
org.apache.derbyTesting.functionTests.harness.jvm.guessWSHome(jvm.java:301)
        at 
org.apache.derbyTesting.functionTests.harness.jvm.getSecurityProps(jvm.java:356)
        at 
org.apache.derbyTesting.functionTests.harness.jvm.setSecurityProps(jvm.java:336)
        at 
org.apache.derbyTesting.functionTests.harness.RunTest.buildTestCommand(RunTest.java:2350)
        at 
org.apache.derbyTesting.functionTests.harness.RunTest.testRun(RunTest.java:498)
        at 
org.apache.derbyTesting.functionTests.harness.RunTest.main(RunTest.java:368)

I think this code was not reached until various security related changes 
recently, but the code is just bad.
I think this code was used at one point to attempt to kick off another jvm to 
run a server with, but that is now defunct.
Rather than try to make the code work, or try to clean it up, I'd rather spend 
time converting tests to the junit framework, so I will just fix this up so we 
don't hit the error.

The bad code is: 
                wshome = jhome.substring(0,jhome.indexOf(sep + "jre"));
                wshome = wshome.substring(0,wshome.lastIndexOf(sep));
If the jhome ( System.getProperty("java.home")) does not contain 'jre', we will 
get -1 as the 2nd parameter in jhome.substring, and thus cause the 
ArrayIndexOutOfBounds.

I propose to fix this piece of code as follows:
                int havejre=jhome.indexOf(sep + "jre");
                if (havejre > 0)
                {
                        wshome = jhome.substring(0,jhome.indexOf(sep + "jre"));
                        wshome = wshome.substring(0,wshome.lastIndexOf(sep));
                }
                else
                        wshome = jhome.substring(0,jhome.lastIndexOf(sep));     




-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to