Backend: difetti minori dalla revisione del 21/09 #36
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
GRAVITÀ: bassa
asyncio.to_thread. PRESUNTO nei tempi.content_typedel client;x.htmldichiarato image/png è servito come text/html; logo ammette SVG; dimensione controllata dopo aver letto tutto in memoria. Path traversal escluso.has_rolea mano e ignorais_admin: admin senza ruoli → 403.{"roles": null}o{"is_admin": null}→ 500. Un admin può togliersiis_adminsenza ritorno via API.update_current_versionnon hatask_type="drawing"(la riga :293 sì): diventa "note".ip_addressè il proxy;actionString(100) con path lunghi fa fallire l'insert in silenzio; INSERT+commit a ogni richiesta, tabella senza limite.str(e)invece di 502; timeout 60 s senza retry.datetime.now()naive locale controutcnow()di auth_service.py:74: fusi mescolati nello stesso DB.VERIFICATO: lettura del codice da parte del revisore; non rieseguiti.
ORIGINE: revisione fable del 21/09/2026 su ramo
V3.0.0, commit8cc5e82. Documento completo:_output/2026-09-21-TieMeasureFlow-revisione.mdsu Wasabi.⚡ jeeg — preso in carico 2026-09-21T20:23:29Z
ramo:
lavoro/jeeg· capacità: docker, gpu, systemdANALISI (passo 1) — ramo
lavoro/jeeg, worktree~/lavoro/TieMeasureFlowsu jeeg, lotto A3MODIFICHE, una per punto dell'issue:
await asyncio.to_thread(...).Content-Disposition: attachmento rifiutalo: scegli RIFIUTO di SVG) e vincola l'estensione al tipo rilevato; leggi a blocchi e interrompi oltre il limite di dimensione.require_rolestandard (ammette admin).roles/is_adminnull → 422; un admin non può togliereis_admina se stesso né all'ultimo admin → 409.task_type="drawing"come alla riga :293.actiona 100 caratteri;ip_addressdallo stesso_client_ipdel rate limit (importa la funzione; il lotto A2 la modifica: usa la firma_client_ip(request)).TEST: uno per punto 2, 3, 4, 5, 7.
NON TOCCARE: rate_limit.py, auth_service.py, setup.py (lotto A2); tasks.py, measurement_service.py, production*.py (lotto A1).
Soluzione
ESITO: fatto
COSA: Punti 1-7 fatti: chiamate bloccanti in
asyncio.to_thread; tipo file dai magic bytes con estensione vincolata, SVG rifiutato, lettura a blocchi; export CSV ammette admin; roles/is_admin null → 422 e ultimo admin protetto (409); task di defaultdrawing; log accessi con action troncata e IP reale; errori del modello AI → 502. Punto 8 (datetime): issue nuova.COMMIT (ramo lavoro/jeeg, unito su V3.0.0 a
d483fa1): 805f41c; 3e99b64; 403c923; 5ca3dc1; 302903a; 1d5f245;3f70f99PROVA:
uv run --extra server --extra client --extra dev pytest -q→ 622 passed, 4 skipped (erano 391); visione su Python 3.13 → 16 passed (erano 8).