internal void ReadExtensionMembers(ref MessagePackReader reader)
        {
            int count = reader.ReadMapHeader();

            for (int i = 0; i < count; i++)
            {
                switch (reader.ReadInt32())
                {
                case TracingId:
                    if (this is IMessageWithTracingId withTracingId)
                    {
                        withTracingId.TracingId = reader.ReadUInt64();
                    }
                    break;

                case Ttl:
                    if (this is IHasTtl hasTtl)
                    {
                        hasTtl.Ttl = reader.ReadInt32();
                    }
                    break;

                case Protocol:
                    if (this is IHasProtocol hasProtocol)
                    {
                        hasProtocol.Protocol = reader.ReadString();
                    }
                    break;

                // todo : more optional fields
                default:
                    break;
                }
            }
        }
            public ProjectId?Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
            {
                try
                {
                    if (reader.TryReadNil())
                    {
                        return(null);
                    }

                    Contract.ThrowIfFalse(reader.ReadArrayHeader() == 2);
                    var id        = GuidFormatter.Instance.Deserialize(ref reader, options);
                    var debugName = reader.ReadString();

                    var previousId = _previousProjectId;
                    if (previousId is not null && previousId.Id == id && previousId.DebugName == debugName)
                    {
                        return(previousId);
                    }

                    var currentId = ProjectId.CreateFromSerialized(id, debugName);
                    _previousProjectId = currentId;
                    return(currentId);
                }
                catch (Exception e) when(e is not MessagePackSerializationException)
                {
                    throw new MessagePackSerializationException(e.Message, e);
                }
            }
Beispiel #3
0
            public DocumentId?Deserialize(
                ref MessagePackReader reader,
                MessagePackSerializerOptions options
                )
            {
                try
                {
                    if (reader.TryReadNil())
                    {
                        return(null);
                    }

                    Contract.ThrowIfFalse(reader.ReadArrayHeader() == 3);

                    var projectId = ProjectIdFormatter.Instance.Deserialize(ref reader, options);
                    Contract.ThrowIfNull(projectId);

                    var id        = GuidFormatter.Instance.Deserialize(ref reader, options);
                    var debugName = reader.ReadString();

                    return(DocumentId.CreateFromSerialized(projectId, id, debugName));
                }
                catch (Exception e) when(e is not MessagePackSerializationException)
                {
                    throw new MessagePackSerializationException(e.Message, e);
                }
            }
Beispiel #4
0
    public static RedisInvocation ReadInvocation(ReadOnlyMemory <byte> data)
    {
        // See WriteInvocation for the format
        var reader = new MessagePackReader(data);

        ValidateArraySize(ref reader, 2, "Invocation");

        // Read excluded Ids
        IReadOnlyList <string>?excludedConnectionIds = null;
        var idCount = reader.ReadArrayHeader();

        if (idCount > 0)
        {
            var ids = new string[idCount];
            for (var i = 0; i < idCount; i++)
            {
                ids[i] = reader.ReadString();
            }

            excludedConnectionIds = ids;
        }

        // Read payload
        var message = ReadSerializedHubMessage(ref reader);

        return(new RedisInvocation(message, excludedConnectionIds));
    }
