mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-12 23:32:02 +00:00
fix: reject ambiguous queue JSON bodies
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user