Skip to content

Commit 3e83aa4

Browse files
committed
fix: validate invalid dicom uploads before processing
Made-with: Cursor
1 parent 4ade3c5 commit 3e83aa4

2 files changed

Lines changed: 14 additions & 3 deletions

File tree

apps/backend/app/routers/reports.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from typing import List, Optional
88
from .data import data
99
from pyaslreport import generate_report, get_bids_metadata
10+
from pyaslreport.main import get_dicom_header
1011
from pyaslreport.enums import ModalityTypeValues
1112
from fastapi.responses import FileResponse
1213
from weasyprint import HTML
@@ -89,6 +90,16 @@ async def get_report_dicom(
8990
except Exception as e:
9091
print(f"Error reading DICOM file {file.filename}: {e}")
9192

93+
try:
94+
get_dicom_header(data["dicom_dir"])
95+
except (TypeError, ValueError, OSError, FileNotFoundError) as e:
96+
print(f"Invalid DICOM upload: {e}")
97+
await remove_dir(base_dir)
98+
raise HTTPException(
99+
status_code=status.HTTP_400_BAD_REQUEST,
100+
detail="No valid DICOM files provided"
101+
)
102+
92103
try:
93104
metadata, asl_context = get_bids_metadata(data)
94105
print("Generated BIDS metadata:", metadata)

apps/backend/tests/test_report.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ def test_get_report_dicom_with_invalid_file(tmp_path):
2323
file_path.write_text("not a dicom")
2424
with open(file_path, "rb") as f:
2525
response = client.post(
26-
"/report/process/dicom",
26+
"/api/report/process/dicom",
2727
files={"dcm_files": ("not_a_dicom.txt", f, "text/plain")},
2828
data={"modality": "ASL"}
2929
)
30-
# Should still return 500 due to invalid dicom
31-
assert response.status_code in [500, 200]
30+
assert response.status_code == 400
31+
assert response.json()["detail"] == "No valid DICOM files provided"
3232

3333
def test_report_pdf_endpoint():
3434
# Minimal valid report_data for rendering

0 commit comments

Comments
 (0)