Beispiel #5
0
        protected override PackageVulnerabilityMetadataContextInfo?DeserializeCore(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            Uri?advisoryUrl = null;
            int severity    = 0;

            int propertyCount = reader.ReadMapHeader();

            for (int propertyIndex = 0; propertyIndex < propertyCount; propertyIndex++)
            {
                switch (reader.ReadString())
                {
                case AdvisoryUrlPropertyName:
                    advisoryUrl = options.Resolver.GetFormatter <Uri>().Deserialize(ref reader, options);
                    break;

                case SeverityPropertyName:
                    severity = reader.ReadInt32();
                    break;

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

            Assumes.NotNull(advisoryUrl);

            return(new PackageVulnerabilityMetadataContextInfo(advisoryUrl, severity));
        }
Beispiel #6
0
        public static IPocoTracker <T> Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            var tracker = new TrackablePocoTracker <T>();
            var length  = reader.ReadArrayHeader();

            List <string> list = new List <string>();

            for (var i = 0; i < length; i++)
            {
                list.Add(reader.ReadString());
            }

            var objectType = typeof(T);

            for (var i = 0; i < length; i++)
            {
                var pi = objectType.GetProperty(list[i]);
                if (reader.TryReadNil())
                {
                    tracker.TrackSet(pi, null, null);
                }
                else
                {
                    var data   = reader.ReadBytes();
                    var method = SerializeMethodCache.GetDeserializeMethod(pi.PropertyType);
                    var value  = method.Invoke(null, new object[] { data.Value, options, null });
                    tracker.TrackSet(pi, null, value);
                }
            }

            return(tracker);
        }
        public object Deserialize(int id, ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            if (id == 0)
            {
                return(reader.ReadString());
            }

            if (id == 1)
            {
                return(reader.ReadInt32());
            }

            if (id == 2)
            {
                return(reader.ReadByte());
            }

            if (id == 4)
            {
                return(options.Resolver.GetFormatterWithVerify <Vector3>().Deserialize(ref reader, options));
            }

            if (id == 5)
            {
                return(reader.ReadSingle());
            }

            return(null);
        }
        protected override SearchResultContextInfo?DeserializeCore(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            Guid?operationId  = null;
            bool hasMoreItems = false;
            IReadOnlyCollection <PackageSearchMetadataContextInfo>?packageSearchItems  = null;
            IReadOnlyDictionary <string, LoadingStatus>?           sourceLoadingStatus = null;

            int propertyCount = reader.ReadMapHeader();

            for (int propertyIndex = 0; propertyIndex < propertyCount; propertyIndex++)
            {
                switch (reader.ReadString())
                {
                case HasMoreItemsPropertyName:
                    hasMoreItems = reader.ReadBoolean();
                    break;

                case PackageSearchItemsPropertyName:
                    packageSearchItems = options.Resolver.GetFormatter <IReadOnlyCollection <PackageSearchMetadataContextInfo> >().Deserialize(ref reader, options);
                    break;

                case SourceLoadingStatusPropertyName:
                    sourceLoadingStatus = options.Resolver.GetFormatter <IReadOnlyDictionary <string, LoadingStatus> >().Deserialize(ref reader, options);
                    break;

                case OperationIdPropertyName:
                    if (!reader.TryReadNil())
                    {
                        string guidString = reader.ReadString();
                        if (Guid.TryParse(guidString, out Guid operationIdGuid))
                        {
                            operationId = operationIdGuid;
                        }
                    }
                    break;

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

            Assumes.NotNull(packageSearchItems);
            Assumes.NotNull(sourceLoadingStatus);

            return(new SearchResultContextInfo(packageSearchItems, sourceLoadingStatus, hasMoreItems, operationId));
        }
Beispiel #9
0
            public RequestHeader Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
            {
                // debugging...
                var x = reader.ReadArrayHeader();

                Console.WriteLine(x);
                if (x != 3)
                {
                    throw new MessagePack.MessagePackSerializationException("Array length is invalid. Length:" + x);
                }
                var id = reader.ReadInt32();

                var req = reader.ReadString();
                var res = reader.ReadString();

                return(new RequestHeader(id, req, res));
            }
 public Uri Deserialize(ref MessagePackReader reader, IFormatterResolver formatterResolver)
 {
     if (reader.IsNil())
     {
         return(null);
     }
     return(new Uri(reader.ReadString(), UriKind.RelativeOrAbsolute));
 }
 public Version Deserialize(ref MessagePackReader reader, IFormatterResolver formatterResolver)
 {
     if (reader.IsNil())
     {
         return(null);
     }
     return(new Version(reader.ReadString()));
 }
Beispiel #12
0
        private string ReadErrorMessage()
        {
            _reader.ReadDictionaryLength();
            _reader.ReadUint();
            var message = _reader.ReadString(Encoding.UTF8);

            return(message);
        }
 public StringBuilder Deserialize(ref MessagePackReader reader, IFormatterResolver formatterResolver)
 {
     if (reader.IsNil())
     {
         return(null);
     }
     return(new StringBuilder(reader.ReadString()));
 }
        public EventDocumentAckResult Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            reader.ReadArrayHeader();
            StatusCode status       = (StatusCode)reader.ReadInt32();
            string     notification = reader.ReadString();

            reader.ReadMapHeader();
            return(new EventDocumentAckResult(status, notification));
        }
Beispiel #15
0
        public T Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            if (reader.TryReadNil())
            {
                return(null);
            }

            return((T)Type.GetType(reader.ReadString(), throwOnError: true));
        }
        public override TestTarget Deserialize(ref MessagePackReader reader)
        {
            if (!reader.TryReadNil())
            {
                var value = new TestTarget();
                int count = reader.ReadMapHeader();

                for (int i = 0; i < count; i++)
                {
                    ArraySegment<byte> segment = reader.ReadStringSegment();

                    if (m_nameToKey.TryGetValue(segment.Array, segment.Offset, segment.Count, out int key))
                    {
                        switch (key)
                        {
                            case 0:
                            {
                                value.BoolValue = reader.ReadBoolean();
                                break;
                            }
                            case 1:
                            {
                                value.IntValue = reader.ReadInt32();
                                break;
                            }
                            case 2:
                            {
                                value.FloatValue = reader.ReadSingle();
                                break;
                            }
                            case 3:
                            {
                                value.StringValue = reader.ReadString();
                                break;
                            }
                            case 4:
                            {
                                value.EnumValue = m_formatterTypeCode.Deserialize(ref reader);
                                break;
                            }
                            default:
                            {
                                reader.ReadNextBlock();
                                break;
                            }
                        }
                    }
                    else
                    {
                        reader.ReadNextBlock();
                    }
                }
            }

            return default;
        }
        public PackageDependencyInfo?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?         packageIdentity     = null;
                List <PackageDependency>?packageDependencies = null;

                int propertyCount = reader.ReadMapHeader();

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

                    case PackageDependenciesPropertyName:
                        packageDependencies = new List <PackageDependency>();

                        int dependenciesCount = reader.ReadArrayHeader();

                        for (var i = 0; i < dependenciesCount; ++i)
                        {
                            PackageDependency?packageDependency = PackageDependencyFormatter.Instance.Deserialize(ref reader, options);

                            Assumes.NotNull(packageDependency);

                            packageDependencies.Add(packageDependency);
                        }
                        break;

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

                Assumes.NotNull(packageIdentity);

                return(new PackageDependencyInfo(packageIdentity, packageDependencies));
            }
            finally
            {
                // stack overflow mitigation - see https://github.com/neuecc/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf
                reader.Depth--;
            }
        }
Beispiel #18
0
    public ActionRequest <TReqParams, TRespData> Deserialize(ref MessagePackReader reader,
                                                             MessagePackSerializerOptions options)
    {
        if (!reader.TryReadMapHeader(out var elementCount))
        {
            throw new MessagePackSerializationException();
        }

        var actionSeq = ReadOnlySequence <byte> .Empty;
        var paramsSeq = ReadOnlySequence <byte> .Empty;
        var echo      = string.Empty;

        // `elementCount` shall be 2 or 3.
        for (var i = 0; i < elementCount; i++)
        {
            if (reader.TryReadStringSpan(out var propertyName))
            {
                if (propertyName.SequenceEqual(ConstantsOfAction.sActionPropertyName))
                {
                    actionSeq = reader.ReadRaw();
                }
                else if (propertyName.SequenceEqual(ConstantsOfAction.sParamsPropertyName))
                {
                    paramsSeq = reader.ReadRaw();
                }
                else if (propertyName.SequenceEqual(ConstantsOfAction.sEchoPropertyName))
                {
                    echo = reader.ReadString();
                }
            }
        }

        var action = MessagePackSerializer.Deserialize <ActionType>(actionSeq, options) ?? ActionType.Unknown with
        {
            Key = MessagePackSerializer.Deserialize <string>(actionSeq, options)
        };

        var param = MessagePackSerializer.Deserialize(typeof(TReqParams), paramsSeq, options);

        // Full-trust `ActionType`, so `GetUninitializedObject` is safe, but it is f**king SLOW.
        // var zeroObj = FormatterServices.GetUninitializedObject(action.ClassType);
        // `Activator` is much (4x-6x) faster, but it depends on the constructor.
        var zeroObj = Activator.CreateInstance(action.ClassType, param, echo);

        if (zeroObj is ActionRequest <TReqParams, TRespData> req && param is TReqParams reqParam)
        {
            return(req with {
                Action = action, Params = reqParam, Echo = echo
            });
        }

        // Failed in deserialize.
        throw new NotSupportedException(
                  $"{nameof(ActionType)} {Encoding.UTF8.GetString(actionSeq)} is not supported by {nameof(MsgPackActionRequestFormatter<TReqParams, TRespData>)}.");
    }
}
        protected override PackageReference?DeserializeCore(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            VersionRange?   allowedVersions         = null;
            bool            isDevelopmentDependency = false;
            bool            isUserInstalled         = true;
            bool            requireReinstallation   = false;
            PackageIdentity?identity  = null;
            NuGetFramework? framework = null;

            int propertyCount = reader.ReadMapHeader();

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

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

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

                case PackageIdentityPropertyName:
                    identity = PackageIdentityFormatter.Instance.Deserialize(ref reader, options);
                    break;

                case RequireReinstallationPropertyName:
                    requireReinstallation = reader.ReadBoolean();
                    break;

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

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

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

            return(new PackageReference(
                       identity,
                       framework,
                       isUserInstalled,
                       isDevelopmentDependency,
                       requireReinstallation,
                       allowedVersions));
        }
    protected static string ReadString(ref MessagePackReader reader, IInvocationBinder binder, string field)
    {
        try
        {
#if NETCOREAPP
            if (reader.TryReadStringSpan(out var span))
            {
                return(binder.GetTarget(span) ?? Encoding.UTF8.GetString(span));
            }
            return(reader.ReadString());
#else
            return(reader.ReadString());
#endif
        }
        catch (Exception ex)
        {
            throw new InvalidDataException($"Reading '{field}' as String failed.", ex);
        }
    }
        private Message ReadCompletion(ref MessagePackReader reader)
        {
            // https://github.com/aspnet/AspNetCore/blob/master/src/SignalR/docs/specs/HubProtocol.md#completion-message-encoding-1

            ReadHeaders(ref reader);
            string invocationId = reader.ReadString();
            byte   resultKind   = reader.ReadByte();

            switch (resultKind)
            {
            // 1 - Error result - Result contains a String with the error message
            case 1:
                string error = reader.ReadString();
                return(new Message
                {
                    type = MessageTypes.Completion,
                    invocationId = invocationId,
                    error = error
                });

            // 2 - Void result - Result is absent
            case 2:
                return(new Message
                {
                    type = MessageTypes.Completion,
                    invocationId = invocationId
                });

            // 3 - Non-Void result - Result contains the value returned by the server
            case 3:
                object item = ReadItem(ref reader, invocationId);
                return(new Message
                {
                    type = MessageTypes.Completion,
                    invocationId = invocationId,
                    item = item,
                    result = item
                });

            default:
                throw new NotImplementedException("Unknown resultKind: " + resultKind);
            }
        }
