PowerShell / PowerShell/PSScriptAnalyzer
PSPossibleIncorrectComparisonWithNull fails to work with typecasted variables
未關閉
還沒有人認領這個 Issue。
Area - Rules
Issue - Enhancement
- 主要語言
- C#
- 星號
- 2.2k
- 分支
- 415
- 平均合併
- 13 小時 1 分鐘
- 30 天內合併 PR
- 2
描述
Steps to reproduce
If you validate this script, it complains about PSPossibleIncorrectComparisonWithNull even though it is pretty clear $value must be a string.
Function Get-FooBar() {
return "foobar"
}
[string]$value = (Get-FooBar)
if ($value -eq $null) {
Write-Output 'value is $null'
} else {
Write-Output 'value is not $null'
}
Expected behavior
It works perfectly fine if the value is type-casted like this:
Function Get-FooBar() {
return "foobar"
}
$value = (Get-FooBar) -as [string]
if ($value -eq $null) {
Write-Output 'value is $null'
} else {
Write-Output 'value is not $null'
}
Actual behavior
So we get this error needlessly.
ERROR: test.ps1:9:5: PSPossibleIncorrectComparisonWithNull $null should be on the left side of equality comparisons.
Environment data
> $PSVersionTable
Name Value
---- -----
PSVersion 6.0.2
PSEdition Core
GitCommitId v6.0.2
OS Linux 4.15.10-1.el7.elrepo.x86_64 #1 SMP Thu Mar 15 10:05:52 EDT 2018
Platform Unix
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1
WSManStackVersion 3.0
> (Get-Module -ListAvailable PSScriptAnalyzer).Version | ForEach-Object { $_.ToString() }
1.16.1
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
從 PSPossibleIncorrectComparisonWithNull 規則開始,使用第一個 PowerShell 指令碼重現警告,然後將其與 -as [string] 範例進行比較。追蹤該規則對明確型別轉換變數的處理,並新增或更新涵蓋範圍,使示範的安全比較不會發出警告,同時仍涵蓋現有案例。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- powershell
- 領域
- tooling
- Issue 類型
- 缺陷
- 難度
- 3/5
- 預估耗時
- 1-2 天
- 活躍度
- 停滯
- 描述清晰度
- 描述清楚
- 新手友好度
- 48/100