X-Git-Url: https://git.sesse.net/?p=fjl;a=blobdiff_plain;f=dehuff.h;h=a6a431a8139440a7052ce1dadd39b182ee5566b4;hp=224005f84ad3dcb2797c9086a11485c8269c825c;hb=9069ae93f3e9e9b44f5f28968f508d09f0711737;hpb=9d2d4ff08d760e0abd83d2cea03c77d5b752a400 diff --git a/dehuff.h b/dehuff.h index 224005f..a6a431a 100644 --- a/dehuff.h +++ b/dehuff.h @@ -51,9 +51,8 @@ unsigned read_huffman_symbol_slow_path(const struct huffman_table* table, static inline unsigned read_huffman_symbol(const struct huffman_table* table, struct bit_source* source) { - // FIXME: We can read past the end of the stream here in some edge - // cases. We need to define some guarantees in the layers above. possibly_refill(source, DEHUF_TABLE_BITS); + assert(source->bits_available >= DEHUF_TABLE_BITS); unsigned lookup = peek_bits(source, DEHUF_TABLE_BITS); int code = table->lookup_table_codes[lookup]; int length = table->lookup_table_length[lookup]; @@ -61,7 +60,7 @@ static inline unsigned read_huffman_symbol(const struct huffman_table* table, if (code == DEHUF_SLOW_PATH) { return read_huffman_symbol_slow_path(table, source); } - + read_bits(source, length); return code; }