***************************************************************************/
#include <stdlib.h>
-#include <assert.h>
#include <stdio.h>
#include <string.h>
enum huffman_error huffman_import_tree_rle(struct huffman_decoder* decoder, struct bitstream* bitbuf)
{
- int numbits, curnode;
+ int numbits;
+ uint32_t curnode;
enum huffman_error error;
/* bits per entry depends on the maxbits */
else
{
int repcount = bitstream_read(bitbuf, numbits) + 3;
+ if (repcount + curnode > decoder->numcodes)
+ return HUFFERR_INVALID_DATA;
while (repcount--)
decoder->huffnode[curnode++].numbits = nodebits;
}
int last = 0;
int count = 0;
int index;
- int curcode;
+ uint32_t curcode;
uint8_t rlefullbits = 0;
uint32_t temp;
enum huffman_error error;
enum huffman_error huffman_compute_tree_from_histo(struct huffman_decoder* decoder)
{
- int i;
+ uint32_t i;
uint32_t lowerweight;
uint32_t upperweight;
/* compute the number of data items in the histogram */
int huffman_build_tree(struct huffman_decoder* decoder, uint32_t totaldata, uint32_t totalweight)
{
- int curcode;
+ uint32_t curcode;
int nextalloc;
int listitems = 0;
int maxbits = 0;
enum huffman_error huffman_assign_canonical_codes(struct huffman_decoder* decoder)
{
- int curcode, codelen;
+ uint32_t curcode;
+ int codelen;
uint32_t curstart = 0;
/* build up a histogram of bit lengths */
uint32_t bithisto[33] = { 0 };
void huffman_build_lookup_table(struct huffman_decoder* decoder)
{
- int curcode;
+ uint32_t curcode;
/* iterate over all codes */
for (curcode = 0; curcode < decoder->numcodes; curcode++)
{