eclipse.platform
eclipse.platform copied to clipboard
Widespread wrong handling of space in File->URI->File conversion?!
After fixing https://github.com/eclipse-jdt/eclipse.jdt.debug/pull/66 i took a look where else URLs might be decoded wrong
org.eclipse.core.runtime.URIUtil seems to be wrong even though it's javadoc explicitly says it can handle space
File file = new File("c:/my test");
System.out.println("file=" + file); // c:\my test OK
URL url = file.toURI().toURL();
System.out.println("url=" + url); // file:/c:/my%20test OK
URL fileUrl = FileLocator.toFileURL(url);
System.out.println("fileUrl=" + fileUrl); // file:/c:/my%20test OK
URI uri = org.eclipse.core.runtime.URIUtil.toURI(url);
System.out.println("uri=" + uri); // file:/c:/my%2520test <- %25 means "%" WTF
File toFile = org.eclipse.core.runtime.URIUtil.toFile(uri);
System.out.println("toFile=" + toFile); // c:\my%20test <- should be c:\my test
// should be:
File good = new File(url.toURI());
System.out.println("good=" + good); // c:\my test OK
other wrong decodings new File(.*url.*getPath())
(regular pattern search) are in
- org.eclipse.ant.internal.core.ant.InternalAntRunner.setJavaClassPath()
- org.eclipse.ant.internal.ui.editor.utils.ProjectHelper.ProjectHandler.onStartElement(String, String, String, Attributes, AntXMLContext)
- org.eclipse.ant.internal.ui.model.AntDefiningTaskNode.setJavaClassPath(URL[])
- org.eclipse.core.internal.runtime.AuthorizationHandler.loadKeyring()
- org.eclipse.core.tests.internal.runtime.PlatformURLSessionTest.createData(String)
- org.eclipse.e4.ui.internal.workbench.swt.E4Application.getVersionFile(URL, boolean)
- org.eclipse.ui.internal.ide.application.IDEApplication.getVersionFile(URL, boolean)
- org.eclipse.ecf.provider.filetransfer.browse.LocalFileSystemBrowser.LocalFileSystemBrowser(IFileID, IRemoteFileSystemListener)
- org.eclipse.ecf.provider.filetransfer.outgoing.LocalFileOutgoingFileTransfer.openStreams()
- org.eclipse.jdt.internal.core.index.IndexLocation.createIndexLocation(URL)
- org.eclipse.urischeme.internal.registration.FileProvider.getFilePath(URL)
Another wrong pattern is new File(.*url.*getFile())
File urlGetFile = new File(url.getFile());
System.out.println("urlGetFile=" + urlGetFile); // c:\my%20test <- should be c:\my test
in places like:
- AbstractCSSEngine.java - org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/impl/engine (2 matches)
- AbstractJavaModelTests.java - org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model
- AntTestPlugin.java - org.eclipse.ant.tests.core/test plugin/org/eclipse/ant/tests/core/testplugin
- AntUITestPlugin.java - org.eclipse.ant.tests.ui/test plugin/org/eclipse/ant/tests/ui/testplugin
- ChooseWorkspaceData.java - org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide (4 matches)
- ClassLoaderTools.java - org.eclipse.test/src/org/eclipse/test
- ConfigurationActivator.java - org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator
- ConfigurationParser.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core/update/configurator
- ConfigurationParser.java - org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator
- ConfigurationSessionTestSuite.java - org.eclipse.core.tests.harness/src/org/eclipse/core/tests/session
- ContentDetectHelper.java - org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/contentdetect
- DebugCorePlugin.java - org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda
- E4Application.java - org.eclipse.e4.ui.workbench.swt/src/org/eclipse/e4/ui/internal/workbench/swt
- EEVMType.java - org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching (2 matches)
- FeatureParser.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core/update/configurator
- FeatureParser.java - org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator
- FileSystemAccess.java - org.eclipse.core.filesystem/src/org/eclipse/core/internal/filesystem
- FileTool.java - org.eclipse.core.filebuffers.tests/src/org/eclipse/core/filebuffers/tests
- FileTool.java - org.eclipse.search.tests/src/org/eclipse/search/tests
- FileTool.java - org.eclipse.ui.tests.harness/src/org/eclipse/ui/tests/harness/util
- FormatterMassiveRegressionTests.java - org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter
- HelpBasePlugin.java - org.eclipse.help.base/src/org/eclipse/help/internal/base
- HelpPlugin.java - org.eclipse.help/src/org/eclipse/help/internal
- IDEApplication.java - org.eclipse.ui.ide.application/src/org/eclipse/ui/internal/ide/application
- IncludedSchemaDescriptor.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core/schema
- InternalPlatform.java - org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime
- LaunchingPlugin.java - org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching (3 matches)
- LaunchTests.java - org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching
- Main_in.java - org.eclipse.jdt.core.tests.model/workspace/Formatter/test492
- Main_out.java - org.eclipse.jdt.core.tests.model/workspace/Formatter/test492
- ModelTestsUtil.java - org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model
- OpenBundleResourceHandler.java - org.eclipse.help.ui/src/org/eclipse/help/ui/internal/handlers
- PlatformConfiguration.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core/update/configurator (2 matches)
- PlatformConfiguration.java - org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator (7 matches)
- PluginPathFinder.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core
- SchemaDescriptor.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core/schema
- SchemaRegistry.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core/schema
- SiteEntry.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core/update/configurator (6 matches)
- SiteEntry.java - org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator (8 matches)
- SmartImportTests.java - org.eclipse.ui.tests/Eclipse UI Tests/org/eclipse/ui/tests/datatransfer (5 matches)
- TargetPlatformHelper.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core
- TestsPlugin.java - org.eclipse.debug.tests/src/org/eclipse/debug/tests
- TestsPlugin.java - org.eclipse.debug.ui.launchview.tests/src/org/eclipse/debug/ui/launchview/tests
- ThemeEngine.java - org.eclipse.e4.ui.css.swt.theme/src/org/eclipse/e4/ui/css/swt/internal/theme
- UpdateManagerHelperDeprecated.java - org.eclipse.pde.core/src/org/eclipse/pde/internal/core
- URLFieldEditor.java - org.eclipse.ant.ui/Ant Tools Support/org/eclipse/ant/internal/ui/preferences
- Utils.java - org.eclipse.test.performance.ui/src/org/eclipse/test/performance/ui
I do not know when all of this is used, does anybody know if that can be a real issue? Can we just copy & paste the solution and trust it works?