diff -Naur old/jchuff.c new/jchuff.c --- old/jchuff.c 2014-11-27 06:48:21.009442853 -1000 +++ new/jchuff.c 2014-11-27 06:48:46.289700004 -1000 @@ -391,7 +391,16 @@ #endif -#define BUFSIZE (DCTSIZE2 * 2) +/* Although it is exceedingly rare, it is possible for a Huffman-encoded + * coefficient block to be larger than the 128-byte unencoded block. For each + * of the 64 coefficients, PUT_BITS is invoked twice, and each invocation can + * theoretically store 16 bits (for a maximum of 2048 bits or 256 bytes per + * encoded block.) If, for instance, one artificially sets the AC + * coefficients to alternating values of 32767 and -32768 (using the JPEG + * scanning order-- 1, 8, 16, etc.), then this will produce an encoded block + * larger than 200 bytes. + */ +#define BUFSIZE (DCTSIZE2 * 4) #define LOAD_BUFFER() { \ if (state->free_in_buffer < BUFSIZE) { \