Skip to content

Conversation

Copy link

Copilot AI commented Oct 30, 2025

Eclipse fails to launch processes when executable paths exceed Windows' 260-character MAX_PATH limit. The existing code only shortened working directories, not the executable path itself.

Changes

Core Fix (DebugPlugin.java)

  • Added shortenWindowsCommandLine() to handle long paths in all command-line arguments
  • Uses Windows GetShortPathName API via existing Win32Handler to convert to 8.3 format
  • Applied to all process launch code paths: ProcessBuilder, Runtime.exec(), and ExecFactory delegation
  • Windows-only, triggers when paths exceed 258 characters

Test Coverage (LaunchTests.java)

  • Added testProcessLaunchWithLongExecutablePath()
  • Creates 400+ character paths, copies executables, verifies successful launch
  • Tests both merged and separate output modes

Example

Before this fix, launching a process would fail:

String[] cmd = new String[] {
    "C:\\very\\long\\path\\exceeding\\260\\characters\\...\\app.exe",
    "--arg"
};
DebugPlugin.exec(cmd, workDir, null, false); // IOException: path too long

After:

// Internally shortened to: C:\VERY~1\LONG~1\...\APP~1.EXE
DebugPlugin.exec(cmd, workDir, null, false); // Success

Technical Note

Cannot use \\?\ long path prefix as Java's process creation APIs reject it (JDK-8315405). Short path conversion is the most reliable workaround.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • repo.eclipse.org

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

Scan the repository for native code that calls native windows API having problems with long path.

We are getting reports Eclipse is unable to launch processes with long path and suspect it could be something in our native code, e.g we do not use proper windows API to handle long path


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

Copilot AI and others added 3 commits October 30, 2025 09:48
Add shortenWindowsCommandLine() to shorten all command line arguments that
exceed Windows MAX_PATH limit, not just the working directory. This fixes
issues where Eclipse is unable to launch processes with long executable
paths on Windows.

The fix uses Windows GetShortPathName API via Win32Handler to convert
long paths to their 8.3 short form before passing them to ProcessBuilder
or Runtime.exec().

Co-authored-by: laeubi <[email protected]>
Add testProcessLaunchWithLongExecutablePath() to verify that processes can
be launched when the executable path exceeds Windows MAX_PATH limit. The
test creates a directory with a very long path, copies java.exe to it, and
verifies the executable can be launched successfully.

Co-authored-by: laeubi <[email protected]>
- Fix spelling: 'relativly' -> 'relatively'
- Add constants for magic numbers (WINDOWS_MAX_PATH, LONG_PATH_LENGTH_TARGET)
- Use constants instead of hardcoded values for better maintainability

Co-authored-by: laeubi <[email protected]>
Copilot AI changed the title [WIP] Fix native code handling of long path for Windows API Fix Windows process launch failures with long executable paths Oct 30, 2025
Copilot AI requested a review from laeubi October 30, 2025 09:54
Copilot finished work on behalf of laeubi October 30, 2025 09:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants