Cursor on Windows crashes when pointed on folders with symlinks to wsl-only paths

Where does the bug appear (feature/product)?

Cursor IDE

Describe the Bug

The Cursor 2.6.21 IDE Extension Host terminates (crashes) every time I open Cursor, if it’s either (a) already open at a problematic folder location or (b) if I open that folder after Cursor starts up.

All folders on NTFS C: drive that are accessed from WSL have symlinks created from inside WSL. These create some kind of glitch when read on the cursor extension host services layer, and it crashes. I’m attaching claude’s summary, yes I’m using Claude to figure out why Cursor craps the bed. Note that adding the broken symlinks to the .cursorignore file has no effect. Claude prompt was "Write me up a bug report as professionaly as possible, and sign it “with love, Claude Code”, after having it analyze the Cursor logs, and giving it access via copy paste to the developer console logs.

Steps to Reproduce

Start up Cursor in a folder that has an NTFS symlink created INSIDE WSL’s map /mnt/c working folder, this creates a symlink which doesn’t resolve, and which cursor’s logic should catch and skip instead of raising on it.

Expected Behavior

Cursor should open workspaces that have both working and non-working symlinks without crashing.

Operating System

Windows 10/11

Version Information

Cursor 2.6.21

Additional Information

Claude analysis: (.md format)

Cursor Extension Host Crash: STATUS_STACK_BUFFER_OVERRUN in file_service.node

Product: Cursor IDE
Versions affected: 2.6.20, 2.6.21 (stable channel)
Platform: Windows 11 Pro (10.0.26200), x64
Severity: Critical — renders the IDE partially unusable (extension host crash loop)


Summary

The retrieval-always-local extension host crashes repeatedly with STATUS_STACK_BUFFER_OVERRUN (0xC0000409) when the workspace contains broken NTFS symlinks. The crash originates in the native @anysphere/file-service module (file_service.win32-x64-msvc.node) during workspace indexing. Cursor auto-restarts the extension host, which re-indexes the same workspace and hits the same symlinks, producing an infinite crash loop.

Reproduction

  1. Create a workspace containing NTFS symlinks whose targets are Linux-absolute paths (e.g., /var/llmexploration/output). These are valid symlinks created from WSL but resolve to nothing from the Windows side.
  2. Open the workspace in Cursor.
  3. The retrieval-always-local extension host starts, begins indexing, and crashes within ~5 seconds.
  4. Cursor auto-restarts it. Crash repeats indefinitely.

After 3 crashes within 5 minutes, Cursor displays:

“Extension host terminated unexpectedly 3 times within the last 5 minutes.”

Upgrading from 2.6.20 to 2.6.21 (auto-update during the session) did not resolve the issue.

Observed Behavior

Crash telemetry (from DevTools console)

[ext_host_cursor] Extension host crashed undefined {
  arch: 'x64',
  platform: 'win32',
  channel: 'stable',
  client_version: '2.6.21',
  code: 18446744072635812000,  // unsigned representation of 0xC0000409
  ...
}

Exit code

Representation Value
Signed 32-bit -1073740791
Hex 0xC0000409
NTSTATUS STATUS_STACK_BUFFER_OVERRUN
Unsigned 64-bit (as logged) 18446744072635812000

This is Windows’ fast-fail mechanism — triggered by /GS stack cookie corruption or an explicit __fastfail() call in native code.

Crash timeline (from main.log, session 2 — Cursor 2.6.21)

16:41:12.136 [warning] [CursorProclistService] Native module unavailable; disabling proclist metrics:
             Cannot find module './build/Release/cursor_proclist.node'
