Update copyright date.
[asdcplib.git] / src / JP2K_Codestream_Parser.cpp
index 4211653ecad528f5a51f58d77924763e40862909..f4596a87e5ceb889faa2ebf6746aca5390ee448d 100755 (executable)
@@ -90,10 +90,12 @@ public:
        while ( p < end_p && ASDCP_SUCCESS(result) )
          {
            result = GetNextMarker(&p, NextMarker);
-#if 0
-           fprintf(stderr, "%s Length: %u\n",
-                   GetMarkerString(NextMarker.m_Type), NextMarker.m_DataSize);
-#endif
+
+           if ( ASDCP_FAILURE(result) )
+             {
+               result = RESULT_RAW_ESS;
+               break;
+             }
 
            switch ( NextMarker.m_Type )
              {
@@ -131,25 +133,34 @@ public:
                break;
 
              case MRK_COD:
-               if ( NextMarker.m_DataSize > DefaultCodingDataLength )
+               memset(&m_PDesc.CodingStyleDefault, 0, sizeof(CodingStyleDefault_t));
+
+               if ( NextMarker.m_DataSize > sizeof(CodingStyleDefault_t) )
                  {
                    DefaultLogSink().Error("Unexpectedly large CodingStyle data: %u\n", NextMarker.m_DataSize);
                    return RESULT_RAW_FORMAT;
                  }
 
-               m_PDesc.CodingStyleLength = NextMarker.m_DataSize;
-               memcpy(m_PDesc.CodingStyle, NextMarker.m_Data, m_PDesc.CodingStyleLength);
+               memcpy(&m_PDesc.CodingStyleDefault, NextMarker.m_Data, NextMarker.m_DataSize);
                break;
 
              case MRK_QCD:
-               if ( NextMarker.m_DataSize > DefaultCodingDataLength )
+               memset(&m_PDesc.QuantizationDefault, 0, sizeof(QuantizationDefault_t));
+
+               if ( NextMarker.m_DataSize < 16 )
+                 {
+                   DefaultLogSink().Error("No quantization signaled\n");
+                   return RESULT_RAW_FORMAT;
+                 }
+
+               if ( NextMarker.m_DataSize > MaxDefaults )
                  {
-                   DefaultLogSink().Error("Unexpectedly large QuantDefault data: %u\n", NextMarker.m_DataSize);
+                   DefaultLogSink().Error("Quantization Default length exceeds maximum %d\n", NextMarker.m_DataSize);
                    return RESULT_RAW_FORMAT;
                  }
 
-               m_PDesc.QuantDefaultLength = NextMarker.m_DataSize;
-               memcpy(m_PDesc.QuantDefault, NextMarker.m_Data, m_PDesc.QuantDefaultLength);
+               memcpy(&m_PDesc.QuantizationDefault, NextMarker.m_Data, NextMarker.m_DataSize);
+               m_PDesc.QuantizationDefault.SPqcdLength = NextMarker.m_DataSize - 1;
                break;
              }
          }