List routes answer 500 for a skip or page too large for the database

Aperta
#1,001 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
Mezza giornata
Idoneità per principianti
72/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
postgresql, python
Ambito
api, backend

Direzione di ricerca

Start with the handlers for /api/v1/rollout-schedules/, /api/v1/users/, /api/v1/metrics/errors, /api/v1/feature-flags/, and /api/v1/audit-logs/, then inspect the shared Query validation used for skip and page. Reproduce the failures with the provided curl request, and check the rollout-schedules status error branch for the parameter-name collision. Done means every affected list route returns a 422 response identifying the invalid parameter, including the rollout-schedules error branch, instead of a generic 500.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

bug post-launch
  • Sent: GET /api/v1/rollout-schedules/?skip=9223372036854775808 (any role). The same for skip on
    GET /api/v1/users/ (superuser), GET /api/v1/metrics/errors and GET /api/v1/feature-flags/, and for page on
    GET /api/v1/audit-logs/ (the offset is (page - 1) * limit).
  • Comes back: 500 with the generic error body. The offset reaches the query, and PostgreSQL stores an offset in a
    64-bit integer, so anything from 2^63 up is refused. skip=9223372036854775807 answers 200.
  • Expected: 422 naming the parameter, for example an upper bound on skip and page (le= on the Query), the
    same on every list route.
  • Also on GET /api/v1/rollout-schedules/: the status filter parameter has the same name as the module the
    route's error branch uses for its status code, so that branch fails too (it still answers 500).
  • Reproduction (VIEWER): curl -H "Authorization: Bearer <VIEWER token>" 'http://localhost:8000/api/v1/rollout-schedules/?skip=9223372036854775808'

Found by API fuzzing (a local run), reproduced by hand.

Lingua principale
Python
Stelle
0
Fork
4
Merge medio
5h 36m
PR unite (30g)
509

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di Controlvar/controlvar

Tutte le issue di Controlvar/controlvar

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.