Bug 113671 - [search] AIOOBE in SearchEngine#searchAllTypeNames
Summary: [search] AIOOBE in SearchEngine#searchAllTypeNames
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows 2000
: P3 normal (vote)
Target Milestone: 3.2 M3   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-10-25 11:37 EDT by David Audel CLA
Modified: 2005-10-31 06:32 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description David Audel CLA 2005-10-25 11:37:58 EDT
build I20051012-1200 + JDTCore head

an AIOOBE occurs in SearchEngine#searchAllTypeNames when 'typeName' is an empty
array.

steps to reproduce
1) add the following test to JavaSearchTests

public void testCamelCaseTypePattern10() throws CoreException {
  TypeNameRequestor requestor =  new SearchTests.SearchTypeNameRequestor();
  new SearchEngine().searchAllTypeNames(
    "aa".toCharArray(),
    "".toCharArray(),
    SearchPattern.R_CAMELCASE_MATCH | SearchPattern.R_PREFIX_MATCH,
    TYPE,
    getJavaSearchScope(),
    requestor,
    IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH,
    null);
}

2) run this test
an exception occurs

java.lang.ArrayIndexOutOfBoundsException: 0
  at org.eclipse.jdt.internal.core.index.Index.isMatch(Index.java:53)
  at
org.eclipse.jdt.internal.core.index.DiskIndex.addQueryResults(DiskIndex.java:175)
  at org.eclipse.jdt.internal.core.index.Index.query(Index.java:127)
  at
org.eclipse.jdt.internal.core.search.matching.TypeDeclarationPattern.queryIn(TypeDeclarationPattern.java:323)
  at
org.eclipse.jdt.internal.core.search.matching.InternalSearchPattern.findIndexMatches(InternalSearchPattern.java:75)
  at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.findIndexMatches(MatchLocator.java:307)
  at
org.eclipse.jdt.internal.core.search.PatternSearchJob.search(PatternSearchJob.java:114)
  at
org.eclipse.jdt.internal.core.search.PatternSearchJob.execute(PatternSearchJob.java:64)
  at
org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:261)
  at
org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllTypeNames(BasicSearchEngine.java:581)
  at
org.eclipse.jdt.core.search.SearchEngine.searchAllTypeNames(SearchEngine.java:596)
  at
org.eclipse.jdt.core.tests.model.JavaSearchTests.testCamelCaseTypePattern10(JavaSearchTests.java:3645)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:585)
  at junit.framework.TestCase.runTest(TestCase.java:154)
  at junit.framework.TestCase.runBare(TestCase.java:127)
  at junit.framework.TestResult$1.protect(TestResult.java:106)
  at junit.framework.TestResult.runProtected(TestResult.java:124)
  at junit.framework.TestResult.run(TestResult.java:109)
  at junit.framework.TestCase.run(TestCase.java:118)
  at junit.framework.TestSuite.runTest(TestSuite.java:208)
  at
org.eclipse.jdt.core.tests.model.SuiteOfTestCases$Suite.runTest(SuiteOfTestCases.java:99)
  at junit.framework.TestSuite.run(TestSuite.java:203)
  at
org.eclipse.jdt.core.tests.model.SuiteOfTestCases$Suite.superRun(SuiteOfTestCases.java:83)
  at
org.eclipse.jdt.core.tests.model.SuiteOfTestCases$1.protect(SuiteOfTestCases.java:71)
  at junit.framework.TestResult.runProtected(TestResult.java:124)
  at
org.eclipse.jdt.core.tests.model.SuiteOfTestCases$Suite.run(SuiteOfTestCases.java:80)
  at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:478)
  at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:344)
  at
org.eclipse.pde.internal.junit.runtime.RemotePluginTestRunner.main(RemotePluginTestRunner.java:57)
  at
org.eclipse.pde.internal.junit.runtime.CoreTestApplication.run(CoreTestApplication.java:24)
  at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:375)
  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:164)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:585)
  at org.eclipse.core.launcher.Main.invokeFramework(Main.java:338)
  at org.eclipse.core.launcher.Main.basicRun(Main.java:282)
  at org.eclipse.core.launcher.Main.run(Main.java:977)
  at org.eclipse.core.launcher.Main.main(Main.java:952)
Comment 1 Frederic Fusier CLA 2005-10-26 14:02:07 EDT
Fixed and released in HEAD.

Problem was in Index.isMatch(char[], char[]). I optimized comparison by testing
first char of pattern and word to avoid unnecessary message send but didn't
verify lengthes before...

Test cases added in JavaSearchBugsTests and JavaSearchTests
Comment 2 David Audel CLA 2005-10-31 06:32:46 EST
Verified for 3.2 M3 using build I20051031-0010