Here is the critical code:
…
iterator=MagickMapAllocateIterator(map); //510
while(MagickMapIterateNext(iterator,&key))
{
const void *object=MagickMapDereferenceIterator(iterator,&size);
…
MagickMapAllocateIterator(…) may return NULL,the “iterator” was passed to MagickMapIterateNext.
in MagickMapIterateNext:
…
MagickExport unsigned int
MagickMapIterateNext(MagickMapIterator iterator,const char **key)
{
assert(iterator != 0); //868
assert(iterator->signature == MagickSignature);
assert(key != 0);
…
If iterator is NULL,the assertion "assert(iterator !=0)" will failed.
Credit: ADLab of Venustech
This is a duplicate of issue #477, which is now fixed.