From 63d5e5623eff8e88f1e24a5adf5b19474a821635 Mon Sep 17 00:00:00 2001 From: Janne Mattila Date: Fri, 5 Jan 2024 10:30:02 +0200 Subject: [PATCH] Add null guards --- src/AzurePolicyEvaluator/AzurePolicyEvaluator.csproj | 1 - src/AzurePolicyEvaluator/Evaluator.cs | 6 ++++++ src/AzurePolicyEvaluator/Program.cs | 10 +++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/AzurePolicyEvaluator/AzurePolicyEvaluator.csproj b/src/AzurePolicyEvaluator/AzurePolicyEvaluator.csproj index 2c88cb7..d5fc45c 100644 --- a/src/AzurePolicyEvaluator/AzurePolicyEvaluator.csproj +++ b/src/AzurePolicyEvaluator/AzurePolicyEvaluator.csproj @@ -12,7 +12,6 @@ true embedded true - win-x64 true https://github.com/JanneMattila/azure-policy-evaluator https://github.com/JanneMattila/azure-policy-evaluator diff --git a/src/AzurePolicyEvaluator/Evaluator.cs b/src/AzurePolicyEvaluator/Evaluator.cs index 86eabdf..a0c39b5 100644 --- a/src/AzurePolicyEvaluator/Evaluator.cs +++ b/src/AzurePolicyEvaluator/Evaluator.cs @@ -445,6 +445,8 @@ internal EvaluationResult ExecuteFieldEvaluation(JsonElement fieldObject, JsonEl propertyValue = propertyElement.GetString(); } + ArgumentNullException.ThrowIfNull(propertyValue); + result = FieldComparison(policy, propertyName, propertyValue); } } @@ -528,10 +530,12 @@ internal object RunTemplateFunctions(string text) { throw new KeyNotFoundException($"Parameter {parameters} not found."); } + ArgumentNullException.ThrowIfNull(requiredParameter.DefaultValue); return requiredParameter.DefaultValue; case TemplateFunctions.Concat: var concatParameters = parameters as List; + ArgumentNullException.ThrowIfNull(concatParameters); text = string.Join(string.Empty, concatParameters); break; } @@ -613,6 +617,8 @@ internal List ExecuteArrayFieldEvaluation(string propertyName, } propertyValue = propertyElement.GetString(); + ArgumentNullException.ThrowIfNull(propertyValue); + var result = FieldComparison(policy, nextName, propertyValue); results.Add(result); } diff --git a/src/AzurePolicyEvaluator/Program.cs b/src/AzurePolicyEvaluator/Program.cs index 81789ad..9959900 100644 --- a/src/AzurePolicyEvaluator/Program.cs +++ b/src/AzurePolicyEvaluator/Program.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Console; using System.CommandLine; +using System.IO; IServiceProvider serviceProvider; ILogger logger; @@ -73,6 +74,8 @@ 1. Evaluate a single policy file against a single test file. serviceProvider = services.BuildServiceProvider(); using var loggerFactory = serviceProvider.GetService(); + ArgumentNullException.ThrowIfNull(loggerFactory); + logger = loggerFactory.CreateLogger(); if (watch) @@ -146,6 +149,8 @@ void PolicyFilesChanged(object sender, FileSystemEventArgs e) { // Azure Policy file has been changed. Look for test files in sub-folders. var policyFolder = Directory.GetParent(policyFilename); + ArgumentNullException.ThrowIfNull(policyFolder); + testFiles = Directory.GetFiles(policyFolder.FullName, $"*.{EXTENSION}", SearchOption.AllDirectories) .Where(f => Path.GetFileNameWithoutExtension(f) != POLICY_FILE_NAME) .ToList(); @@ -155,9 +160,11 @@ void PolicyFilesChanged(object sender, FileSystemEventArgs e) // Test file has been changed. Look for policy file in parent folder. var testFile = new FileInfo(policyFilename); testFiles.Add(testFile.FullName); - string policyFile = null; + string? policyFile = null; var directory = testFile.Directory; + ArgumentNullException.ThrowIfNull(directory); + while (directory.FullName.Length >= rootFolder.Length) { logger.LogDebug($"Looking for policy file in {directory.FullName}..."); @@ -168,6 +175,7 @@ void PolicyFilesChanged(object sender, FileSystemEventArgs e) break; } directory = directory.Parent; + ArgumentNullException.ThrowIfNull(directory); } if (policyFile == null)