eclipse.platform icon indicating copy to clipboard operation
eclipse.platform copied to clipboard

Widespread wrong handling of space in File->URI->File conversion?!

Open jukzi opened this issue 2 years ago • 8 comments

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?

jukzi avatar Jun 15 '22 08:06 jukzi