static void *DestroyProfile(void *profile)
{
  return((void *) DestroyStringInfo((StringInfo *) profile));
}

The product calls free() twice on the same memory address, potentially leading to modification of unexpected memory locations.