Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions cli/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ _Released 11/4/2025_
- Fixed an issue with grouped console prop items having a hard to read blue color in the console log and duplicate `:` characters being displayed. Addressed in [#32776](https://github.com/cypress-io/cypress/pull/32776).
- Added more context to the error message shown when [`cy.prompt()`](https://docs.cypress.io/api/commands/prompt) fails to download. Addressed in [#32822](https://github.com/cypress-io/cypress/pull/32822).
- Fixed an issue where absolute file paths were not correctly determined from the source map when the source map root was updated. Fixes [#32809](https://github.com/cypress-io/cypress/issues/32809).
- Fixed an issue where a EPIPE error shows up after CTRL+C is done in terminal. Fixes [#30659](https://github.com/cypress-io/cypress/issues/30659). Addressed in [#32873](https://github.com/cypress-io/cypress/pull/32873).

**Misc:**

Expand Down
14 changes: 12 additions & 2 deletions packages/data-context/src/data/ProjectConfigIpc.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,12 @@ export class ProjectConfigIpc extends EventEmitter {

let resolved = false

this._childProcess.on('error', (err) => {
this._childProcess.on('error', (err: NodeJS.ErrnoException) => {
if (err.code === 'EPIPE') {
debug('EPIPE error in loadConfig() of child process %s', err)
return
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Unhandled Errors: Promises Hang Forever

When an EPIPE error occurs, the handler returns early without resolving or rejecting the promise, causing loadConfig() to hang indefinitely. The promise expects either a loadConfig:reply or loadConfig:error event to settle, but the early return prevents proper cleanup and leaves callers waiting forever.

Fix in Cursor Fix in Web


debug('unhandled error in child process %s', err)
this.handleChildProcessError(err, this, resolved, reject)
reject(err)
Expand Down Expand Up @@ -229,7 +234,12 @@ export class ProjectConfigIpc extends EventEmitter {
return new Promise((resolve, reject) => {
let resolved = false

this._childProcess.on('error', (err) => {
this._childProcess.on('error', (err: NodeJS.ErrnoException) => {
if (err.code === 'EPIPE') {
debug('EPIPE error in registerSetupIpcHandlers() of child process %s', err)
return
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Early Return Traps Promises Indefinitely

When an EPIPE error occurs, the handler returns early without resolving or rejecting the promise, causing registerSetupIpcHandlers() to hang indefinitely. The promise expects either a setupTestingType:reply or setupTestingType:error event to settle, but the early return prevents proper cleanup and leaves callers waiting forever.

Fix in Cursor Fix in Web


this.handleChildProcessError(err, this, resolved, reject)
reject(err)
})
Expand Down
Loading