Skip to content

fix: Node 25.7+ EBADF by reading CJS source of zip files#7070

Merged
arcanis merged 2 commits intoyarnpkg:masterfrom
NormalGaussian:fix/ebadf-bypass-25.7.x
Mar 30, 2026
Merged

fix: Node 25.7+ EBADF by reading CJS source of zip files#7070
arcanis merged 2 commits intoyarnpkg:masterfrom
NormalGaussian:fix/ebadf-bypass-25.7.x

Conversation

@NormalGaussian
Copy link
Copy Markdown
Contributor

@NormalGaussian NormalGaussian commented Mar 12, 2026

Attempts to fix the EBADF encountered due to patching fs by doing the whole read instead.

I did this to get my own changes past a client (i.e. convincing them it isn't me that is the issue); I'm not sure this is the right long term choice.

What's the problem this PR addresses?

#7065

Can't load zipped CJS modules in Node 25.7+

How did you fix it?

Return the source of zipped files instead of letting Node read it. I basically just went off this comment: nodejs/node#62012 (comment)

I'm not certain this is the most desirable way to do this, and if it is I'm not sure if there are other places that will need additional fixes. My knowledge of the codebase makes this an uneasy 'this works for me' solution. I suspect that if it is a reasonable solution, there may be some deletion that can be done.

Checklist

  • I have read the Contributing Guide.
  • I have set the packages that need to be released for my changes to be effective.
  • I will check that all automated PR checks pass before the PR gets reviewed.

@NormalGaussian NormalGaussian force-pushed the fix/ebadf-bypass-25.7.x branch from 82edc82 to 37d1f56 Compare March 12, 2026 18:11
@NormalGaussian NormalGaussian changed the title [Attempt] to fix Node 25.7+ EBADF by reading CJS source of zip files fix: Node 25.7+ EBADF by reading CJS source of zip files Mar 13, 2026
@arcanis arcanis merged commit deaf916 into yarnpkg:master Mar 30, 2026
27 checks passed
arcanis pushed a commit that referenced this pull request Apr 17, 2026
## What's the problem this PR addresses?

#7103

The fix in #7070 added a version gate for the EBADF fstat error:

```js
export const HAS_BROKEN_FSTAT_FOR_ZIP_FDS = major > 25 || (major === 25 && minor >= 7);
```

However, the breaking change from
[nodejs/node#61769](nodejs/node#61769) (`lib:
reduce cycles in esm loader and load it in snapshot`) was backported to
**Node v24.15.0**, causing the identical `EBADF: bad file descriptor,
fstat` error on that version.

Works on v24.14.1, fails on v24.15.0.

## How did you fix it?

Widened the version gate to also cover Node 24.15+:

```js
export const HAS_BROKEN_FSTAT_FOR_ZIP_FDS = major > 25 || (major === 25 && minor >= 7) || (major === 24 && minor >= 15);
```

## Checklist

- [x] I have read the [Contributing
Guide](https://yarnpkg.com/advanced/contributing).
- [x] I have set the packages that need to be released for my changes to
be effective.
- [x] I will check that all automated PR checks pass before the PR gets
reviewed.
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