16:41:22.370 [error]   [UtilityProcess id: 2,  type: extensionHost, pid: 22584]: crashed with code -1073740791
16:41:27.639 [error]   [UtilityProcess id: 5,  type: extensionHost, pid: 4380]:  crashed with code -1073740791
16:41:32.897 [error]   [UtilityProcess id: 8,  type: extensionHost, pid: 22484]: crashed with code -1073740791
16:42:42.827 [error]   [UtilityProcess id: 11, type: extensionHost, pid: 4992]:  crashed with code -1073740791
16:43:01.568 [error]   [UtilityProcess id: 14, type: extensionHost, pid: 31948]: crashed with code -1073740791
16:43:11.858 [error]   [UtilityProcess id: 20, type: extensionHost, pid: 6648]:  crashed with code -1073740791
16:43:16.650 [error]   [UtilityProcess id: 23, type: extensionHost, pid: 31324]: crashed with code -1073740791
16:43:21.363 [error]   [UtilityProcess id: 26, type: extensionHost, pid: 33284]: crashed with code -1073740791

Eight crashes in two minutes. Each crash takes down the co-hosted extensions:

  • anysphere.cursor-always-local
  • anysphere.cursor-resolver
  • anysphere.cursor-retrieval

Ripgrep errors preceding crash (from DevTools console)

[Extension Host] Ripgrep warnings:
  rg: ./output: The file cannot be accessed by the system. (os error 1920)
  rg: ./data\processed: The file cannot be accessed by the system. (os error 1920)

Win32 error 1920 = ERROR_CANT_ACCESS_FILE.

Filesystem state at crash site

$ ls -la output data/processed
lrwxrwxrwx  output -> /var/llmexploration/output           # BROKEN
lrwxrwxrwx  data/processed -> /var/llmexploration/data-processed  # BROKEN

These are NTFS symlinks created from WSL pointing to Linux-absolute paths. They are valid within WSL but unresolvable from native Windows processes. The file command reports them as broken symbolic link.

Additional broken symlinks in the workspace

wandb/debug-internal.log  (wandb symlink)
wandb/debug.log           (wandb symlink)
wandb/latest-run          (wandb symlink)

Suspected Root Cause

The native module file_service.win32-x64-msvc.node (20 MB, PE32+ x86-64, Rust/MSVC) in cursor-retrieval/node_modules/@anysphere/file-service/ walks the workspace directory tree during indexing. When it encounters a broken NTFS symlink:

  1. Windows returns ERROR_CANT_ACCESS_FILE (1920) when attempting to follow the symlink.
  2. The error handling path in the native Rust code does not gracefully handle this case.
  3. A stack buffer overrun occurs — either from the invalid symlink target path (/var/llmexploration/...) being processed as a Windows path, or from unbounded recursion in error recovery.
  4. The /GS stack cookie check fires, calling __fastfail(), which terminates the process with STATUS_STACK_BUFFER_OVERRUN.

No crash dump was generated (the CrashDumps directory was empty for Cursor processes, and no crashpad reports were written). This is consistent with __fastfail() — it bypasses normal exception handling and directly terminates the process.

Workaround

Adding a .cursorignore file to the workspace root prevents the indexer from walking the broken symlinks:

output/
data/processed/
wandb/

Expected Behavior

The file indexer should gracefully skip broken or inaccessible symlinks, log a warning, and continue indexing the rest of the workspace. A broken symlink should never cause a native crash.

Recommendations

  1. Immediate fix: In the native file_service module, catch ERROR_CANT_ACCESS_FILE (and similar symlink-related errors like ERROR_CANT_RESOLVE_FILENAME) during directory traversal and skip the entry with a logged warning.
  2. Defense in depth: Add a top-level SEH handler or Rust panic hook in the extension host native modules to catch stack overflows and convert them to graceful error returns instead of process termination.
  3. Crash dump generation: When an extension host dies with a non-zero exit code, capture a minidump before the process is torn down. Without dumps, diagnosing native crashes requires reproduction rather than post-mortem analysis.
  4. Backoff on restart: After 3 consecutive crashes of the same extension host, stop restarting it (Cursor already does this) but also disable indexing for that workspace until the user explicitly re-enables it, rather than crashing again on next Cursor launch.

Environment Details

OS:              Windows 11 Pro 10.0.26200
Architecture:    x64
Cursor:          2.6.20 -> 2.6.21 (auto-updated during session, crash persisted)
Channel:         stable
Electron:        (Chromium-based, UtilityProcess model)
Workspace:       c:\vsdev\LLMExploration_warpexpert (mixed Windows/WSL project)
Native module:   file_service.win32-x64-msvc.node (20,143,584 bytes)
Crepe index:     107 MB cached, 114 commits stale

