diff --git a/src/NuGet.Core/NuGet.Protocol/Model/PackageVulnerabilityMetadata.cs b/src/NuGet.Core/NuGet.Protocol/Model/PackageVulnerabilityMetadata.cs index c2b3f9e00e4..fcaa46f4d51 100644 --- a/src/NuGet.Core/NuGet.Protocol/Model/PackageVulnerabilityMetadata.cs +++ b/src/NuGet.Core/NuGet.Protocol/Model/PackageVulnerabilityMetadata.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#nullable disable - using System; using System.Text.Json.Serialization; using Newtonsoft.Json; @@ -11,10 +9,14 @@ namespace NuGet.Protocol { public class PackageVulnerabilityMetadata { + /// + /// NULL_INC: The advisory URL for this vulnerability. + /// Guaranteed non-null by the protocol: https://learn.microsoft.com/en-us/nuget/api/registration-base-url-resource#vulnerabilities + /// [JsonProperty(PropertyName = JsonProperties.AdvisoryUrl, ItemConverterType = typeof(SafeUriConverter))] [JsonPropertyName(JsonProperties.AdvisoryUrl)] [JsonInclude] - public Uri AdvisoryUrl { get; internal set; } + public Uri AdvisoryUrl { get; internal set; } = null!; [JsonProperty(PropertyName = JsonProperties.Severity)] [JsonPropertyName(JsonProperties.Severity)] @@ -24,10 +26,11 @@ public class PackageVulnerabilityMetadata public PackageVulnerabilityMetadata(Uri advisoryUrl, int severity) { - AdvisoryUrl = advisoryUrl; + AdvisoryUrl = advisoryUrl ?? throw new ArgumentNullException(nameof(advisoryUrl)); Severity = severity; } + // Parameterless constructor for JSON deserialization. public PackageVulnerabilityMetadata() { } diff --git a/src/NuGet.Core/NuGet.Protocol/Model/RegistrationIndex.cs b/src/NuGet.Core/NuGet.Protocol/Model/RegistrationIndex.cs index e8efbdc8d4c..530a6e5aafd 100644 --- a/src/NuGet.Core/NuGet.Protocol/Model/RegistrationIndex.cs +++ b/src/NuGet.Core/NuGet.Protocol/Model/RegistrationIndex.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; using Newtonsoft.Json; @@ -16,6 +14,6 @@ internal class RegistrationIndex { [JsonProperty("items")] [JsonPropertyName("items")] - public List Items { get; set; } + public List? Items { get; set; } } } diff --git a/src/NuGet.Core/NuGet.Protocol/Model/RegistrationLeafItem.cs b/src/NuGet.Core/NuGet.Protocol/Model/RegistrationLeafItem.cs index d8f8c12fdb0..e2b7c1bc16e 100644 --- a/src/NuGet.Core/NuGet.Protocol/Model/RegistrationLeafItem.cs +++ b/src/NuGet.Core/NuGet.Protocol/Model/RegistrationLeafItem.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#nullable disable - using System; using System.Text.Json.Serialization; using Newtonsoft.Json; @@ -16,10 +14,10 @@ internal class RegistrationLeafItem { [JsonProperty("catalogEntry")] [JsonPropertyName("catalogEntry")] - public PackageSearchMetadataRegistration CatalogEntry { get; set; } + public PackageSearchMetadataRegistration? CatalogEntry { get; set; } [JsonProperty(PropertyName = JsonProperties.PackageContent)] [JsonPropertyName(JsonProperties.PackageContent)] - public Uri PackageContent { get; set; } + public Uri? PackageContent { get; set; } } } diff --git a/src/NuGet.Core/NuGet.Protocol/Model/RegistrationPage.cs b/src/NuGet.Core/NuGet.Protocol/Model/RegistrationPage.cs index 4be45fe1ba4..b0b813d03b2 100644 --- a/src/NuGet.Core/NuGet.Protocol/Model/RegistrationPage.cs +++ b/src/NuGet.Core/NuGet.Protocol/Model/RegistrationPage.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#nullable disable - using System.Collections.Generic; using System.Text.Json.Serialization; using Newtonsoft.Json; @@ -16,9 +14,11 @@ namespace NuGet.Protocol.Model /// internal class RegistrationPage { + // NULL_INC: Annotated as non-null per protocol spec (link above). JSON deserialization may leave these + // as null if the server sends malformed data, but existing code assumes non-null without checks. [JsonProperty("@id")] [JsonPropertyName("@id")] - public string Url { get; set; } + public string Url { get; set; } = null!; /// /// This property can be null when this model is used as an item in when @@ -27,14 +27,18 @@ internal class RegistrationPage /// [JsonProperty("items")] [JsonPropertyName("items")] - public List Items { get; set; } + public List? Items { get; set; } + // NULL_INC: Annotated as non-null per protocol spec (link above). JSON deserialization may leave these + // as null if the server sends malformed data, but existing code assumes non-null without checks. [JsonProperty("lower")] [JsonPropertyName("lower")] - public string Lower { get; set; } + public string Lower { get; set; } = null!; + // NULL_INC: Annotated as non-null per protocol spec (link above). JSON deserialization may leave these + // as null if the server sends malformed data, but existing code assumes non-null without checks. [JsonProperty("upper")] [JsonPropertyName("upper")] - public string Upper { get; set; } + public string Upper { get; set; } = null!; } } diff --git a/src/NuGet.Core/NuGet.Protocol/Providers/RepositorySignatureResourceProvider.cs b/src/NuGet.Core/NuGet.Protocol/Providers/RepositorySignatureResourceProvider.cs index 4c561560eea..6e945e07f88 100644 --- a/src/NuGet.Core/NuGet.Protocol/Providers/RepositorySignatureResourceProvider.cs +++ b/src/NuGet.Core/NuGet.Protocol/Providers/RepositorySignatureResourceProvider.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#nullable disable - using System; using System.Globalization; using System.Linq; @@ -18,11 +16,11 @@ namespace NuGet.Protocol { public class RepositorySignatureResourceProvider : ResourceProvider { - private readonly IEnvironmentVariableReader _environmentVariableReader; + private readonly IEnvironmentVariableReader? _environmentVariableReader; public RepositorySignatureResourceProvider() : this(null) { } - internal RepositorySignatureResourceProvider(IEnvironmentVariableReader environmentVariableReader) + internal RepositorySignatureResourceProvider(IEnvironmentVariableReader? environmentVariableReader) : base(typeof(RepositorySignatureResource), nameof(RepositorySignatureResource), NuGetResourceProviderPositions.Last) @@ -30,9 +28,9 @@ internal RepositorySignatureResourceProvider(IEnvironmentVariableReader environm _environmentVariableReader = environmentVariableReader; } - public override async Task> TryCreate(SourceRepository source, CancellationToken token) + public override async Task> TryCreate(SourceRepository source, CancellationToken token) { - RepositorySignatureResource resource = null; + RepositorySignatureResource? resource = null; var serviceIndex = await source.GetResourceAsync(token); if (serviceIndex != null) { @@ -44,10 +42,10 @@ public override async Task> TryCreate(SourceReposito } } - return new Tuple(resource != null, resource); + return new Tuple(resource != null, resource); } - private async Task GetRepositorySignatureResourceAsync( + private async Task GetRepositorySignatureResourceAsync( SourceRepository source, ServiceIndexEntry serviceEntry, ILogger log, @@ -62,7 +60,8 @@ private async Task GetRepositorySignatureResourceAs throw new FatalProtocolException(string.Format(CultureInfo.CurrentCulture, Strings.RepositorySignaturesResourceMustBeHttps, source.PackageSource.Source)); } - var httpSourceResource = await source.GetResourceAsync(token); + var httpSourceResource = await source.GetResourceAsync(token) + ?? throw new InvalidOperationException($"The source '{source.PackageSource.Source}' does not provide {nameof(HttpSourceResource)}."); var client = httpSourceResource.HttpSource; var cacheKey = GenerateCacheKey(serviceEntry); @@ -91,9 +90,10 @@ private async Task GetRepositorySignatureResourceAs async httpSourceResult => { var model = await JsonSerializer.DeserializeAsync( - httpSourceResult.Stream, + httpSourceResult.Stream!, RepositorySignatureJsonContext.Default.RepositorySignatureModel, - token); + token) + ?? throw new FatalProtocolException(string.Format(CultureInfo.CurrentCulture, Strings.Log_FailedToReadRepositorySignature, repositorySignaturesResourceUri.AbsoluteUri)); return new RepositorySignatureResource(model, source); }, log, @@ -117,14 +117,15 @@ private async Task GetRepositorySignatureResourceAs if (NuGetFeatureFlags.IsSystemTextJsonDeserializationEnabledByEnvironment(_environmentVariableReader)) { var model = await JsonSerializer.DeserializeAsync( - httpSourceResult.Stream, + httpSourceResult.Stream!, RepositorySignatureJsonContext.Default.RepositorySignatureModel, - token); + token) + ?? throw new FatalProtocolException(string.Format(CultureInfo.CurrentCulture, Strings.Log_FailedToReadRepositorySignature, repositorySignaturesResourceUri.AbsoluteUri)); return new RepositorySignatureResource(model, source); } else { - var json = await httpSourceResult.Stream.AsJObjectAsync(token); + var json = (await httpSourceResult.Stream!.AsJObjectAsync(token))!; #pragma warning disable IL2026, IL3050 // Legacy Newtonsoft.Json code path is unreachable when feature switch is true; ILC trims this branch in AOT return new RepositorySignatureResource(json, source); #pragma warning restore IL2026, IL3050 diff --git a/src/NuGet.Core/NuGet.Protocol/Providers/ServiceIndexResourceV3Provider.cs b/src/NuGet.Core/NuGet.Protocol/Providers/ServiceIndexResourceV3Provider.cs index 80959914426..57f971cfe07 100644 --- a/src/NuGet.Core/NuGet.Protocol/Providers/ServiceIndexResourceV3Provider.cs +++ b/src/NuGet.Core/NuGet.Protocol/Providers/ServiceIndexResourceV3Provider.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#nullable disable - using System; using System.Collections.Concurrent; using System.Globalization; @@ -31,7 +29,7 @@ public class ServiceIndexResourceV3Provider : ResourceProvider private readonly ConcurrentDictionary _cache; private readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1); private readonly EnhancedHttpRetryHelper _enhancedHttpRetryHelper; - private readonly IEnvironmentVariableReader _environmentVariableReader; + private readonly IEnvironmentVariableReader? _environmentVariableReader; /// /// Maximum amount of time to store index.json @@ -40,7 +38,7 @@ public class ServiceIndexResourceV3Provider : ResourceProvider public ServiceIndexResourceV3Provider() : this(environmentVariableReader: null) { } - internal ServiceIndexResourceV3Provider(IEnvironmentVariableReader environmentVariableReader) + internal ServiceIndexResourceV3Provider(IEnvironmentVariableReader? environmentVariableReader) : base(typeof(ServiceIndexResourceV3), nameof(ServiceIndexResourceV3Provider), NuGetResourceProviderPositions.Last) @@ -51,10 +49,10 @@ internal ServiceIndexResourceV3Provider(IEnvironmentVariableReader environmentVa _enhancedHttpRetryHelper = new EnhancedHttpRetryHelper(environmentVariableReader ?? EnvironmentVariableWrapper.Instance); } - public override async Task> TryCreate(SourceRepository source, CancellationToken token) + public override async Task> TryCreate(SourceRepository source, CancellationToken token) { - ServiceIndexResourceV3 index = null; - ServiceIndexCacheInfo cacheInfo = null; + ServiceIndexResourceV3? index = null; + ServiceIndexCacheInfo? cacheInfo = null; var url = source.PackageSource.Source; // the file type can easily rule out if we need to request the url @@ -102,7 +100,7 @@ public override async Task> TryCreate(SourceReposito index = cacheInfo.Index; } - return new Tuple(index != null, index); + return new Tuple(index != null, index); } /// @@ -116,14 +114,15 @@ public override async Task> TryCreate(SourceReposito /// Logged to any provided as LogMinimal prior to throwing. /// Encapsulates all other exceptions. /// - private async Task GetServiceIndexResourceV3( + private async Task GetServiceIndexResourceV3( SourceRepository source, DateTime utcNow, ILogger log, CancellationToken token) { var url = source.PackageSource.Source; - var httpSourceResource = await source.GetResourceAsync(token); + var httpSourceResource = await source.GetResourceAsync(token) + ?? throw new InvalidOperationException($"The source '{source.PackageSource.Source}' does not provide {nameof(HttpSourceResource)}."); var client = httpSourceResource.HttpSource; int maxRetries = _enhancedHttpRetryHelper.RetryCountOrDefault; @@ -149,7 +148,7 @@ private async Task GetServiceIndexResourceV3( }, async httpSourceResult => { - var result = await ConsumeServiceIndexStreamAsync(httpSourceResult.Stream, utcNow, source.PackageSource, token); + var result = await ConsumeServiceIndexStreamAsync(httpSourceResult.Stream!, utcNow, source.PackageSource, token); return result; }, @@ -211,7 +210,7 @@ private async Task ConsumeServiceIndexStreamAsync(Stream private static async Task ConsumeServiceIndexStreamStjAsync(Stream stream, DateTime utcNow, PackageSource source, CancellationToken token) { - ServiceIndexModel index; + ServiceIndexModel? index; try { index = await JsonSerializer.DeserializeAsync(stream, JsonContext.Default.ServiceIndexModel, token); @@ -233,7 +232,7 @@ private static async Task ConsumeServiceIndexStreamStjAs } // Use SemVer instead of NuGetVersion; the service index should always be in strict SemVer format. - if (!SemanticVersion.TryParse(index.Version, out SemanticVersion version) || version.Major != 3) + if (!SemanticVersion.TryParse(index.Version, out SemanticVersion? version) || version.Major != 3) { throw new InvalidDataException(string.Format( CultureInfo.CurrentCulture, @@ -247,16 +246,16 @@ private static async Task ConsumeServiceIndexStreamStjAs private static async Task ConsumeServiceIndexStreamNsjAsync(Stream stream, DateTime utcNow, PackageSource source, CancellationToken token) { // Parse the JSON - JObject json = await stream.AsJObjectAsync(token); + JObject json = (await stream.AsJObjectAsync(token))!; // Use SemVer instead of NuGetVersion, the service index should always be // in strict SemVer format - JToken versionToken; + JToken? versionToken; if (json.TryGetValue("version", out versionToken) && versionToken.Type == JTokenType.String) { - SemanticVersion version; - if (SemanticVersion.TryParse((string)versionToken, out version) && + SemanticVersion? version; + if (SemanticVersion.TryParse((string)versionToken!, out version) && version.Major == 3) { #pragma warning disable IL2026, IL3050 // Legacy Newtonsoft.Json code path is unreachable when feature switch is true; ILC trims this branch in AOT @@ -268,7 +267,7 @@ private static async Task ConsumeServiceIndexStreamNsjAs string errorMessage = string.Format( CultureInfo.CurrentCulture, Strings.Protocol_UnsupportedVersion, - (string)versionToken); + (string?)versionToken); throw new InvalidDataException(errorMessage); } } @@ -280,7 +279,7 @@ private static async Task ConsumeServiceIndexStreamNsjAs protected class ServiceIndexCacheInfo { - public ServiceIndexResourceV3 Index { get; set; } + public ServiceIndexResourceV3? Index { get; set; } public DateTime CachedTime { get; set; } } diff --git a/src/NuGet.Core/NuGet.Protocol/PublicAPI/net472/PublicAPI.Shipped.txt b/src/NuGet.Core/NuGet.Protocol/PublicAPI/net472/PublicAPI.Shipped.txt index fb6555a4e3c..ee4975bb628 100644 --- a/src/NuGet.Core/NuGet.Protocol/PublicAPI/net472/PublicAPI.Shipped.txt +++ b/src/NuGet.Core/NuGet.Protocol/PublicAPI/net472/PublicAPI.Shipped.txt @@ -832,9 +832,9 @@ NuGet.Protocol.PackageUpdateResourceV2Provider.PackageUpdateResourceV2Provider() NuGet.Protocol.PackageUpdateResourceV3Provider NuGet.Protocol.PackageUpdateResourceV3Provider.PackageUpdateResourceV3Provider() -> void NuGet.Protocol.PackageVulnerabilityMetadata -~NuGet.Protocol.PackageVulnerabilityMetadata.AdvisoryUrl.get -> System.Uri +NuGet.Protocol.PackageVulnerabilityMetadata.AdvisoryUrl.get -> System.Uri! NuGet.Protocol.PackageVulnerabilityMetadata.PackageVulnerabilityMetadata() -> void -~NuGet.Protocol.PackageVulnerabilityMetadata.PackageVulnerabilityMetadata(System.Uri advisoryUrl, int severity) -> void +NuGet.Protocol.PackageVulnerabilityMetadata.PackageVulnerabilityMetadata(System.Uri! advisoryUrl, int severity) -> void NuGet.Protocol.PackageVulnerabilityMetadata.Severity.get -> int NuGet.Protocol.PackageVulnerabilitySeverity NuGet.Protocol.PackageVulnerabilitySeverity.Critical = 3 -> NuGet.Protocol.PackageVulnerabilitySeverity @@ -1391,10 +1391,10 @@ NuGet.Protocol.RepositoryCertificateInfo.RepositoryCertificateInfo() -> void NuGet.Protocol.RepositoryCertificateInfo.Subject.get -> string! NuGet.Protocol.RepositorySignatureResource NuGet.Protocol.RepositorySignatureResource.AllRepositorySigned.get -> bool -~NuGet.Protocol.RepositorySignatureResource.RepositoryCertificateInfos.get -> System.Collections.Generic.IEnumerable -~NuGet.Protocol.RepositorySignatureResource.RepositorySignatureResource(Newtonsoft.Json.Linq.JObject repoSignInformationContent, NuGet.Protocol.Core.Types.SourceRepository source) -> void -~NuGet.Protocol.RepositorySignatureResource.RepositorySignatureResource(bool allRepositorySigned, System.Collections.Generic.IEnumerable repositoryCertInfos) -> void -~NuGet.Protocol.RepositorySignatureResource.Source.get -> string +NuGet.Protocol.RepositorySignatureResource.RepositoryCertificateInfos.get -> System.Collections.Generic.IEnumerable! +NuGet.Protocol.RepositorySignatureResource.RepositorySignatureResource(Newtonsoft.Json.Linq.JObject! repoSignInformationContent, NuGet.Protocol.Core.Types.SourceRepository! source) -> void +NuGet.Protocol.RepositorySignatureResource.RepositorySignatureResource(bool allRepositorySigned, System.Collections.Generic.IEnumerable! repositoryCertInfos) -> void +NuGet.Protocol.RepositorySignatureResource.Source.get -> string! NuGet.Protocol.RepositorySignatureResource.UpdateRepositorySignatureInfo() -> void NuGet.Protocol.RepositorySignatureResourceProvider NuGet.Protocol.RepositorySignatureResourceProvider.RepositorySignatureResourceProvider() -> void @@ -1423,15 +1423,15 @@ NuGet.Protocol.ServiceIndexEntry.ServiceIndexEntry(System.Uri! serviceUri, strin NuGet.Protocol.ServiceIndexEntry.Type.get -> string! NuGet.Protocol.ServiceIndexEntry.Uri.get -> System.Uri! NuGet.Protocol.ServiceIndexResourceV3 -~NuGet.Protocol.ServiceIndexResourceV3.ServiceIndexResourceV3(Newtonsoft.Json.Linq.JObject index, System.DateTime requestTime) -> void +NuGet.Protocol.ServiceIndexResourceV3.ServiceIndexResourceV3(Newtonsoft.Json.Linq.JObject! index, System.DateTime requestTime) -> void NuGet.Protocol.ServiceIndexResourceV3Provider NuGet.Protocol.ServiceIndexResourceV3Provider.MaxCacheDuration.get -> System.TimeSpan NuGet.Protocol.ServiceIndexResourceV3Provider.MaxCacheDuration.set -> void NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.CachedTime.get -> System.DateTime NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.CachedTime.set -> void -~NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.Index.get -> NuGet.Protocol.ServiceIndexResourceV3 -~NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.Index.set -> void +NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.Index.get -> NuGet.Protocol.ServiceIndexResourceV3? +NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.Index.set -> void NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.ServiceIndexCacheInfo() -> void NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexResourceV3Provider() -> void NuGet.Protocol.ServiceTypes @@ -1859,7 +1859,7 @@ override NuGet.Protocol.ProxyAuthenticationHandler.SendAsync(System.Net.Http.Htt ~override NuGet.Protocol.RemoteV3FindPackageByIdResource.GetPackageDownloaderAsync(NuGet.Packaging.Core.PackageIdentity packageIdentity, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger logger, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task ~override NuGet.Protocol.RemoteV3FindPackageByIdResourceProvider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository sourceRepository, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> ~override NuGet.Protocol.ReportAbuseResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> -~override NuGet.Protocol.RepositorySignatureResourceProvider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> +override NuGet.Protocol.RepositorySignatureResourceProvider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository! source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task!>! override NuGet.Protocol.SafeBoolConverter.CanConvert(System.Type! objectType) -> bool override NuGet.Protocol.SafeBoolConverter.CanRead.get -> bool override NuGet.Protocol.SafeBoolConverter.CanWrite.get -> bool @@ -1874,7 +1874,7 @@ override NuGet.Protocol.SemanticVersionConverter.CanConvert(System.Type! objectT override NuGet.Protocol.SemanticVersionConverter.ReadJson(Newtonsoft.Json.JsonReader! reader, System.Type! objectType, object? existingValue, Newtonsoft.Json.JsonSerializer! serializer) -> object? override NuGet.Protocol.SemanticVersionConverter.WriteJson(Newtonsoft.Json.JsonWriter! writer, object? value, Newtonsoft.Json.JsonSerializer! serializer) -> void override NuGet.Protocol.ServerWarningLogHandler.SendAsync(System.Net.Http.HttpRequestMessage! request, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! -~override NuGet.Protocol.ServiceIndexResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> +override NuGet.Protocol.ServiceIndexResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository! source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task!>! override NuGet.Protocol.StsAuthenticationHandler.SendAsync(System.Net.Http.HttpRequestMessage! request, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! ~override NuGet.Protocol.SymbolPackageUpdateResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> ~override NuGet.Protocol.V2FeedListResource.ListAsync(string searchTerm, bool prerelease, bool allVersions, bool includeDelisted, NuGet.Common.ILogger logger, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> @@ -2128,11 +2128,11 @@ virtual NuGet.Protocol.Plugins.Receiver.Close() -> void ~virtual NuGet.Protocol.RegistrationResourceV3.GetUri(NuGet.Packaging.Core.PackageIdentity package) -> System.Uri ~virtual NuGet.Protocol.RegistrationResourceV3.GetUri(string id, NuGet.Versioning.NuGetVersion version) -> System.Uri ~virtual NuGet.Protocol.RegistrationResourceV3.GetUri(string packageId) -> System.Uri -~virtual NuGet.Protocol.ServiceIndexResourceV3.Entries.get -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntries(NuGet.Versioning.NuGetVersion clientVersion, params string[] orderedTypes) -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntries(params string[] orderedTypes) -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUri(params string[] orderedTypes) -> System.Uri -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUris(NuGet.Versioning.NuGetVersion clientVersion, params string[] orderedTypes) -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUris(params string[] orderedTypes) -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.Json.get -> string +virtual NuGet.Protocol.ServiceIndexResourceV3.Entries.get -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntries(NuGet.Versioning.NuGetVersion! clientVersion, params string![]! orderedTypes) -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntries(params string![]! orderedTypes) -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUri(params string![]! orderedTypes) -> System.Uri? +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUris(NuGet.Versioning.NuGetVersion! clientVersion, params string![]! orderedTypes) -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUris(params string![]! orderedTypes) -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.Json.get -> string! virtual NuGet.Protocol.ServiceIndexResourceV3.RequestTime.get -> System.DateTime diff --git a/src/NuGet.Core/NuGet.Protocol/PublicAPI/net8.0/PublicAPI.Shipped.txt b/src/NuGet.Core/NuGet.Protocol/PublicAPI/net8.0/PublicAPI.Shipped.txt index ac16caf446e..82405e42c24 100644 --- a/src/NuGet.Core/NuGet.Protocol/PublicAPI/net8.0/PublicAPI.Shipped.txt +++ b/src/NuGet.Core/NuGet.Protocol/PublicAPI/net8.0/PublicAPI.Shipped.txt @@ -832,9 +832,9 @@ NuGet.Protocol.PackageUpdateResourceV2Provider.PackageUpdateResourceV2Provider() NuGet.Protocol.PackageUpdateResourceV3Provider NuGet.Protocol.PackageUpdateResourceV3Provider.PackageUpdateResourceV3Provider() -> void NuGet.Protocol.PackageVulnerabilityMetadata -~NuGet.Protocol.PackageVulnerabilityMetadata.AdvisoryUrl.get -> System.Uri +NuGet.Protocol.PackageVulnerabilityMetadata.AdvisoryUrl.get -> System.Uri! NuGet.Protocol.PackageVulnerabilityMetadata.PackageVulnerabilityMetadata() -> void -~NuGet.Protocol.PackageVulnerabilityMetadata.PackageVulnerabilityMetadata(System.Uri advisoryUrl, int severity) -> void +NuGet.Protocol.PackageVulnerabilityMetadata.PackageVulnerabilityMetadata(System.Uri! advisoryUrl, int severity) -> void NuGet.Protocol.PackageVulnerabilityMetadata.Severity.get -> int NuGet.Protocol.PackageVulnerabilitySeverity NuGet.Protocol.PackageVulnerabilitySeverity.Critical = 3 -> NuGet.Protocol.PackageVulnerabilitySeverity @@ -1391,10 +1391,10 @@ NuGet.Protocol.RepositoryCertificateInfo.RepositoryCertificateInfo() -> void NuGet.Protocol.RepositoryCertificateInfo.Subject.get -> string! NuGet.Protocol.RepositorySignatureResource NuGet.Protocol.RepositorySignatureResource.AllRepositorySigned.get -> bool -~NuGet.Protocol.RepositorySignatureResource.RepositoryCertificateInfos.get -> System.Collections.Generic.IEnumerable -~NuGet.Protocol.RepositorySignatureResource.RepositorySignatureResource(Newtonsoft.Json.Linq.JObject repoSignInformationContent, NuGet.Protocol.Core.Types.SourceRepository source) -> void -~NuGet.Protocol.RepositorySignatureResource.RepositorySignatureResource(bool allRepositorySigned, System.Collections.Generic.IEnumerable repositoryCertInfos) -> void -~NuGet.Protocol.RepositorySignatureResource.Source.get -> string +NuGet.Protocol.RepositorySignatureResource.RepositoryCertificateInfos.get -> System.Collections.Generic.IEnumerable! +NuGet.Protocol.RepositorySignatureResource.RepositorySignatureResource(Newtonsoft.Json.Linq.JObject! repoSignInformationContent, NuGet.Protocol.Core.Types.SourceRepository! source) -> void +NuGet.Protocol.RepositorySignatureResource.RepositorySignatureResource(bool allRepositorySigned, System.Collections.Generic.IEnumerable! repositoryCertInfos) -> void +NuGet.Protocol.RepositorySignatureResource.Source.get -> string! NuGet.Protocol.RepositorySignatureResource.UpdateRepositorySignatureInfo() -> void NuGet.Protocol.RepositorySignatureResourceProvider NuGet.Protocol.RepositorySignatureResourceProvider.RepositorySignatureResourceProvider() -> void @@ -1423,15 +1423,15 @@ NuGet.Protocol.ServiceIndexEntry.ServiceIndexEntry(System.Uri! serviceUri, strin NuGet.Protocol.ServiceIndexEntry.Type.get -> string! NuGet.Protocol.ServiceIndexEntry.Uri.get -> System.Uri! NuGet.Protocol.ServiceIndexResourceV3 -~NuGet.Protocol.ServiceIndexResourceV3.ServiceIndexResourceV3(Newtonsoft.Json.Linq.JObject index, System.DateTime requestTime) -> void +NuGet.Protocol.ServiceIndexResourceV3.ServiceIndexResourceV3(Newtonsoft.Json.Linq.JObject! index, System.DateTime requestTime) -> void NuGet.Protocol.ServiceIndexResourceV3Provider NuGet.Protocol.ServiceIndexResourceV3Provider.MaxCacheDuration.get -> System.TimeSpan NuGet.Protocol.ServiceIndexResourceV3Provider.MaxCacheDuration.set -> void NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.CachedTime.get -> System.DateTime NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.CachedTime.set -> void -~NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.Index.get -> NuGet.Protocol.ServiceIndexResourceV3 -~NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.Index.set -> void +NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.Index.get -> NuGet.Protocol.ServiceIndexResourceV3? +NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.Index.set -> void NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexCacheInfo.ServiceIndexCacheInfo() -> void NuGet.Protocol.ServiceIndexResourceV3Provider.ServiceIndexResourceV3Provider() -> void NuGet.Protocol.ServiceTypes @@ -1850,7 +1850,7 @@ override NuGet.Protocol.ProxyAuthenticationHandler.SendAsync(System.Net.Http.Htt ~override NuGet.Protocol.RemoteV3FindPackageByIdResource.GetPackageDownloaderAsync(NuGet.Packaging.Core.PackageIdentity packageIdentity, NuGet.Protocol.Core.Types.SourceCacheContext cacheContext, NuGet.Common.ILogger logger, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task ~override NuGet.Protocol.RemoteV3FindPackageByIdResourceProvider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository sourceRepository, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> ~override NuGet.Protocol.ReportAbuseResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> -~override NuGet.Protocol.RepositorySignatureResourceProvider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> +override NuGet.Protocol.RepositorySignatureResourceProvider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository! source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task!>! override NuGet.Protocol.SafeBoolConverter.CanConvert(System.Type! objectType) -> bool override NuGet.Protocol.SafeBoolConverter.CanRead.get -> bool override NuGet.Protocol.SafeBoolConverter.CanWrite.get -> bool @@ -1865,7 +1865,7 @@ override NuGet.Protocol.SemanticVersionConverter.CanConvert(System.Type! objectT override NuGet.Protocol.SemanticVersionConverter.ReadJson(Newtonsoft.Json.JsonReader! reader, System.Type! objectType, object? existingValue, Newtonsoft.Json.JsonSerializer! serializer) -> object? override NuGet.Protocol.SemanticVersionConverter.WriteJson(Newtonsoft.Json.JsonWriter! writer, object? value, Newtonsoft.Json.JsonSerializer! serializer) -> void override NuGet.Protocol.ServerWarningLogHandler.SendAsync(System.Net.Http.HttpRequestMessage! request, System.Threading.CancellationToken cancellationToken) -> System.Threading.Tasks.Task! -~override NuGet.Protocol.ServiceIndexResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> +override NuGet.Protocol.ServiceIndexResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository! source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task!>! ~override NuGet.Protocol.SymbolPackageUpdateResourceV3Provider.TryCreate(NuGet.Protocol.Core.Types.SourceRepository source, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> ~override NuGet.Protocol.V2FeedListResource.ListAsync(string searchTerm, bool prerelease, bool allVersions, bool includeDelisted, NuGet.Common.ILogger logger, System.Threading.CancellationToken token) -> System.Threading.Tasks.Task> ~override NuGet.Protocol.V2FeedListResource.Source.get -> string @@ -2116,11 +2116,11 @@ virtual NuGet.Protocol.Plugins.Receiver.Close() -> void ~virtual NuGet.Protocol.RegistrationResourceV3.GetUri(NuGet.Packaging.Core.PackageIdentity package) -> System.Uri ~virtual NuGet.Protocol.RegistrationResourceV3.GetUri(string id, NuGet.Versioning.NuGetVersion version) -> System.Uri ~virtual NuGet.Protocol.RegistrationResourceV3.GetUri(string packageId) -> System.Uri -~virtual NuGet.Protocol.ServiceIndexResourceV3.Entries.get -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntries(NuGet.Versioning.NuGetVersion clientVersion, params string[] orderedTypes) -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntries(params string[] orderedTypes) -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUri(params string[] orderedTypes) -> System.Uri -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUris(NuGet.Versioning.NuGetVersion clientVersion, params string[] orderedTypes) -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUris(params string[] orderedTypes) -> System.Collections.Generic.IReadOnlyList -~virtual NuGet.Protocol.ServiceIndexResourceV3.Json.get -> string +virtual NuGet.Protocol.ServiceIndexResourceV3.Entries.get -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntries(NuGet.Versioning.NuGetVersion! clientVersion, params string![]! orderedTypes) -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntries(params string![]! orderedTypes) -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUri(params string![]! orderedTypes) -> System.Uri? +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUris(NuGet.Versioning.NuGetVersion! clientVersion, params string![]! orderedTypes) -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.GetServiceEntryUris(params string![]! orderedTypes) -> System.Collections.Generic.IReadOnlyList! +virtual NuGet.Protocol.ServiceIndexResourceV3.Json.get -> string! virtual NuGet.Protocol.ServiceIndexResourceV3.RequestTime.get -> System.DateTime diff --git a/src/NuGet.Core/NuGet.Protocol/Resources/RepositorySignatureResource.cs b/src/NuGet.Core/NuGet.Protocol/Resources/RepositorySignatureResource.cs index a5dd23120b9..9b0ae76970d 100644 --- a/src/NuGet.Core/NuGet.Protocol/Resources/RepositorySignatureResource.cs +++ b/src/NuGet.Core/NuGet.Protocol/Resources/RepositorySignatureResource.cs @@ -1,8 +1,6 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -#nullable disable - using System; using System.Collections.Generic; #if NET5_0_OR_GREATER @@ -38,12 +36,12 @@ public RepositorySignatureResource(JObject repoSignInformationContent, SourceRep throw new FatalProtocolException(string.Format(CultureInfo.CurrentCulture, Strings.Log_FailedToParseRepoSignInfor, JsonProperties.SigningCertificates, source.PackageSource.Source)); AllRepositorySigned = allRepositorySigned; - RepositoryCertificateInfos = data.OfType().Select(p => p.FromJToken()); + RepositoryCertificateInfos = data.OfType().Select(p => p.FromJToken()!); foreach (var repositoryCertificateInfo in RepositoryCertificateInfos) { - var validUri = Uri.TryCreate(repositoryCertificateInfo.ContentUrl, UriKind.Absolute, out var repositoryContentUrl); - if (!validUri || !string.Equals(repositoryContentUrl.Scheme, "https", StringComparison.OrdinalIgnoreCase)) + if (!Uri.TryCreate(repositoryCertificateInfo.ContentUrl, UriKind.Absolute, out Uri? repositoryContentUrl) + || !string.Equals(repositoryContentUrl.Scheme, "https", StringComparison.OrdinalIgnoreCase)) { throw new FatalProtocolException(Strings.RepositoryContentUrlMustBeHttps); } @@ -54,6 +52,9 @@ public RepositorySignatureResource(JObject repoSignInformationContent, SourceRep internal RepositorySignatureResource(RepositorySignatureModel model, SourceRepository source) { + _ = model ?? throw new ArgumentNullException(nameof(model)); + _ = source ?? throw new ArgumentNullException(nameof(source)); + AllRepositorySigned = model.AllRepositorySigned ?? throw new FatalProtocolException(string.Format(CultureInfo.CurrentCulture, Strings.Log_FailedToParseRepoSignInfor, JsonProperties.AllRepositorySigned, source.PackageSource.Source)); @@ -62,7 +63,7 @@ internal RepositorySignatureResource(RepositorySignatureModel model, SourceRepos foreach (RepositoryCertificateInfo cert in certs) { - if (!Uri.TryCreate(cert.ContentUrl, UriKind.Absolute, out Uri contentUrl) + if (!Uri.TryCreate(cert.ContentUrl, UriKind.Absolute, out Uri? contentUrl) || !string.Equals(contentUrl.Scheme, "https", StringComparison.OrdinalIgnoreCase)) { throw new FatalProtocolException(Strings.RepositoryContentUrlMustBeHttps); @@ -78,6 +79,7 @@ public RepositorySignatureResource(bool allRepositorySigned, IEnumerable public class ServiceIndexResourceV3 : INuGetResource { - private string _json; - private readonly ServiceIndexModel _model; + private string? _json; + private readonly ServiceIndexModel? _model; private readonly IDictionary> _index; private readonly DateTime _requestTime; private static readonly IReadOnlyList _emptyEntries = new List(); @@ -37,8 +35,9 @@ public class ServiceIndexResourceV3 : INuGetResource [RequiresUnreferencedCode("Uses Newtonsoft.Json reflection-based deserialization.")] [RequiresDynamicCode("Uses Newtonsoft.Json reflection-based deserialization.")] #endif - internal ServiceIndexResourceV3(JObject index, DateTime requestTime, PackageSource packageSource) + internal ServiceIndexResourceV3(JObject index, DateTime requestTime, PackageSource? packageSource) { + _ = index ?? throw new ArgumentNullException(nameof(index)); _json = index.ToString(); _index = MakeLookup(index, packageSource); _requestTime = requestTime; @@ -48,10 +47,11 @@ internal ServiceIndexResourceV3(JObject index, DateTime requestTime, PackageSour [RequiresUnreferencedCode("Uses Newtonsoft.Json reflection-based deserialization.")] [RequiresDynamicCode("Uses Newtonsoft.Json reflection-based deserialization.")] #endif - public ServiceIndexResourceV3(JObject index, DateTime requestTime) : this(index, requestTime, null) { } + public ServiceIndexResourceV3(JObject index, DateTime requestTime) : this(index, requestTime, packageSource: null) { } - internal ServiceIndexResourceV3(ServiceIndexModel model, DateTime requestTime, PackageSource packageSource) + internal ServiceIndexResourceV3(ServiceIndexModel model, DateTime requestTime, PackageSource? packageSource) { + _ = model ?? throw new ArgumentNullException(nameof(model)); _model = model; _index = MakeLookup(model, packageSource); _requestTime = requestTime; @@ -78,7 +78,7 @@ public virtual IReadOnlyList Entries public virtual string Json { - get { return _json ??= JsonSerializer.Serialize(_model, JsonContext.Default.ServiceIndexModel); } + get { return _json ??= JsonSerializer.Serialize(_model!, JsonContext.Default.ServiceIndexModel); } } /// @@ -103,7 +103,7 @@ public virtual IReadOnlyList GetServiceEntries(NuGetVersion c foreach (var type in orderedTypes) { - List entries; + List? entries; if (_index.TryGetValue(type, out entries)) { var compatible = GetBestVersionMatchForType(clientVersion, entries); @@ -137,7 +137,7 @@ private IReadOnlyList GetBestVersionMatchForType(NuGetVersion /// /// Get the best match service URI. /// - public virtual Uri GetServiceEntryUri(params string[] orderedTypes) + public virtual Uri? GetServiceEntryUri(params string[] orderedTypes) { var clientVersion = MinClientVersionUtility.GetNuGetClientVersion(); @@ -167,8 +167,7 @@ public virtual IReadOnlyList GetServiceEntryUris(NuGetVersion clientVersion return GetServiceEntries(clientVersion, orderedTypes).Select(e => e.Uri).ToList(); } -#nullable enable - private static IDictionary> MakeLookup(ServiceIndexModel index, PackageSource packageSource) + private static IDictionary> MakeLookup(ServiceIndexModel index, PackageSource? packageSource) { var result = new Dictionary>(StringComparer.Ordinal); @@ -233,20 +232,18 @@ private static IDictionary> MakeLookup(ServiceIn return result; } -#nullable disable - - private static IDictionary> MakeLookup(JObject index, PackageSource packageSource) + private static IDictionary> MakeLookup(JObject index, PackageSource? packageSource) { var result = new Dictionary>(StringComparer.Ordinal); - JToken resources; + JToken? resources; if (index.TryGetValue("resources", out resources)) { foreach (var resource in resources) { var id = GetValues(resource["@id"]).SingleOrDefault(); - Uri uri; + Uri? uri; if (string.IsNullOrEmpty(id) || !Uri.TryCreate(id, UriKind.Absolute, out uri)) { // Skip invalid or missing @ids @@ -274,7 +271,7 @@ private static IDictionary> MakeLookup(JObject i // Parse supported versions foreach (var versionString in GetValues(clientVersionToken)) { - SemanticVersion version; + SemanticVersion? version; if (SemanticVersion.TryParse(versionString, out version)) { clientVersions.Add(version); @@ -287,7 +284,7 @@ private static IDictionary> MakeLookup(JObject i { foreach (var version in clientVersions) { - List entries; + List? entries; if (!result.TryGetValue(type, out entries)) { entries = new List(); @@ -317,7 +314,7 @@ private static IDictionary> MakeLookup(JObject i [UnconditionalSuppressMessage("AOT", "IL2026", Justification = "Only called from JObject constructor which is annotated with [RUC]/[RDC].")] [UnconditionalSuppressMessage("AOT", "IL3050", Justification = "Only called from JObject constructor which is annotated with [RUC]/[RDC].")] #endif - private static IEnumerable GetValues(JToken token) + private static IEnumerable GetValues(JToken? token) { if (token?.Type == JTokenType.Array) { @@ -325,13 +322,13 @@ private static IEnumerable GetValues(JToken token) { if (entry.Type == JTokenType.String) { - yield return entry.ToObject(); + yield return entry.ToObject()!; } } } else if (token?.Type == JTokenType.String) { - yield return token.ToObject(); + yield return token.ToObject()!; } } } diff --git a/src/NuGet.Core/NuGet.Protocol/Resources/VulnerabilityInfoResourceV3.cs b/src/NuGet.Core/NuGet.Protocol/Resources/VulnerabilityInfoResourceV3.cs index b9d27f80ca2..76760514b6c 100644 --- a/src/NuGet.Core/NuGet.Protocol/Resources/VulnerabilityInfoResourceV3.cs +++ b/src/NuGet.Core/NuGet.Protocol/Resources/VulnerabilityInfoResourceV3.cs @@ -73,7 +73,8 @@ async Task GetIndexUrlAsync(CancellationToken cancellationToken) { ServiceIndexResourceV3 serviceIndex = await _sourceRepository.GetResourceAsync(cancellationToken) ?? throw new InvalidOperationException($"The source '{_sourceRepository.PackageSource.Source}' does not provide {nameof(ServiceIndexResourceV3)}."); - return serviceIndex.GetServiceEntryUri(ServiceTypes.VulnerabilityInfo); + return serviceIndex.GetServiceEntryUri(ServiceTypes.VulnerabilityInfo) + ?? throw new InvalidOperationException($"The source '{_sourceRepository.PackageSource.Source}' does not provide {nameof(ServiceTypes.VulnerabilityInfo)}."); } } diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/MockServiceIndexResourceV3Provider.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/MockServiceIndexResourceV3Provider.cs index 011c5b12617..247c2fef383 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/MockServiceIndexResourceV3Provider.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/MockServiceIndexResourceV3Provider.cs @@ -41,7 +41,7 @@ public static ServiceIndexResourceV3Provider Create(params ServiceIndexEntry[] e new JProperty("comment", "http://www.w3.org/2000/01/rdf-schema#comment"))); var serviceIndexResource = new ServiceIndexResourceV3(index, DateTime.UtcNow); - var tryCreateResult = new Tuple(true, serviceIndexResource); + var tryCreateResult = new Tuple(true, serviceIndexResource); provider.Setup(x => x.TryCreate(It.IsAny(), It.IsAny())) .Returns(Task.FromResult(tryCreateResult)); diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/PackageDetailsUriResourceV3ProviderTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/PackageDetailsUriResourceV3ProviderTests.cs index 4a177f442a5..1bfa1d9ead9 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/PackageDetailsUriResourceV3ProviderTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/PackageDetailsUriResourceV3ProviderTests.cs @@ -117,7 +117,7 @@ private static ServiceIndexResourceV3Provider CreateServiceIndexResourceV3Provid new JProperty("comment", "http://www.w3.org/2000/01/rdf-schema#comment"))); var serviceIndexResource = new ServiceIndexResourceV3(index, DateTime.UtcNow); - var tryCreateResult = new Tuple(true, serviceIndexResource); + var tryCreateResult = new Tuple(true, serviceIndexResource); provider.Setup(x => x.TryCreate(It.IsAny(), It.IsAny())) .Returns(Task.FromResult(tryCreateResult)); diff --git a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/ReportAbuseResourceV3ProviderTests.cs b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/ReportAbuseResourceV3ProviderTests.cs index 3840a99c42b..d1cc0afcf27 100644 --- a/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/ReportAbuseResourceV3ProviderTests.cs +++ b/test/NuGet.Core.Tests/NuGet.Protocol.Tests/Providers/ReportAbuseResourceV3ProviderTests.cs @@ -118,7 +118,7 @@ private static ServiceIndexResourceV3Provider CreateServiceIndexResourceV3Provid new JProperty("comment", "http://www.w3.org/2000/01/rdf-schema#comment"))); var serviceIndexResource = new ServiceIndexResourceV3(index, DateTime.UtcNow); - var tryCreateResult = new Tuple(true, serviceIndexResource); + var tryCreateResult = new Tuple(true, serviceIndexResource); provider.Setup(x => x.TryCreate(It.IsAny(), It.IsAny())) .Returns(Task.FromResult(tryCreateResult));