KEMBAR78
Fix backtick escaping for PowerShell by jborean93 · Pull Request #16307 · astral-sh/uv · GitHub
Skip to content

Conversation

jborean93
Copy link
Contributor

Summary

Fixes the logic for escaping a double quoted string in PowerShell by not escaping a backslash but escaping the Unicode double quote variants that PowerShell treats the same as the ASCII double quotes.

image

Test Plan

There does not seem to be any tests for this. I'm fairly new to rust but happy to add some if someone can point me in the right direction.

Fixes the logic for escaping a double quoted string in PowerShell by not
escaping a backslash but escaping the Unicode double quote variants that
PowerShell treats the same as the ASCII double quotes.
@konstin konstin requested a review from Gankra October 15, 2025 10:52
@andersk
Copy link

andersk commented Oct 17, 2025

Shouldn’t ` itself be escaped as `` too?

@jborean93
Copy link
Contributor Author

It probably should yes but it would mean that anyone that has a newline literal or unicode escape sequence would now not work. I think in the context of where this is used this is probably ok and should be escaped.

Copy link
Contributor

@Gankra Gankra left a comment

Choose a reason for hiding this comment

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

Dug through some docs and tried some examples and this all looks correct.

@Gankra
Copy link
Contributor

Gankra commented Oct 20, 2025

Other redflags that came up in research:

If these were single-quote strings then ', and would similarly be problematic, but in double-quote strings they're not (and this function only works for double-quote strings (the ` escape is only for double-quote strings), and the user of this function needs double quote strings to actually expand an env-var in the string).

If this were a completely unquoted string (echo hello) then # would be a concern as it would introduce a comment. However it does not inside quoted strings.

@konstin konstin added the bug Something isn't working label Oct 20, 2025
@jborean93
Copy link
Contributor Author

Yea single quotes are easier to escape but in this case we are relying that this will be used in double quotes as we use $env:PATH in a value appended to this string. Thanks for sending through the backtick suggestion as well.

@konstin konstin closed this Oct 20, 2025
@konstin konstin reopened this Oct 20, 2025
@konstin konstin enabled auto-merge (squash) October 21, 2025 10:11
@konstin konstin merged commit 17155c4 into astral-sh:main Oct 21, 2025
634 of 643 checks passed
@jborean93 jborean93 deleted the pwsh-backtick branch October 21, 2025 10:20
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Oct 22, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | patch | `0.9.3` -> `0.9.5` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>astral-sh/uv (astral-sh/uv)</summary>

### [`v0.9.5`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#095)

[Compare Source](astral-sh/uv@0.9.4...0.9.5)

Released on 2025-10-21.

This release contains an upgrade to `astral-tokio-tar`, which addresses a vulnerability in tar extraction on malformed archives with mismatching size information between the ustar header and PAX extensions. While the `astral-tokio-tar` advisory has been graded as "high" due its potential broader impact, the *specific* impact to uv is **low** due to a lack of novel attacker capability. Specifically, uv only processes tar archives from source distributions, which already possess the capability for full arbitrary code execution by design, meaning that an attacker gains no additional capabilities through `astral-tokio-tar`.

Regardless, we take the hypothetical risk of parser differentials very seriously. Out of an abundance of caution, we have assigned this upgrade an advisory: <GHSA-w476-p2h3-79g9>

##### Security

- Upgrade `astral-tokio-tar` to 0.5.6 to address a parsing differential ([#&#8203;16387](astral-sh/uv#16387))

##### Enhancements

- Add required environment marker example to hint ([#&#8203;16244](astral-sh/uv#16244))
- Fix typo in MissingTopLevel warning ([#&#8203;16351](astral-sh/uv#16351))
- Improve 403 Forbidden error message to indicate package may not exist ([#&#8203;16353](astral-sh/uv#16353))
- Add a hint on `uv pip install` failure if the `--system` flag is used to select an externally managed interpreter ([#&#8203;16318](astral-sh/uv#16318))

##### Bug fixes

- Fix backtick escaping for PowerShell ([#&#8203;16307](astral-sh/uv#16307))

##### Documentation

- Document metadata consistency expectation ([#&#8203;15683](astral-sh/uv#15683))
- Remove outdated aarch64 musl note ([#&#8203;16385](astral-sh/uv#16385))

### [`v0.9.4`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#094)

[Compare Source](astral-sh/uv@0.9.3...0.9.4)

Released on 2025-10-17.

##### Enhancements

- Add CUDA 13.0 support ([#&#8203;16321](astral-sh/uv#16321))
- Add auto-detection for Intel GPU on Windows ([#&#8203;16280](astral-sh/uv#16280))
- Implement display of RFC 9457 HTTP error contexts ([#&#8203;16199](astral-sh/uv#16199))

##### Bug fixes

- Avoid obfuscating pyx tokens in `uv auth token` output ([#&#8203;16345](astral-sh/uv#16345))

</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 MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNTEuMSIsInVwZGF0ZWRJblZlciI6IjQxLjE1Mi45IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants