Value.Patch: "add" with an out-of-range array index appends instead of failing

Abierto Apto para principiantes
#52 0 comentarios 0 reacciones 0 asignados Ver en GitHub

@SashaMIT ya está trabajando en esto.

Desde el 12/10/2026.

  • #53 de @RaphaelFakhri — cerrado sin fusionar
  • #55 de @SashaMIT — abierto

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
78/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
go
Área
backend

Línea de trabajo

Empieza en patch.go leyendo patchAdd y find, y luego reproduce el problema con el ejemplo de Go del informe. Comprueba las pruebas existentes relacionadas con patch, si están disponibles. La tarea está terminada cuando una operación add con un índice mayor que la longitud del array devuelve un error y deja el array sin cambios, mientras que un índice igual a la longitud y el token - siguen añadiendo.

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

Descripción

What happened

An add operation whose array index is greater than the array length succeeds and appends the value.

v, _ := hujson.Parse([]byte(`[1,2]`))
err := v.Patch([]byte(`[{"op":"add","path":"/5","value":3}]`))
fmt.Println(err, string(v.Pack()))
// <nil> [1,2,3]

What you expected

RFC 6902, section 4.1 states that the index of an add on an array must not be greater than the number of elements. The patch should fail with an error and leave the array unchanged. Indexes equal to the length and the - token continue to append.

Cause

patchAdd in patch.go accepts any errNotFound from find as an insertion point. For arrays, find reports the array length as the index for every missing index, so /5 is treated the same as /2 or /-.

Lenguaje dominante
Go
Estrellas
892
Forks
40
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 tailscale/hujson

Todos los issues de tailscale/hujson

Issues similares

Más issues de Go

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.