Merge "Fix huffman decoder escape sequence length limitation."

This commit is contained in:
Treehugger Robot 2018-11-05 22:58:33 +00:00 committed by Gerrit Code Review
commit a4d6ca7b07
1 changed files with 7 additions and 5 deletions

View File

@ -127,9 +127,11 @@ amm-info@iis.fraunhofer.de
The function reads the escape sequence from the bitstream, The function reads the escape sequence from the bitstream,
if the absolute value of the quantized coefficient has the if the absolute value of the quantized coefficient has the
value 16. value 16.
A limitation is implemented to maximal 31 bits to prevent endless loops. A limitation is implemented to maximal 21 bits according to
If it strikes, MAX_QUANTIZED_VALUE + 1 is returned, independent of the sign of ISO/IEC 14496-3:2009(E) 4.6.3.3.
parameter q. This limits the escape prefix to a maximum of eight 1's.
If more than eight 1's are read, MAX_QUANTIZED_VALUE + 1 is
returned, independent of the sign of parameter q.
\return quantized coefficient \return quantized coefficient
*/ */
@ -139,11 +141,11 @@ LONG CBlock_GetEscape(HANDLE_FDK_BITSTREAM bs, /*!< pointer to bitstream */
if (fAbs(q) != 16) return (q); if (fAbs(q) != 16) return (q);
LONG i, off; LONG i, off;
for (i = 4; i < 32; i++) { for (i = 4; i < 13; i++) {
if (FDKreadBit(bs) == 0) break; if (FDKreadBit(bs) == 0) break;
} }
if (i == 32) return (MAX_QUANTIZED_VALUE + 1); if (i == 13) return (MAX_QUANTIZED_VALUE + 1);
off = FDKreadBits(bs, i); off = FDKreadBits(bs, i);
i = off + (1 << i); i = off + (1 << i);