On Mon, Dec 03, 2007 at 07:06:15AM +0000, Zou Lunkai wrote:
> +void
> +DisplayList::mergeDisplayList(DisplayList & newList)
> +{
> + testInvariant();
> +
> + iterator itOld = beginNonRemoved(_charsByDepth);
> + iterator itNew = beginNonRemoved(newList._charsByDepth);
> +
> + iterator itOldEnd = staticZoneEnd(_charsByDepth);
> + iterator itNewEnd = staticZoneEnd(newList._charsByDepth);
> +
> + while( itOld != itOldEnd )
> + {
...
> + while( itNew != itNewEnd )
> + {
...
> + _charsByDepth.erase(itOldBack);
I'm not sure it is safe to use itOldBack again after this erase
(it' used as the while condition)
> + // replace the old character with the
> character in the new depth
> + _charsByDepth.insert(itOldBack,
> *itNewBack);
> + _charsByDepth.erase(itOldBack);
Same here, both insert and erase would make itOldBack not point to the end
anymore.
> + newList._charsByDepth.erase(itNewBack);
This would apply to itNewBack...
> + _charsByDepth.insert(itOldBack, *itNewBack );
and here.
> + // unload remaining characters in old list
> + while( itOld != itOldEnd )
> + {
What would itOldEnd point to after all possible modifications above ?
> + // add remaining characters in new list to the old list
> + if( itNew != itNewEnd )
> + {
Same here...
--strk;
_______________________________________________
Gnash-commit mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnash-commit