d/patches: Import bug fix from upstream
authorMathieu Malaterre <malat@debian.org>
Fri, 12 Jan 2024 09:33:52 +0000 (10:33 +0100)
committerMathieu Malaterre <malat@debian.org>
Fri, 12 Jan 2024 09:33:52 +0000 (10:33 +0100)
debian/patches/da5370947226783ce3548bf1e5b7112fac70de46.patch [new file with mode: 0644]
debian/patches/series

diff --git a/debian/patches/da5370947226783ce3548bf1e5b7112fac70de46.patch b/debian/patches/da5370947226783ce3548bf1e5b7112fac70de46.patch
new file mode 100644 (file)
index 0000000..ba84c57
--- /dev/null
@@ -0,0 +1,57 @@
+From da5370947226783ce3548bf1e5b7112fac70de46 Mon Sep 17 00:00:00 2001
+From: Joerg Riesmeier <dicom@jriesmeier.com>
+Date: Wed, 8 Nov 2023 11:38:54 +0100
+Subject: [PATCH] Fixed issue with delimiters being converted.
+
+Fixed issue with delimiter character "\" being converted when converting
+a DICOM dataset that uses a Specific Character Set of "ISO 2022 IR 13\ISO
+2022 IR 87" to UTF-8. The delimiter "\" was incorrectly converted to the
+Yen sign when processing the value of an "LO" data element that contains
+multiple values but does not use any escape sequences. This issues has
+been fixed now by always treating the delimiters in a special way.
+
+Thanks to Mathieu Malaterre <mathieu.malaterre@gmail.com> for the report
+and David Gobbi <david.gobbi@gmail.com> for the analysis and testing.
+---
+ dcmdata/libsrc/dcspchrs.cc | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+diff --git a/dcmdata/libsrc/dcspchrs.cc b/dcmdata/libsrc/dcspchrs.cc
+index c327a1aa8..69d14a160 100644
+--- a/dcmdata/libsrc/dcspchrs.cc
++++ b/dcmdata/libsrc/dcspchrs.cc
+@@ -1,6 +1,6 @@
+ /*
+  *
+- *  Copyright (C) 2011-2022, OFFIS e.V.
++ *  Copyright (C) 2011-2023, OFFIS e.V.
+  *  All rights reserved.  See COPYRIGHT file for details.
+  *
+  *  This software and supporting documentation were developed by
+@@ -548,8 +548,9 @@ OFCondition DcmSpecificCharacterSet::convertString(const char *fromString,
+                                                    const OFString &delimiters)
+ {
+     OFCondition status = EC_Normal;
+-    // check whether there are any code extensions at all
+-    if (EncodingConverters.empty() || !checkForEscapeCharacter(fromString, fromLength))
++    // check whether there are or could be any code extensions
++    const OFBool hasEscapeChar = checkForEscapeCharacter(fromString, fromLength);
++    if (EncodingConverters.empty() || (!hasEscapeChar && delimiters.empty()))
+     {
+         DCMDATA_DEBUG("DcmSpecificCharacterSet: Converting '"
+             << convertToLengthLimitedOctalString(fromString, fromLength) << "'");
+@@ -564,10 +565,11 @@ OFCondition DcmSpecificCharacterSet::convertString(const char *fromString,
+         } else {
+             DCMDATA_DEBUG("DcmSpecificCharacterSet: Converting '"
+                 << convertToLengthLimitedOctalString(fromString, fromLength)
+-                << "' (with code extensions and delimiters '" << delimiters << "')");
++                << "' (with " << (hasEscapeChar ? "code extensions and " : "")
++                << "delimiters '" << delimiters << "')");
+         }
+-        // code extensions according to ISO 2022 used, so we need to check for
+-        // particular escape sequences in order to switch between character sets
++        // code extensions according to ISO 2022 (possibly) used, so we need to check
++        // for particular escape sequences in order to switch between character sets
+         toString.clear();
+         size_t pos = 0;
+         // some (extended) character sets use more than 1 byte per character
index fdcb90555b9b8de49c428850fb4e6f939d18f9bc..ed411ca19ccf0b338a0f6a70def5a3bff2e142f5 100644 (file)
@@ -10,3 +10,4 @@
 #1c8cca4bf6f7c92fc16f9e66faf49409c891a2b0.patch
 #f06a867513524664a1b03dfcf812d8b60fdd02cc.patch
 remove_version.patch
+da5370947226783ce3548bf1e5b7112fac70de46.patch