fix: reject ambiguous queue JSON bodies

This commit is contained in:
Josh Creek
2026-08-31 21:13:47 +01:00
parent cd30098eca
commit 77c01dc531
2 changed files with 17 additions and 0 deletions
+6
View File
@@ -6,6 +6,7 @@ package api
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"io"
"net/http" "net/http"
"strconv" "strconv"
"strings" "strings"
@@ -169,6 +170,11 @@ func decodeBody(w http.ResponseWriter, r *http.Request, target any) bool {
writeError(w, http.StatusBadRequest, "invalid_request") writeError(w, http.StatusBadRequest, "invalid_request")
return false return false
} }
var extra any
if err := decoder.Decode(&extra); err != io.EOF {
writeError(w, http.StatusBadRequest, "invalid_request")
return false
}
return true return true
} }
+11
View File
@@ -99,4 +99,15 @@ func TestQueueAPIRejectsUnauthenticatedUnknownAndOversizedInput(t *testing.T) {
t.Fatalf("malformed body status = %d", response.StatusCode) t.Fatalf("malformed body status = %d", response.StatusCode)
} }
_ = response.Body.Close() _ = response.Body.Close()
request, _ = http.NewRequest(http.MethodPost, server.URL+"/v1/queue", strings.NewReader(`{"ticket_id":"ticket-1"}{"ticket_id":"ticket-2"}`))
request.Header.Set("Authorization", "Bearer "+session.SessionID+":"+token)
request.Header.Set("Idempotency-Key", "create-key-789012")
response, err = http.DefaultClient.Do(request)
if err != nil {
t.Fatal(err)
}
if response.StatusCode != http.StatusBadRequest {
t.Fatalf("trailing JSON status = %d", response.StatusCode)
}
_ = response.Body.Close()
} }