[Debian-med-packaging] Bug#1039465: DICOM/JSON: (0018, 1411) DS [-3. ] # 4, 1 Exposure Index

Mathieu Malaterre malat at debian.org
Mon Jun 26 10:44:32 BST 2023


Source: dcmtk
Version: 3.6.7-8+b1
Forwarded: https://support.dcmtk.org/redmine/issues/1079
Tags: upstream

dcm2json uses the method DcmJsonFormat::normalizeDecimalString() to
normalize DICOM DS values before writing them as JSON.
However, the method currently does not catch all cases where a legal
DICOM DS value is not permitted in JSON.
The JSON type number is defined in
https://www.rfc-editor.org/rfc/rfc7159#section-6 as follows:

number = [ minus ] int [ frac ] [ exp ]
      decimal-point = %x2E       ; .
      digit1-9 = %x31-39         ; 1-9
      e = %x65 / %x45            ; e E
      exp = e [ minus / plus ] 1*DIGIT
      frac = decimal-point 1*DIGIT
      int = zero / ( digit1-9 *DIGIT )
      minus = %x2D               ; -
      plus = %x2B                ; +
      zero = %x30                ; 0

The definition of DICOM DS relies on the ANSI X3.9 standard, i.e. the
specification of FORTRAN. The FORTRAN 'signed-real-literal-constant'
is defined (in slightly simplified form) as:

R709 kind-param is digit-string or scalar-int-constant-name
R710 signed-digit-string is [ sign ] digit-string
R711 digit-string is digit [ digit ] ...
R712 sign is + or –
R713 signed-real-literal-constant is [ sign ] real-literal-constant
R714 real-literal-constant is significand [ exponent-letter exponent ]
or digit-string exponent-letter exponent
R715 significand is digit-string . [ digit-string ] or . digit-string
R716 exponent-letter is E or D
R717 exponent is signed-digit-string

As a regular expression, DICOM DS values can thus be defined as

[+-]?([0-9]+.[0-9]*|.?[0-9]+)(E[+-]?[0-9]+)?

Differences between JSON number and DICOM DS are thus:

JSON does not permit a leading '+' in the significand (i.e. "+1.0" is
valid in DICOM but not in JSON)
JSON does not permit leading zeroes in the significand (i.e. "0003" is
valid in DICOM but not in JSON)
JSON does not permit a leading '.' in the significand (i.e. ".5" is
valid in DICOM but not in JSON)
JSON does not permit a trailing '.' in the significand (i.e. "5." is
valid in DICOM but not in JSON)

DcmJsonFormat::normalizeDecimalString() currently accounts for
differences 1 and 3, but not for 2 and 4. This should be fixed.



More information about the Debian-med-packaging mailing list