[Feature] Fix path handling with wildcard char #7396
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR Summary
*System.Management.Automation/engine/CommandCompletion/CompletionCompleters:
Use WildcardPattern::Escape to escape completion text of filename.
*System.Management.Automation/engine/SessionStateContainer:
@Get-ChildItem
Unescape non-literal, non-glob path before existence checking.
This solve the issue where Get-GhildItem does not behave correctly
when -Path contains special characters. For example,
will complain with error "Cannot find path ..." while
will work fine.
@New-Item
Unescape non-literal path when -Name is not set.
This works around for New-Item treating -Path as literal path while
it can also be globbable. For example, assuming there is
"[file]1"in current directory, and tab completion suggests
'./`[file`]1'for the -Path argument, but
will create a file named
"`[file`]2"instead of"[file]2".*System.Management.Automation/engine/regex:
WildcardPattern::Escape should also escape
"`"sinceWildcardPattern::Unescape would unescape it,
and the matcher parse it as escape character.
*System.Management.Automation/namespaces/LocationGlobber:
Do not escape CWD when LiteralPath is used. This causes issues when
both -LiteralPath and CWD contains special characters.
Do not pass regex escaped string to WildcardPattern::Get. This fails
tab completion when doing
"./path/to/`[f"<TAB>.*System.Management.Automation/utils/PathUtils:
Unescape non-literal, non-glob path before calling
GetUnresolvedProviderPathFromPSPath since it only accepts literal path.
This solve the issue where some commands depending on that method
will treat -Path as literal unintentionally. For example,
will create a new file named
"`[out`].txt"instead of writing to"[out].txt".PR Checklist
.h,.cpp,.cs,.ps1and.psm1files have the correct copyright headerWIP:to the beginning of the title and remove the prefix when the PR is ready.[feature]if the change is significant or affects feature tests