Community
Participate
Working Groups
Build Identifier: 20100617-1415 line 35, org.eclipse.egit.ui.EclipseProxySelector.java: getURI() can return a null host name if the host name is undefined. Should defensively check for this. Reproducible: Sometimes
Created attachment 178781 [details] proposed defensive patch Proposed patch to deal with null host returned by getURI().
Stack trace: !ENTRY org.eclipse.equinox.preferences 4 2 2010-09-13 16:03:23.261 !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.equinox.preferences". !STACK 0 java.lang.NullPointerException at org.eclipse.core.internal.net.ProxyManager.tryGetURI(ProxyManager.java:330) at org.eclipse.core.internal.net.ProxyManager.getProxyDataForHost(ProxyManager.java:307) at org.eclipse.core.internal.net.ProxyManager.getProxyDataForHost(ProxyManager.java:372) at org.eclipse.egit.ui.EclipseProxySelector.select(EclipseProxySelector.java:45) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:425) at java.net.Socket.connect(Socket.java:529) at java.net.Socket.connect(Socket.java:477) at java.net.Socket.<init>(Socket.java:374) at java.net.Socket.<init>(Socket.java:216) at net.sf.eclipsefp.haskell.scion.internal.client.ScionServer.startServerProcess(ScionServer.java:161) at net.sf.eclipsefp.haskell.scion.internal.client.ScionServer.startServer(ScionServer.java:108) at net.sf.eclipsefp.haskell.scion.client.ScionInstance.start(ScionInstance.java:132) at net.sf.eclipsefp.haskell.ui.internal.scion.ScionManager.startInstance(ScionManager.java:625) at net.sf.eclipsefp.haskell.ui.internal.scion.ScionManager.serverExecutableChanged(ScionManager.java:568) at net.sf.eclipsefp.haskell.ui.internal.scion.ScionManager.access$4(ScionManager.java:554) at net.sf.eclipsefp.haskell.ui.internal.scion.ScionManager$1.preferenceChange(ScionManager.java:129) at org.eclipse.core.internal.preferences.EclipsePreferences$2.run(EclipsePreferences.java:753) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.core.internal.preferences.EclipsePreferences.firePreferenceEvent(EclipsePreferences.java:756) at org.eclipse.core.internal.preferences.EclipsePreferences.put(EclipsePreferences.java:769) at net.sf.eclipsefp.haskell.ui.internal.preferences.hsimpls.InstalledImplementationsPP.performOk(InstalledImplementationsPP.java:86) at org.eclipse.jface.preference.PreferenceDialog$13.run(PreferenceDialog.java:964) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) at org.eclipse.jface.preference.PreferenceDialog.okPressed(PreferenceDialog.java:944) at org.eclipse.ui.internal.dialogs.FilteredPreferenceDialog.okPressed(FilteredPreferenceDialog.java:447) at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.okPressed(WorkbenchPreferenceDialog.java:169) at org.eclipse.jface.preference.PreferenceDialog.buttonPressed(PreferenceDialog.java:233) at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:3776) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1367) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1390) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1375) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1187) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3622) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3277) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.open(WorkbenchPreferenceDialog.java:211) at org.eclipse.ui.internal.OpenPreferencesAction.run(OpenPreferencesAction.java:65) at org.eclipse.ui.internal.cocoa.CocoaUIEnhancer.runAction(CocoaUIEnhancer.java:416) at org.eclipse.ui.internal.cocoa.CocoaUIEnhancer.preferencesMenuItemSelected(CocoaUIEnhancer.java:516) at org.eclipse.ui.internal.cocoa.CocoaUIEnhancer.actionProc(CocoaUIEnhancer.java:538) at org.eclipse.ui.internal.cocoa.CocoaUIEnhancer.actionProc(CocoaUIEnhancer.java:524) at org.eclipse.swt.internal.cocoa.OS.objc_msgSendSuper(Native Method) at org.eclipse.swt.widgets.Display.applicationSendEvent(Display.java:4582) at org.eclipse.swt.widgets.Display.applicationProc(Display.java:4659) at org.eclipse.swt.internal.cocoa.OS.objc_msgSend(Native Method) at org.eclipse.swt.internal.cocoa.NSApplication.sendEvent(NSApplication.java:115) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3274) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427) at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115) at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) 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:592) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574) at org.eclipse.equinox.launcher.Main.run(Main.java:1407) at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Appears to be reproducible if proxy host is IPv6 local host, i.e., "http://::1:8080/". No easy way to disambiguate the colon (":") parsing; IETF RFCs do not give any guidance.
Uploaded your patch to our code review server at http://egit.eclipse.org/r/#change,1778 Please register on the code review server and check if I applied it correctly (the patch didn't apply so I had to patch it ;-). If you are happy with what I did vote +1 on it at http://egit.eclipse.org/r/#change,publish,1778,1 For details about egit contributions visit http://wiki.eclipse.org/EGit/Contributor_Guide
More precisely: follow http://wiki.eclipse.org/EGit/Contributor_Guide#Contributing_Patches to register on Gerrit
merged as c0636b5c957ae520799f9b073da16f5455ad539e
(In reply to comment #6) > merged as c0636b5c957ae520799f9b073da16f5455ad539e Looks good; it defensively guards against the NPE. It's probably not the right thing to do in the long run, since the actual bug is in URI parsing because the code appears to be IPv4-centric.