Decode broken when multiple calls same time

Abierto
#59 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
php
Área
networking

Línea de trabajo

Comienza localizando la función private decode($msg) mostrada en el issue y reproduce el caso con dos frames enviados en rápida sucesión. Sigue cómo se gestionan la longitud del mensaje y los límites del payload, y verifica después que los dos frames produzcan salidas decodificadas independientes.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

auto-migrated Priority-Medium Type-Defect
What steps will reproduce the problem?

Send two frames in a very short time
  socket.send('message1')
  socket.send('message2')

As result, the decoding function does not understand when first frame end and 
second one start, which causes it handle two frame as single. This lead broken 
output.

Decode function is:
    private function decode ($msg) {
        $len = $data = $decoded = $index = null;
        $len = $msg[1] & 127;
        if ($len === 126) {
            $this->masks = substr ($msg, 4, 4);
            $data = substr ($msg, 8);
            $this->initFrame = substr ($msg, 0, 4);
        }
        else if ($len === 127) {
            $this->masks = substr ($msg, 10, 4);
            $data = substr ($msg, 14);
            $this->initFrame = substr ($msg, 0, 10);
        }
        else {
            $this->masks = substr ($msg, 2, 4);
            $data = substr ($msg, 6);
            $this->initFrame = substr ($msg, 0, 2);
        }
        for ($index = 0; $index < strlen ($data); $index++) {
            $decoded .= $data[$index] ^ $this->masks[$index % 4];
        }
        return $decoded;
    }
----------------

Should there be some regonizion when frame end and then attach rest of the 
message to second frame?

Original issue reported on code.google.com by [email protected] on 15 Nov 2012 at 9:35

Lenguaje dominante
PHP
Estrellas
0
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de et-nik/phpwebsocket

Todos los issues de et-nik/phpwebsocket

Issues similares

Más issues de PHP

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.