Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 325182 - EclipseProxySelector.select: host may be null
Summary: EclipseProxySelector.select: host may be null
Status: RESOLVED FIXED
Alias: None
Product: EGit
Classification: Technology
Component: UI (show other bugs)
Version: unspecified   Edit
Hardware: Macintosh Mac OS X - Carbon (unsup.)
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Matthias Sohn CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-09-13 19:56 EDT by Scott Michel CLA
Modified: 2010-10-25 16:03 EDT (History)
1 user (show)

See Also:


Attachments
proposed defensive patch (1.84 KB, patch)
2010-09-13 20:02 EDT, Scott Michel CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Scott Michel CLA 2010-09-13 19:56:56 EDT
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
Comment 1 Scott Michel CLA 2010-09-13 20:02:07 EDT
Created attachment 178781 [details]
proposed defensive patch

Proposed patch to deal with null host returned by getURI().
Comment 2 Scott Michel CLA 2010-09-13 20:09:06 EDT
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)
Comment 3 Scott Michel CLA 2010-10-01 12:00:26 EDT
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.
Comment 4 Matthias Sohn CLA 2010-10-21 09:53:14 EDT
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
Comment 5 Matthias Sohn CLA 2010-10-21 09:55:06 EDT
More precisely: follow http://wiki.eclipse.org/EGit/Contributor_Guide#Contributing_Patches to register on Gerrit
Comment 6 Matthias Sohn CLA 2010-10-22 15:11:23 EDT
merged as c0636b5c957ae520799f9b073da16f5455ad539e
Comment 7 Scott Michel CLA 2010-10-25 16:03:47 EDT
(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.