public static PackageReferenceContextInfo Create(PackageReference packageReference)
        {
            Assumes.NotNull(packageReference);

            var packageReferenceContextInfo = new PackageReferenceContextInfo(packageReference.PackageIdentity, packageReference.TargetFramework)
            {
                IsAutoReferenced        = (packageReference as BuildIntegratedPackageReference)?.Dependency?.AutoReferenced == true,
                AllowedVersions         = packageReference.AllowedVersions,
                IsUserInstalled         = packageReference.IsUserInstalled,
                IsDevelopmentDependency = packageReference.IsDevelopmentDependency
            };

            return(packageReferenceContextInfo);
        }
        public static TransitivePackageReferenceContextInfo Create(TransitivePackageReference transitivePackageReference)
        {
            if (transitivePackageReference == null)
            {
                throw new ArgumentNullException(nameof(transitivePackageReference));
            }

            var prCtxInfo = PackageReferenceContextInfo.Create(transitivePackageReference);

            var tranPkgRefCtxInfo = Create(prCtxInfo);

            tranPkgRefCtxInfo.TransitiveOrigins = transitivePackageReference.TransitiveOrigins.Select(pr => PackageReferenceContextInfo.Create(pr)).ToList();

            return(tranPkgRefCtxInfo);
        }
        protected override IPackageReferenceContextInfo?DeserializeCore(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            PackageIdentity?identity                = null;
            NuGetFramework? framework               = null;
            bool            isUserInstalled         = false;
            bool            isAutoReferenced        = false;
            bool            isDevelopmentDependency = false;
            string?         allowedVersions         = null;

            int propertyCount = reader.ReadMapHeader();

            for (int propertyIndex = 0; propertyIndex < propertyCount; propertyIndex++)
            {
                switch (reader.ReadString())
                {
                case IdentityPropertyName:
                    identity = PackageIdentityFormatter.Instance.Deserialize(ref reader, options);
                    break;

                case FrameworkPropertyName:
                    framework = NuGetFrameworkFormatter.Instance.Deserialize(ref reader, options);
                    break;

                case IsUserInstalledPropertyName:
                    isUserInstalled = reader.ReadBoolean();
                    break;

                case IsAutoReferencedPropertyName:
                    isAutoReferenced = reader.ReadBoolean();
                    break;

                case IsDevelopmentDependencyPropertyName:
                    isDevelopmentDependency = reader.ReadBoolean();
                    break;

                case AllowedVersionsPropertyName:
                    if (!reader.TryReadNil())     // Advances beyond the current value if the current value is nil and returns true; otherwise leaves the reader's position unchanged and returns false.
                    {
                        allowedVersions = reader.ReadString();
                    }
                    break;

                default:
                    reader.Skip();
                    break;
                }
            }

            Assumes.NotNull(identity);
            Assumes.NotNull(framework);

            var packageReferenceContextInfo = new PackageReferenceContextInfo(identity, framework)
            {
                IsUserInstalled         = isUserInstalled,
                IsAutoReferenced        = isAutoReferenced,
                IsDevelopmentDependency = isDevelopmentDependency
            };

            if (!string.IsNullOrWhiteSpace(allowedVersions) && VersionRange.TryParse(allowedVersions, out VersionRange versionRange))
            {
                packageReferenceContextInfo.AllowedVersions = versionRange;
            }

            return(packageReferenceContextInfo);
        }
Exemplo n.º 4
0
        public IPackageReferenceContextInfo?Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            if (reader.TryReadNil())
            {
                return(null);
            }

            // stack overflow mitigation - see https://github.com/neuecc/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf
            options.Security.DepthStep(ref reader);

            try
            {
                PackageIdentity?identity                = null;
                NuGetFramework? framework               = null;
                bool            isUserInstalled         = false;
                bool            isAutoReferenced        = false;
                bool            isDevelopmentDependency = false;
                string?         allowedVersions         = null;

                int propertyCount = reader.ReadMapHeader();
                for (int propertyIndex = 0; propertyIndex < propertyCount; propertyIndex++)
                {
                    switch (reader.ReadString())
                    {
                    case IdentityPropertyName:
                        identity = PackageIdentityFormatter.Instance.Deserialize(ref reader, options);
                        break;

                    case FrameworkPropertyName:
                        framework = NuGetFrameworkFormatter.Instance.Deserialize(ref reader, options);
                        break;

                    case IsUserInstalledPropertyName:
                        isUserInstalled = reader.ReadBoolean();
                        break;

                    case IsAutoReferencedPropertyName:
                        isAutoReferenced = reader.ReadBoolean();
                        break;

                    case IsDevelopmentDependencyPropertyName:
                        isDevelopmentDependency = reader.ReadBoolean();
                        break;

                    case AllowedVersionsPropertyName:
                        if (!reader.TryReadNil())     // Advances beyond the current value if the current value is nil and returns true; otherwise leaves the reader's position unchanged and returns false.
                        {
                            allowedVersions = reader.ReadString();
                        }
                        break;

                    default:
                        reader.Skip();
                        break;
                    }
                }

                Assumes.NotNull(identity);
                Assumes.NotNull(framework);

                var packageReferenceContextInfo = new PackageReferenceContextInfo(identity, framework)
                {
                    IsUserInstalled         = isUserInstalled,
                    IsAutoReferenced        = isAutoReferenced,
                    IsDevelopmentDependency = isDevelopmentDependency
                };

                if (!string.IsNullOrWhiteSpace(allowedVersions) && VersionRange.TryParse(allowedVersions, out VersionRange versionRange))
                {
                    packageReferenceContextInfo.AllowedVersions = versionRange;
                }

                return(packageReferenceContextInfo);
            }
            finally
            {
                // stack overflow mitigation - see https://github.com/neuecc/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf
                reader.Depth--;
            }
        }