--- giflib-4.1.3/lib/gif_hash.c.64 2005-09-20 13:39:32.000000000 -0700 +++ giflib-4.1.3/lib/gif_hash.c 2005-09-20 13:41:40.000000000 -0700 @@ -45,7 +45,7 @@ NumberOfMisses = 0; #endif /* DEBUG_HIT_RATE */ -static int KeyItem(unsigned long Item); +static int KeyItem(unsigned int Item); /****************************************************************************** * Initialize HashTable - allocate the memory needed and clear it. * @@ -69,17 +69,17 @@ ******************************************************************************/ void _ClearHashTable(GifHashTableType *HashTable) { - memset(HashTable -> HTable, 0xFF, HT_SIZE * sizeof(long)); + memset(HashTable -> HTable, 0xFF, HT_SIZE * sizeof(int)); } /****************************************************************************** * Routine to insert a new Item into the HashTable. The data is assumed to be * * new one. * ******************************************************************************/ -void _InsertHashTable(GifHashTableType *HashTable, unsigned long Key, int Code) +void _InsertHashTable(GifHashTableType *HashTable, unsigned int Key, int Code) { int HKey = KeyItem(Key); - unsigned long *HTable = HashTable -> HTable; + unsigned int *HTable = HashTable -> HTable; #ifdef DEBUG_HIT_RATE NumberOfTests++; @@ -99,10 +99,10 @@ * Routine to test if given Key exists in HashTable and if so returns its code * * Returns the Code if key was found, -1 if not. * ******************************************************************************/ -int _ExistsHashTable(GifHashTableType *HashTable, unsigned long Key) +int _ExistsHashTable(GifHashTableType *HashTable, unsigned int Key) { int HKey = KeyItem(Key); - unsigned long *HTable = HashTable -> HTable, HTKey; + unsigned int *HTable = HashTable -> HTable, HTKey; #ifdef DEBUG_HIT_RATE NumberOfTests++; @@ -127,7 +127,7 @@ * Because the average hit ratio is only 2 (2 hash references per entry), * * evaluating more complex keys (such as twin prime keys) does not worth it! * ******************************************************************************/ -static int KeyItem(unsigned long Item) +static int KeyItem(unsigned int Item) { return ((Item >> 12) ^ Item) & HT_KEY_MASK; } --- giflib-4.1.3/lib/gif_hash.h.64 2005-09-20 13:39:42.000000000 -0700 +++ giflib-4.1.3/lib/gif_hash.h 2005-09-20 13:42:08.000000000 -0700 @@ -25,12 +25,12 @@ #define HT_PUT_CODE(l) (l & 0x0FFF) typedef struct GifHashTableType { - unsigned long HTable[HT_SIZE]; + unsigned int HTable[HT_SIZE]; } GifHashTableType; GifHashTableType *_InitHashTable(void); void _ClearHashTable(GifHashTableType *HashTable); -void _InsertHashTable(GifHashTableType *HashTable, unsigned long Key, int Code); -int _ExistsHashTable(GifHashTableType *HashTable, unsigned long Key); +void _InsertHashTable(GifHashTableType *HashTable, unsigned int Key, int Code); +int _ExistsHashTable(GifHashTableType *HashTable, unsigned int Key); #endif /* _GIF_HASH_H_ */ --- giflib-4.1.3/lib/egif_lib.c.64 2005-09-20 13:45:28.000000000 -0700 +++ giflib-4.1.3/lib/egif_lib.c 2005-09-20 13:43:39.000000000 -0700 @@ -188,6 +188,12 @@ _GifError = E_GIF_ERR_NOT_ENOUGH_MEM; return NULL; } + if ((Private->HashTable = _InitHashTable()) == NULL) { + free(GifFile); + free(Private); + _GifError = E_GIF_ERR_NOT_ENOUGH_MEM; + return NULL; + } GifFile->Private = (VoidPtr) Private; Private->FileHandle = 0; @@ -832,7 +838,7 @@ /* Form a new unique key to search hash table for the code combines * CrntCode as Prefix string with Pixel as postfix char. */ - NewKey = (((unsigned long) CrntCode) << 8) + Pixel; + NewKey = (((unsigned int) CrntCode) << 8) + Pixel; if ((NewCode = _ExistsHashTable(HashTable, NewKey)) >= 0) { /* This Key is already there, or the string is old one, so * simple take new code as our CrntCode: