m-expunged / guacamole-sharp

C# replacement of the Apache Guacamole server-side Java servlet.
Apache License 2.0
26 stars 3 forks source link

Rare out of index error during websocket frame parsing #3

Closed m-expunged closed 2 years ago

m-expunged commented 2 years ago
        foreach (var frame in frames)
        {
            if (frame.DataLength == 0)  <--- bug here?
                continue;

            var framePayload = payload[payloadStartIndex..(payloadStartIndex + frame.FrameLength)];
            var masks = framePayload[frame.MaskIndex..(frame.MaskIndex + 4)];
            int firstDataByteIndex = frame.MaskIndex + 4;
            byte[] decoded = new byte[framePayload.Length - firstDataByteIndex];

            for (int i = firstDataByteIndex, j = 0; i < framePayload.Length; i++, j++)
            {
                decoded[j] = (byte)(framePayload[i] ^ masks.ElementAt(j % 4));
            }

            payloadStartIndex += frame.FrameLength;
            message += Encoding.UTF8.GetString(decoded);
        }