Skip to content

Incorrect length calculation in tree-based SQs #80

Description

@haghverdiNezhad

Hello,
Cornerstone is unable to read certain DICOM files that contain an SQ tree with nested SQs, and it throws the following error:


YPXCRZ:2232
Failed to load DICOM:
Object
error
:
dataSet
:
a
byteArray
:
Uint8Array(2193886) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …]
byteArrayParser
:
{readUint16: ƒ, readInt16: ƒ, readUint32: ƒ, readInt32: ƒ, readFloat: ƒ, …}
elements
:
x0018a001
:
{tag: 'x0018a001', vr: 'SQ', length: 436, dataOffset: 1124, hadUndefinedLength: true, …}
x001021b0
:
{tag: 'x001021b0', vr: 'LT', length: 0, dataOffset: 896}
x0008103e
:
{tag: 'x0008103e', vr: 'LO', length: 26, dataOffset: 658}
x0020000d
:
{tag: 'x0020000d', vr: 'UI', length: 52, dataOffset: 1576}
x0020000e
:
{tag: 'x0020000e', vr: 'UI', length: 54, dataOffset: 1636}
x00080005
:
{tag: 'x00080005', vr: 'CS', length: 10, dataOffset: 238}
x00080008
:
{tag: 'x00080008', vr: 'CS', length: 28, dataOffset: 256}
x00080012
:
{tag: 'x00080012', vr: 'DA', length: 8, dataOffset: 292}
x00080013
:
{tag: 'x00080013', vr: 'TM', length: 6, dataOffset: 308}
x00080016
:
{tag: 'x00080016', vr: 'UI', length: 26, dataOffset: 322}
x00080018
:
{tag: 'x00080018', vr: 'UI', length: 50, dataOffset: 356}
x00080020
:
{tag: 'x00080020', vr: 'DA', length: 8, dataOffset: 414}
x00080021
:
{tag: 'x00080021', vr: 'DA', length: 8, dataOffset: 430}
x00080022
:
{tag: 'x00080022', vr: 'DA', length: 8, dataOffset: 446}
x00080023
:
{tag: 'x00080023', vr: 'DA', length: 0, dataOffset: 462}
x00080030
:
{tag: 'x00080030', vr: 'TM', length: 6, dataOffset: 470}
x00080031
:
{tag: 'x00080031', vr: 'TM', length: 6, dataOffset: 484}
x00080032
:
{tag: 'x00080032', vr: 'TM', length: 14, dataOffset: 498}
x00080033
:
{tag: 'x00080033', vr: 'TM', length: 0, dataOffset: 520}
x00080050
:
{tag: 'x00080050', vr: 'SH', length: 0, dataOffset: 528}
x00080060
:
{tag: 'x00080060', vr: 'CS', length: 2, dataOffset: 536}
x00080064
:
{tag: 'x00080064', vr: 'CS', length: 4, dataOffset: 546}
x00080070
:
{tag: 'x00080070', vr: 'LO', length: 18, dataOffset: 558}
x00080080
:
{tag: 'x00080080', vr: 'LO', length: 20, dataOffset: 584}
x00080081
:
{tag: 'x00080081', vr: 'ST', length: 6, dataOffset: 612}
x00080090
:
{tag: 'x00080090', vr: 'PN', length: 0, dataOffset: 626}
x00081010
:
{tag: 'x00081010', vr: 'SH', length: 4, dataOffset: 634}
x00081030
:
{tag: 'x00081030', vr: 'LO', length: 4, dataOffset: 646}
x00081060
:
{tag: 'x00081060', vr: 'PN', length: 0, dataOffset: 692}
x00081070
:
{tag: 'x00081070', vr: 'PN', length: 8, dataOffset: 700}
x00081090
:
{tag: 'x00081090', vr: 'LO', length: 18, dataOffset: 716}
x00082111
:
{tag: 'x00082111', vr: 'ST', length: 60, dataOffset: 742}
x00100010
:
{tag: 'x00100010', vr: 'PN', length: 14, dataOffset: 810}
x00100020
:
{tag: 'x00100020', vr: 'LO', length: 8, dataOffset: 832}
x00100030
:
{tag: 'x00100030', vr: 'DA', length: 0, dataOffset: 848}
x00100040
:
{tag: 'x00100040', vr: 'CS', length: 2, dataOffset: 856}
x00101000
:
{tag: 'x00101000', vr: 'LO', length: 0, dataOffset: 866}
x00101010
:
{tag: 'x00101010', vr: 'AS', length: 4, dataOffset: 874}
x00101030
:
{tag: 'x00101030', vr: 'DS', length: 2, dataOffset: 886}
x00180015
:
{tag: 'x00180015', vr: 'CS', length: 6, dataOffset: 904}
x00180050
:
{tag: 'x00180050', vr: 'DS', length: 12, dataOffset: 918}
x00181000
:
{tag: 'x00181000', vr: 'LO', length: 2, dataOffset: 938}
x00181010
:
{tag: 'x00181010', vr: 'LO', length: 4, dataOffset: 948}
x00181012
:
{tag: 'x00181012', vr: 'DA', length: 8, dataOffset: 960}
x00181014
:
{tag: 'x00181014', vr: 'TM', length: 6, dataOffset: 976}
x00181016
:
{tag: 'x00181016', vr: 'LO', length: 18, dataOffset: 990}
x00181018
:
{tag: 'x00181018', vr: 'LO', length: 14, dataOffset: 1016}
x00181019
:
{tag: 'x00181019', vr: 'LO', length: 14, dataOffset: 1038}
x00181020
:
{tag: 'x00181020', vr: 'LO', length: 16, dataOffset: 1060}
x00181030
:
{tag: 'x00181030', vr: 'LO', length: 16, dataOffset: 1084}
x00185100
:
{tag: 'x00185100', vr: 'CS', length: 4, dataOffset: 1108}
x00200010
:
{tag: 'x00200010', vr: 'SH', length: 6, dataOffset: 1698}
x00200011
:
{tag: 'x00200011', vr: 'IS', length: 4, dataOffset: 1712}
x00200012
:
{tag: 'x00200012', vr: 'IS', length: 2, dataOffset: 1724}
x00200013
:
{tag: 'x00200013', vr: 'IS', length: 2, dataOffset: 1734}
x00200020
:
{tag: 'x00200020', vr: 'CS', length: 6, dataOffset: 1744}
x00280002
:
{tag: 'x00280002', vr: 'US', length: 2, dataOffset: 1758}
x00280004
:
{tag: 'x00280004', vr: 'CS', length: 4, dataOffset: 1768}
x00280006
:
{tag: 'x00280006', vr: 'US', length: 2, dataOffset: 1780}
x00280010
:
{tag: 'x00280010', vr: 'US', length: 2, dataOffset: 1790}
x00280011
:
{tag: 'x00280011', vr: 'US', length: 2, dataOffset: 1800}
x00280100
:
{tag: 'x00280100', vr: 'US', length: 2, dataOffset: 1810}
x00280101
:
{tag: 'x00280101', vr: 'US', length: 2, dataOffset: 1820}
x00280102
:
{tag: 'x00280102', vr: 'US', length: 2, dataOffset: 1830}
x00280103
:
{tag: 'x00280103', vr: 'US', length: 2, dataOffset: 1840}
x00280301
:
{tag: 'x00280301', vr: 'CS', length: 4, dataOffset: 1850}
x00282110
:
{tag: 'x00282110', vr: 'CS', length: 2, dataOffset: 1862}
x00570010
:
{tag: 'x00570010', vr: 'UN', length: 18, dataOffset: 1876}
x00571004
:
{tag: 'x00571004', vr: 'UN', length: 2368, dataOffset: 1906}
x00571005
:
{tag: 'x00571005', vr: 'SQ', length: 4278393195, dataOffset: 4286, hadUndefinedLength: true, …}
[[Prototype]]
:
Object
warnings
:
(4) ['eof encountered before finding sequence item delimiter in sequence item of undefined length', 'eof encountered before finding sequence delimiter in sequence of undefined length', 'eof encountered before finding item delimiter tag while reading sequence item of undefined length', 'eof encountered before finding sequence delimitation tag while reading sequence of undefined length']
[[Prototype]]
:
Object
exception
:
"dicomParser:parseDicomDataSetExplicit: buffer overrun"
[[Prototype]]
:
Object
[[Prototype]]
:
Object

It lists the length as 4 GB,
whereas when I open it with the Radient program,
it displays the correct value: (0057,1005) SQ # 0, 0

There seems to be a bug somewhere; apparently, it's calculating the length incorrectly for nested tree-structured SQs.
{tag: 'x00571005', vr: 'SQ', length: 4278393195, dataOffset: 4286, hadUndefinedLength: true, …}

I went and found the specific sq element that was causing the error and deleted it entirely; that made the image appear.
However, I wanted to know if there is a way in Cornerstone to avoid deleting the tag while still preventing the error and ensuring the image displays correctly.


cornerstone-core - 2.6.1 - 2021-11-19


Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions