Skip to content

Commit db61dd6

Browse files
author
Kapil Borle
authored
Merge pull request #687 from PowerShell/kapilmb/FixComputerNameHardcodedRule
Fix ignoring localhost in AvoidUsingComputerNameHardcoded rule
2 parents a266c62 + 9fcfadc commit db61dd6

File tree

2 files changed

+35
-12
lines changed

2 files changed

+35
-12
lines changed

Rules/AvoidUsingComputerNameHardcoded.cs

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,14 @@ namespace Microsoft.Windows.PowerShell.ScriptAnalyzer.BuiltinRules
3030
#endif
3131
public class AvoidUsingComputerNameHardcoded : AvoidParameterGeneric
3232
{
33+
private readonly string[] localhostRepresentations = new string[]
34+
{
35+
"localhost",
36+
".",
37+
"::1",
38+
"127.0.0.1"
39+
};
40+
3341
/// <summary>
3442
/// Condition on the cmdlet that must be satisfied for the error to be raised
3543
/// </summary>
@@ -54,29 +62,40 @@ public override bool ParameterCondition(CommandAst CmdAst, CommandElementAst CeA
5462

5563
if (String.Equals(cmdParamAst.ParameterName, "computername", StringComparison.OrdinalIgnoreCase))
5664
{
57-
List<string> localhostRepresentations = new List<string> { "localhost", ".", "::1", "127.0.0.1" };
58-
Ast computerNameArgument = GetComputerNameArg(CmdAst, cmdParamAst.Extent.StartOffset);
59-
60-
if (null != computerNameArgument)
65+
Ast computerNameArgument = cmdParamAst.Argument;
66+
if (computerNameArgument == null)
6167
{
62-
if (!localhostRepresentations.Contains(computerNameArgument.Extent.Text.ToLower()))
68+
computerNameArgument = GetComputerNameArg(CmdAst, cmdParamAst.Extent.StartOffset);
69+
if (computerNameArgument == null)
6370
{
64-
return computerNameArgument is ConstantExpressionAst;
71+
return false;
6572
}
66-
67-
return false;
6873
}
69-
70-
if (null != cmdParamAst.Argument && !localhostRepresentations.Contains(cmdParamAst.Argument.ToString().Replace("\"", "").Replace("'", "").ToLower()))
74+
75+
var constExprAst = computerNameArgument as ConstantExpressionAst;
76+
if (constExprAst != null)
7177
{
72-
return cmdParamAst.Argument is ConstantExpressionAst;
78+
return !IsLocalhost(constExprAst);
7379
}
7480
}
7581
}
7682

7783
return false;
7884
}
7985

86+
private bool IsLocalhost(ConstantExpressionAst constExprAst)
87+
{
88+
var constExprVal = constExprAst.Value as string;
89+
if (constExprVal != null)
90+
{
91+
return localhostRepresentations.Contains<string>(
92+
constExprVal,
93+
StringComparer.OrdinalIgnoreCase);
94+
}
95+
96+
return false;
97+
}
98+
8099
private Ast GetComputerNameArg(CommandAst CmdAst, int StartIndex)
81100
{
82101
int small = int.MaxValue;

Tests/Rules/AvoidUsingComputerNameHardcodedNoViolations.ps1

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,8 @@ Invoke-Command -ComputerName 127.0.0.1
77
Invoke-Command -ComputerName:'localhost'
88
Invoke-Command -ComputerName:"."
99
Invoke-Command -ComputerName:'::1'
10-
Invoke-Command -ComputerName:"127.0.0.1"
10+
Invoke-Command -ComputerName:"127.0.0.1"
11+
Invoke-Command -ComputerName "localhost"
12+
Invoke-Command -ComputerName "."
13+
Invoke-Command -ComputerName "::1"
14+
Invoke-Command -ComputerName "127.0.0.1"

0 commit comments

Comments
 (0)