diff --git a/src/highdicom/image.py b/src/highdicom/image.py index 07894048..aaeda870 100644 --- a/src/highdicom/image.py +++ b/src/highdicom/image.py @@ -3980,10 +3980,14 @@ def _include_sequence(seq): instance_sequence = ( ref_series.ReferencedSOPSequence ) - else: + elif 'ReferencedInstanceSequence' in ref_series: instance_sequence = ( ref_series.ReferencedInstanceSequence ) + else: + # This is invalid according to the standard, but + # has been observed in some data + instance_sequence = [] for ref_ins in instance_sequence: instance_data.append( diff --git a/tests/test_image.py b/tests/test_image.py index 4f40e980..a963c4c0 100644 --- a/tests/test_image.py +++ b/tests/test_image.py @@ -1439,3 +1439,17 @@ def test_imread_from_dicom_bytes_io_lazy(): # Two reads to ensure opening/closing is handled im.get_frame(1) im.get_frame(2) + + +def test_imread_missing_referenced_instances(): + # Test for the case where a ReferencedSeriesSequence is present but does + # not list instances. This is not valid by the standard but is observed and + # we should be tolerant to it + dcm = get_testdata_file('eCT_Supplemental.dcm', read=True) + + # Add ReferencedSeriesSequence without any referenced instances + ref_series = pydicom.Dataset() + ref_series.SeriesInstanceUID = UID() + dcm.ReferencedSeriesSequence = [ref_series] + + Image.from_dataset(dcm, copy=False)