Menu

#477 assertion failure in MagickMapIterateNext

v1.0_(example)
closed-fixed
None
5
2017-09-30
2017-09-25
bestshow
No

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

Discussion

  • Bob Friesenhahn

    Bob Friesenhahn - 2017-09-30
    • status: open --> closed-fixed
    • assigned_to: Bob Friesenhahn
     
  • Bob Friesenhahn

    Bob Friesenhahn - 2017-09-30

    This problem is fixed by Mercurial changeset 15184:b6af32bbf667. Thanks for the report!

     

Log in to post a comment.

MongoDB Logo MongoDB