Beispiel #22
0
        public NuGetFramework?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
            {
                string?frameworkName = null;
                string?platformName  = null;

                int propertyCount = reader.ReadMapHeader();

                for (int propertyIndex = 0; propertyIndex < propertyCount; propertyIndex++)
                {
                    switch (reader.ReadString())
                    {
                    case DotNetFrameworkNamePropertyName:
                        frameworkName = reader.ReadString();
                        break;

                    case DotNetPlatformNamePropertyName:
                        platformName = reader.ReadString();
                        break;

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

                return(NuGetFramework.ParseComponents(frameworkName, platformName));
            }
            finally
            {
                // stack overflow mitigation - see https://github.com/neuecc/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf
                reader.Depth--;
            }
        }
Beispiel #23
0
        public override TestTarget Deserialize(ref MessagePackReader reader)
        {
            if (!reader.TryReadNil())
            {
                var value = new TestTarget();
                int count = reader.ReadArrayHeader();

                for (int i = 0; i < count; i++)
                {
                    int key = reader.ReadInt32();

                    switch (key)
                    {
                    case 0:
                    {
                        value.BoolValue = reader.ReadBoolean();
                        break;
                    }

                    case 1:
                    {
                        value.IntValue = reader.ReadInt32();
                        break;
                    }

                    case 2:
                    {
                        value.FloatValue = reader.ReadSingle();
                        break;
                    }

                    case 3:
                    {
                        value.StringValue = reader.ReadString();
                        break;
                    }

                    case 4:
                    {
                        value.EnumValue = m_formatterTypeCode.Deserialize(ref reader);
                        break;
                    }

                    default:
                    {
                        reader.ReadNextBlock();
                        break;
                    }
                    }
                }

                return(value);
            }

            return(default);
Beispiel #24
0
        public PackageIdentity?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
            {
                string?      id      = null;
                NuGetVersion?version = null;

                int propertyCount = reader.ReadMapHeader();
                for (int propertyIndex = 0; propertyIndex < propertyCount; propertyIndex++)
                {
                    switch (reader.ReadString())
                    {
                    case IdPropertyName:
                        id = reader.ReadString();
                        break;

                    case NuGetVersionPropertyName:
                        version = NuGetVersionFormatter.Instance.Deserialize(ref reader, options);
                        break;

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

                return(new PackageIdentity(id, version));
            }
            finally
            {
                // stack overflow mitigation - see https://github.com/neuecc/MessagePack-CSharp/security/advisories/GHSA-7q36-4xx7-xcxf
                reader.Depth--;
            }
        }
Beispiel #25
0
 protected static string ReadString(ref MessagePackReader reader, string field)
 {
     try
     {
         return(reader.ReadString());
     }
     catch (Exception ex)
     {
         throw new InvalidDataException($"Reading '{field}' as String failed.", ex);
     }
 }
Beispiel #26
0
 public StringBuilder Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
 {
     if (reader.TryReadNil())
     {
         return(null);
     }
     else
     {
         return(new StringBuilder(reader.ReadString()));
     }
 }
Beispiel #27
0
 public Uri Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
 {
     if (reader.TryReadNil())
     {
         return(null);
     }
     else
     {
         return(new Uri(reader.ReadString(), UriKind.RelativeOrAbsolute));
     }
 }
Beispiel #28
0
 public RequestId Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
 {
     if (reader.NextMessagePackType == MessagePackType.Integer)
     {
         return(new RequestId(reader.ReadInt64()));
     }
     else
     {
         return(new RequestId(reader.ReadString()));
     }
 }
        public void ReadString_HandlesMultipleSegments()
        {
            ReadOnlySequence <byte> seq = this.BuildSequence(
                new[] { (byte)(MessagePackCode.MinFixStr + 2), (byte)'A' },
                new[] { (byte)'B' });

            var reader = new MessagePackReader(seq);
            var result = reader.ReadString();

            Assert.Equal("AB", result);
        }
Beispiel #30
0
    public Type Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
    {
        if (reader.IsNil)
        {
            throw new InvalidOperationException("typecode is null, struct not supported");
        }

        var assemblyQualifiedName = reader.ReadString();

        return(Type.GetType(assemblyQualifiedName));
    }