assertion failure in MagickMapIterateNext
Swiss army knife of image processing
Brought to you by:
bfriesen
Here is the critical code: (in MagickMapAllocateIterator)
iterator=MagickAllocateMemory(MagickMapIterator, //609
sizeof(MagickMapIteratorHandle));
if (iterator)
{
iterator->map=map;
iterator->member=0;
iterator->position=FrontPosition;
iterator->map->reference_count++;
iterator->signature=MagickSignature;
}
UnlockSemaphoreInfo(map->semaphore);
return iterator;
MagickAllocateMemory(...) may return NULL, and return the value "iterator" to the caller MagickMapCloneMap:
...
iterator=MagickMapAllocateIterator(map); //510
while(MagickMapIterateNext(iterator,&key))
{
const void *object=MagickMapDereferenceIterator(iterator,&size);
/* Add clones key and object on insertion */
if (MagickMapAddEntry(map_clone,key,object,size,exception) == False)
{
MagickMapDeallocateIterator(iterator);
MagickMapDeallocateMap(map_clone);
return 0;
}
}
...
The iterator was passed to MagickMapIterateNext:
MagickMapIterateNext(MagickMapIterator iterator,const char **key)
{
assert(iterator != 0); //868
assert(iterator->signature == MagickSignature);
assert(key != 0);
LockSemaphoreInfo(iterator->map->semaphore);
*key=(const char *) NULL;
....
If iterator is NULL,the assertion "assert(iterator !=0)" will failed.
Credit : ADLab of Venustech
This problem is fixed by Mercurial changeset 15184:b6af32bbf667. Thanks for the report!