Channel response appends JSON null after context timeout
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 72/100
Línea de trabajo
El error está en responder.go: channelIntoSlice escribe un 504 con http.Error al cancelarse el contexto y devuelve nil, y DefaultResponder sigue llamando a JSON(w, r, nil). Reproduce el problema con el fragmento del issue y luego revisa la rama de canal de DefaultResponder para ver cómo debería detenerse tras el timeout. Está listo cuando el body es exactamente Server Timeout\n y las pruebas existentes del responder siguen pasando.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
When DefaultResponder receives a channel value and the request context is canceled while it waits, it writes a 504 timeout response and appends JSON null to the body. The result is a mixed text/JSON response rather than the timeout body alone.
Reproduced on latest release v1.0.3 and current main commit 14f1cb3d5c2969d6e462632a205eacb6421eb4dc with Go 1.27.1:
package main
import (
"context"
"fmt"
"net/http/httptest"
"github.com/go-chi/render"
)
func main() {
ctx, cancel := context.WithCancel(context.Background())
cancel()
request := httptest.NewRequest("GET", "/", nil).WithContext(ctx)
request.Header.Set("Accept", "application/json")
response := httptest.NewRecorder()
channel := make(chan string) // open, with no available value
render.DefaultResponder(response, request, channel)
fmt.Printf("status=%d content-type=%q body=%q\n",
response.Result().StatusCode,
response.Result().Header.Get("Content-Type"),
response.Body.String())
}
Observed:
status=504 content-type="text/plain; charset=utf-8" body="Server Timeout\nnull\n"
Expected: after sending the timeout response, no second payload should be written. The body should be "Server Timeout\n".
In responder.go, channelIntoSlice calls http.Error(..., 504) and returns nil on cancellation. DefaultResponder then continues to JSON(w, r, nil), which writes the extra null.
- Lenguaje dominante
- Go
- Estrellas
- 341
- Forks
- 68
- 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
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de go-chi/render
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
New Bind/Render package for chiAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 10/100
-
Any concern render.JSON() can leak internal errors to outside?Posiblemente ocupada @team-humaki la tomó hace 48 días. Abierto
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
-
render.Render() writes to writer unexpected data of aliased typePosiblemente ocupada @team-humaki la tomó hace 47 días. Abierto
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
Todos los issues de go-chi/render
Issues similares
-
[BUG] serviceenvupdater filter does not update KUBERNETES_SERVICE_HOST/PORT in init containersPosiblemente ocupada @RaphaelFakhri la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
openyurtio/openyurt#2845 ·
Los mantenedores suelen responder en 7 días
-
enhancement good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
fix(scan): validate and normalize output format in validate-contractPosiblemente ocupada @WKr1shna la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
bug good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100