Bug 30920 - Stack overflow when container resolved to null
Summary: Stack overflow when container resolved to null
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 2.1   Edit
Hardware: PC Windows 2000
: P3 normal (vote)
Target Milestone: 2.1 M5   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 30922
  Show dependency tree
 
Reported: 2003-02-04 18:18 EST by Darin Wright CLA
Modified: 2006-07-04 10:39 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Darin Wright CLA 2003-02-04 18:18:15 EST
I allowed my JRE Container Initializer to resolve a container to "null". This 
caused a stack overflow. I have since put in protection against the overflow 
(in the container initializer), but I do not think this should be required. I 
beleive am I allowed to resolve a container to null. (I will paste the stack 
trace)
Comment 1 Darin Wright CLA 2003-02-04 18:20:14 EST
java.lang.StackOverflowError
	at java.net.URLStreamHandler.hostsEqual(URLStreamHandler.java:396)
	at java.net.URLStreamHandler.sameFile(URLStreamHandler.java:342)
	at java.net.URLStreamHandler.equals(URLStreamHandler.java:275)
	at java.net.URL.equals(URL.java:857)
	at java.util.Hashtable.get(Hashtable.java:332)
	at 
org.eclipse.core.internal.boot.DelegatingURLClassLoader.isClassVisible
(DelegatingURLClassLoader.java:821)
	at 
org.eclipse.core.internal.boot.DelegatingURLClassLoader.checkClassVisibility
(DelegatingURLClassLoader.java:367)
	at 
org.eclipse.core.internal.plugins.PluginClassLoader.internalFindClassParentsSelf
(PluginClassLoader.java:149)
	at 
org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassParentsSelf
(DelegatingURLClassLoader.java:499)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass
(DelegatingURLClassLoader.java:891)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass
(DelegatingURLClassLoader.java:871)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:255)
	at 
org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension
(PluginDescriptor.java:130)
	at 
org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension
(PluginDescriptor.java:167)
	at 
org.eclipse.core.internal.plugins.ConfigurationElement.createExecutableExtension
(ConfigurationElement.java:103)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainerInitializer
(JavaCore.java:937)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer
(JavaCore.java:857)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath
(JavaProject.java:1438)
	at 
org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec
essary(SetClasspathOperation.java:719)
	at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation
(SetClasspathOperation.java:228)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.internal.core.JavaElement.runOperation
(JavaElement.java:556)
	at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath
(JavaProject.java:2078)
	at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation
(BatchOperation.java:34)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer
(JavaCore.java:2739)
	at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:63)
	at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:867)
	at org.eclipse.core.runtime.Platform.run(Platform.java:413)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer
(JavaCore.java:867)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath
(JavaProject.java:1438)
	at 
org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec
essary(SetClasspathOperation.java:719)
	at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation
(SetClasspathOperation.java:228)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.internal.core.JavaElement.runOperation
(JavaElement.java:556)
	at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath
(JavaProject.java:2078)
	at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation
(BatchOperation.java:34)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer
(JavaCore.java:2739)
	at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:63)
	at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:867)
	at org.eclipse.core.runtime.Platform.run(Platform.java:413)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer
(JavaCore.java:867)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath
(JavaProject.java:1438)
	at 
org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec
essary(SetClasspathOperation.java:719)
	at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation
(SetClasspathOperation.java:228)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.internal.core.JavaElement.runOperation
(JavaElement.java:556)
	at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath
(JavaProject.java:2078)
	at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation
(BatchOperation.java:34)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer
(JavaCore.java:2739)
	at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:63)
	at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:867)
	at org.eclipse.core.runtime.Platform.run(Platform.java:413)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer
(JavaCore.java:867)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath
(JavaProject.java:1438)
	at 
org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec
essary(SetClasspathOperation.java:719)
	at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation
(SetClasspathOperation.java:228)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.internal.core.JavaElement.runOperation
(JavaElement.java:556)
	at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath
(JavaProject.java:2078)
	at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation
(BatchOperation.java:34)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer
(JavaCore.java:2739)
	at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:63)
	at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:867)
	at org.eclipse.core.runtime.Platform.run(Platform.java:413)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer
(JavaCore.java:867)
	at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath
(JavaProject.java:1438)
	at 
org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec
essary(SetClasspathOperation.java:719)
	at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation
(SetClasspathOperation.java:228)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.internal.core.JavaElement.runOperation
(JavaElement.java:556)
	at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath
(JavaProject.java:2078)
	at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation
(BatchOperation.java:34)
	at org.eclipse.jdt.internal.core.JavaModelOperation.execute
(JavaModelOperation.java:343)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:671)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1588)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer
(JavaCore.java:2739)
	at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize
(JREContainerInitializer.java:63)
	at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872)

...
Comment 2 Philipe Mulet CLA 2003-02-05 05:03:22 EST
Setting container to null should reset its cached value, causing next request 
to re-run the initializer again. However, it shouldn't loop internally.

Comment 3 Philipe Mulet CLA 2003-02-05 05:05:12 EST
Fixed
Comment 4 David Audel CLA 2003-02-12 10:05:24 EST
Verified.
Comment 5 Jerome Lanneluc CLA 2006-07-04 10:39:18 EDT
Regression test is ClasspathInitializerTests#testContainerInitializer05()