Project

General

Profile

Actions

Bug #687

closed

Minor bug in DCMJPLS encoder

Added by Marco Eichelberg over 9 years ago. Updated over 9 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
-
Target version:
Start date:
2016-06-02
Due date:
% Done:

0%

Estimated time:
Module:
dcmjpls
Operating System:
Compiler:

Description

In 2014, our team discovered an overflow bug in the CharLS encoder and submitted a patch [[http://charls.codeplex.com/workitem/10742]] that was also included in DCMJPLS (dcmjpls/libcharls/encodstr.h). However, according to Mathieu Malaterre, the patch does not solve all cases, and needs further modification as follows:

--- a/dcmjpls/libcharls/encodstr.h
+++ b/dcmjpls/libcharls/encodstr.h
@@ -70,17 +70,23 @@ protected:
 #endif

      bitpos -= length;
-     if (bitpos > 0)
+     if (bitpos >= 0)
      {
              valcurrent = valcurrent | (value << bitpos);
              return;
      }
+
      valcurrent |= value >> -bitpos;
+     Flush();

+     // A second flush may be required if extra marker-detect bits were needed and not all bits could be written.
+     if (bitpos < 0)
+     {
+           valcurrent |= value >> -bitpos;
            Flush();
+     }

      ASSERT(bitpos >=0);
-     if (bitpos < 32)
      valcurrent |= value << bitpos;
   }

@@ -107,7 +113,7 @@ protected:

       if (_isFFWritten)
       {
-        // insert highmost bit
+        // JPEG-LS requirement (T.87, A.1) to detect markers: after a xFF value a single 0 bit needs to be inserted.
         *_position = BYTE(valcurrent >> 25);
         valcurrent = valcurrent << 7;
         bitpos += 7;

The patch compiles in DCMTK, but needs some testing before being committed.

Actions

Also available in: Atom PDF