Skip to content

fix: Pipe process.stdout.write through Buffer to fix node incompatibility - #29232

Open
lindskogen wants to merge 2 commits into
oven-sh:mainfrom
lindskogen:bug/stdout-write-ignores-encoding
Open

lindskogen wants to merge 2 commits into
oven-sh:mainfrom
lindskogen:bug/stdout-write-ignores-encoding

Conversation

@lindskogen

Copy link
Copy Markdown

What does this PR do?

Happened upon a bug in bun, where it currently ignores the encoding parameter of process.stdout.write. This PR makes it so it uses Buffer.from to encode the data.

How did you verify your code works?

  • I used claude code to generate a few test cases and built bun locally to verify compatibility with node.

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@coderabbitai

coderabbitai Bot commented Apr 12, 2026 •

Copy link
Copy Markdown
Contributor

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: b4c9b638-121b-4403-b5b0-3a2d7e2ff025

📥 Commits

Reviewing files that changed from the base of the PR and between 0af9fb9 and af56609.

📒 Files selected for processing (1)
  • test/js/node/process/process-stdio.test.ts

Walkthrough

Adds string-to-Buffer normalization for non-UTF8 encodings in file stream write paths and introduces regression tests exercising process.stdout.write behavior with various encodings ("binary"/"latin1", "hex", and default UTF-8).

Changes

Cohort / File(s) Summary
File Stream Write Normalization
src/js/internal/fs/streams.ts
Inserted conversion of string data to Buffer.from(data, encoding) when encoding is provided and is not "utf8", "utf-8", or "buffer" in three write paths (_write, underscoreWriteFast, writeFast).
Process Stdout Write Tests
test/js/node/process/process-stdio.test.ts
Added spawnSync-based regression tests for process.stdout.write() covering string with "binary"/"latin1", "hex", and no-encoding (default UTF-8) cases, asserting exact emitted byte sequences and exit code 0.
🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the main change: fixing process.stdout.write to pipe through Buffer for encoding support, addressing a Node.js incompatibility in Bun.
Description check ✅ Passed The description covers both required template sections: clearly explains the bug (encoding parameter being ignored) and the fix (using Buffer.from), and documents verification via test case generation and local build testing.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@test/js/node/process/process-stdio.test.ts`:
- Around line 164-204: Each test that spawns a process (the three tests using
spawnSync with bunExe and bunEnv) lacks an assertion on the child process exit
code; update each test to capture the spawnSync result's exitCode (from the
object returned by spawnSync) and add an assertion after the existing stdout
Buffer checks to ensure exitCode is 0 (or the expected success code). Locate the
three tests named "process.stdout.write(string, '%s') writes raw bytes",
"process.stdout.write(string, 'hex') decodes hex", and
"process.stdout.write(string) defaults to UTF-8" and add the exitCode assertion
immediately after the Buffer.compare / stdout checks for each spawnSync call.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 4401ef1f-f0f0-40a2-9359-e7472a07009e

📥 Commits

Reviewing files that changed from the base of the PR and between 7c75a87 and 0af9fb9.

📒 Files selected for processing (2)
  • src/js/internal/fs/streams.ts
  • test/js/node/process/process-stdio.test.ts

Comment thread test/js/node/process/process-stdio.test.ts

This branch has not been deployed

No deployments
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.

1 participant