X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2FJP2K_Codestream_Parser.cpp;h=f4596a87e5ceb889faa2ebf6746aca5390ee448d;hb=57ddb7894042229bbc5f14e9257068afcc6f8725;hp=4211653ecad528f5a51f58d77924763e40862909;hpb=5e91ca52284adc91a42d6fe389c9cc70a33126a6;p=asdcplib.git diff --git a/src/JP2K_Codestream_Parser.cpp b/src/JP2K_Codestream_Parser.cpp index 4211653..f4596a8 100755 --- a/src/JP2K_Codestream_Parser.cpp +++ b/src/JP2K_Codestream_Parser.cpp @@ -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; } }