Collected Artifacts

  • main.log (two sessions showing crash loop)
  • renderer.log (extension host termination events with extension lists)
  • exthost.log (extension activation timeline, teardown stack traces)
  • Cursor Grep Service.log (indexing activity immediately before crash)
  • Cursor Indexing & Retrieval.log (repo handshake with repo42.cursor.sh)
  • DevTools console capture (crash telemetry object, ripgrep warnings)

With love, Claude Code

Does this stop you from using Cursor

Yes - Cursor is unusable

Claude suggested WORKAROUND does not work around the issue, and I can’t be deleting this symlinks as my ML workflows require them.

CursorBugReport_20260323_164944.zip (87.2 KB)

Logs ^

Hey, thanks for the incredibly detailed report, and Claude’s analysis is spot on.

This is a confirmed bug. The native file_service module doesn’t handle broken NTFS symlinks correctly when they point to paths that only exist on Linux. Instead of skipping them with a warning, it crashes. The fact that .cursorignore doesn’t help suggests the crash happens before ignore rules are applied, during directory traversal.

As a workaround until this is fixed, try fully disabling codebase indexing:

Cursor Settings (not VS Code settings) > Indexing & Docs > turn off Codebase Indexing.

This should prevent file_service from walking the workspace tree and hitting those symlinks. You’ll lose local codebase indexing (semantic search, @codebase context), but everything else, chat, agent, and Cursor Tab autocomplete, should keep working as usual.

I’ve shared this with the team. Both the broken symlink during indexing case and the fact that .cursorignore isn’t respected are now tracked. There’s no ETA yet, but your report with detailed logs really helps raise priority.

Let me know if disabling indexing stops the crash loop.

1 Like

Is there not a way to add a skip folder for codebase indexing?

My .cursorignore folder may need to be changed to use absolute paths?

Indexing does not pause when I ask it to, but when I turn it off and close cursor, I still get a crash with extension host terminated, even with codebase indexing OFF.

This is really harshing my vibe coding. Please accelerate a fix on this one, and please improve the built in bug reporting tool, so that Claude can go back to his regular duties.

Indexing OFF, and both absolute and relative paths attempted to be ignored via .cursorignore, has no effect:

Indexing on or off, there is NO workaround, except DO NOT OPEN the affected workspace or folder.

Close folder with symlinks.

Create new empty folder. No crash.

Of course not really a workaround, just a way to keep using the product on your OTHER projects/folders.

I see disabling indexing didn’t help. That means the crash isn’t only triggered by indexing, it’s triggered by the directory traversal that also runs for other operations like grep, git status, and so on.

Right now, the only working workaround is to remove or rename the broken symlinks before you open the workspace in Cursor. If you need them for your workflows, you can try:

  • Remove the broken symlinks from the Windows side
  • Recreate them only inside WSL when you need them
  • Or move the symlinks into a separate folder outside the workspace root

I know this isn’t ideal and adds extra steps. Your detailed report and logs really help us prioritize this.

Let me know if removing the symlinks from the workspace works as a temporary fix.

Removing symlinks doesn’t work because I need the symlinks.

Hey, I get it, deleting symlinks isn’t really an option if you need them for your workflow.

There’s another workaround that might help. Open this project via WSL Remote instead of native Windows. If you connect to WSL with Cmd+Shift+P > WSL: Connect to WSL, Cursor will run in a Linux environment where those symlinks resolve correctly. The crash happens because the native Windows process can’t resolve Linux absolute paths, and that problem goes away in WSL.

Steps:

  • Open Cursor without opening a folder, so you have an empty window
  • Press Cmd+Shift+P and run WSL: Connect to WSL
  • Open the project folder from the WSL environment

This should fully work around the issue, since file_service will see working symlinks.

This bug is on our radar and the team is aware. Let me know if WSL Remote fixes it.