PowerShell / PowerShell/PSScriptAnalyzer

PSPossibleIncorrectComparisonWithNull fails to work with typecasted variables

Offen
#943 4 Kommentare 1 Reaktion 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Area - Rules Issue - Enhancement
Vorherrschende Sprache
C#
Sterne
2.2k
Forks
414
Ø Merge
13 Std. 1 Min.
Gemergte PRs (30 T.)
2

Beschreibung

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

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie mit der Regel PSPossibleIncorrectComparisonWithNull und reproduzieren Sie die Warnung mithilfe des ersten PowerShell-Skripts. Vergleichen Sie sie anschließend mit dem Beispiel -as [string]. Verfolgen Sie die Behandlung explizit typkonvertierter Variablen durch die Regel und fügen Sie Tests hinzu oder aktualisieren Sie die Abdeckung, sodass die Warnung für den demonstrierten sicheren Vergleich nicht ausgegeben wird, während die bestehenden Fälle weiterhin abgedeckt bleiben.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
powershell
Bereich
tooling
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
48/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.