The decoding/fromBuffer fails and crashes with this "complex" structure

Abierto
#64 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
javascript
Área
backend

Línea de trabajo

Reproduce el problema con el r.Struct anidado y los arrays mostrados en el informe y, a continuación, inspecciona la lectura que falla en node_modules/restructure/dist/src/DecodeStream.js. Compara el búfer codificado con la posición del decodificador cuando entra en la estructura anidada. Se considera completado cuando fromBuffer termina sin un DataView RangeError y devuelve los valores esperados de i, a, subI y subArray.

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

Descripción

Given this structure:

const PacketFromRestructure = new r.Struct({
  i: r.uint32,
  a: new r.Array(r.uint32),
  sub: new r.Struct({
    subI: r.uint32,
    subArray: new r.Array(r.uint32)
  })
})

The encoding/toBuffer part works fine:

const encoded = PacketFromRestructure.toBuffer({
  i: 0,
  a: [1, 2],
  sub: { subArray: [1, 2, 3], subI: 2 }
})

But its decoding/fromBuffer fails and crashes:

const decoded = PacketFromRestructure.fromBuffer(encoded)

The crash:

node_modules\restructure\dist\src\DecodeStream.js:72
      const ret = this.view[key](this.pos, false);
                                ^
RangeError: Offset is outside the bounds of the DataView
    at DataView.prototype.getUint32 (<anonymous>)
    at $8ae20583b93e4933$export$c18b354bac7948e9.<computed> [as readUInt32BE]
    ...
Lenguaje dominante
JavaScript
Estrellas
146
Forks
37
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 foliojs/restructure

Todos los issues de foliojs/restructure

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.