-
-
Notifications
You must be signed in to change notification settings - Fork 4.9k
Don’t try reading from pipes or special file descriptors #19421
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
These can cause `fs.readFile()` to hang waiting for the file descriptor to be closed.
WalkthroughAdds a pre-check in the build utility to detect special file types (character devices or FIFOs) using fs.stat. If the target is a special file, the code skips reading existing contents to avoid hanging and proceeds to ensure the parent directory exists and write the file. For non-special files, the previous behavior remains: read current contents, skip writes when identical, then ensure directories and write. The public function signature is unchanged; changes are internal control flow and comments. Pre-merge checks✅ Passed checks (4 passed)
📜 Recent review detailsConfiguration used: CodeRabbit UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (5)
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
packages/@tailwindcss-cli/src/commands/build/utils.ts(1 hunks)
🔇 Additional comments (2)
packages/@tailwindcss-cli/src/commands/build/utils.ts (2)
16-17: Clear documentation of the fix.The comment effectively explains why special files require different handling and prevents future regressions.
22-33: Conditional logic and write operations are correct.The control flow properly skips reading for special files while preserving the optimization that avoids unnecessary writes for regular files when content is unchanged. Directory creation and file writing remain robust.
Note: This assessment assumes the critical issue with stat error handling (lines 18-21) is addressed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Nitpick comments (1)
CHANGELOG.md (1)
27-27: Clarify scope to match the actual fix (pipes/char devices too).The change handles more than just
/dev/stdout. Consider wording it to reflect special files so users know FIFOs/char devices are covered.- - CLI: Don't hang when output is `/dev/stdout` ([#19421](https://github.com/tailwindlabs/tailwindcss/pull/19421)) + - CLI: Avoid hangs when output is `/dev/stdout` or another special file (FIFO/char device) ([#19421](https://github.com/tailwindlabs/tailwindcss/pull/19421))
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
CHANGELOG.md(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: Linux / cli
- GitHub Check: Linux / upgrade
- GitHub Check: Linux
This PR contains the following updates: | Package | Change | Age | Confidence | |---|---|---|---| | [@tailwindcss/postcss](https://tailwindcss.com) ([source](https://github.com/tailwindlabs/tailwindcss/tree/HEAD/packages/@tailwindcss-postcss)) | [`4.1.17` -> `4.1.18`](https://renovatebot.com/diffs/npm/@tailwindcss%2fpostcss/4.1.17/4.1.18) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>tailwindlabs/tailwindcss (@​tailwindcss/postcss)</summary> ### [`v4.1.18`](https://github.com/tailwindlabs/tailwindcss/blob/HEAD/CHANGELOG.md#4118---2025-12-11) [Compare Source](tailwindlabs/tailwindcss@v4.1.17...v4.1.18) ##### Fixed - Ensure validation of `source(…)` happens relative to the file it is in ([#​19274](tailwindlabs/tailwindcss#19274)) - Include filename and line numbers in CSS parse errors ([#​19282](tailwindlabs/tailwindcss#19282)) - Skip comments in Ruby files when checking for class names ([#​19243](tailwindlabs/tailwindcss#19243)) - Skip over arbitrary property utilities with a top-level `!` in the value ([#​19243](tailwindlabs/tailwindcss#19243)) - Support environment API in `@tailwindcss/vite` ([#​18970](tailwindlabs/tailwindcss#18970)) - Preserve case of theme keys from JS configs and plugins ([#​19337](tailwindlabs/tailwindcss#19337)) - Write source maps correctly on the CLI when using `--watch` ([#​19373](tailwindlabs/tailwindcss#19373)) - Handle special defaults (like `ringColor.DEFAULT`) in JS configs ([#​19348](tailwindlabs/tailwindcss#19348)) - Improve backwards compatibility for `content` theme key from JS configs ([#​19381](tailwindlabs/tailwindcss#19381)) - Upgrade: Handle `future` and `experimental` config keys ([#​19344](tailwindlabs/tailwindcss#19344)) - Try to canonicalize any arbitrary utility to a bare value ([#​19379](tailwindlabs/tailwindcss#19379)) - Validate candidates similarly to Oxide ([#​19397](tailwindlabs/tailwindcss#19397)) - Canonicalization: combine `text-*` and `leading-*` classes ([#​19396](tailwindlabs/tailwindcss#19396)) - Correctly handle duplicate CLI arguments ([#​19416](tailwindlabs/tailwindcss#19416)) - Don’t emit color-mix fallback rules inside `@keyframes` ([#​19419](tailwindlabs/tailwindcss#19419)) - CLI: Don't hang when output is `/dev/stdout` ([#​19421](tailwindlabs/tailwindcss#19421)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xNC4yIiwidXBkYXRlZEluVmVyIjoiNDIuMTQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Reviewed-on: https://git.csmpro.ru/csmpro/mapban/pulls/74 Co-authored-by: Renovate Bot <[email protected]> Co-committed-by: Renovate Bot <[email protected]>
Fixes #19420