[Mapserver-dev] bug in mapswf.c (msDrawLabelCacheSWF)?
Yewondwossen Assefa
assefa at dmsolutions.ca
Tue Dec 2 16:55:04 EST 2003
Hi There,
Thanks for pointing this out.
I have done the modifications to the source code to avoid the problem.
Although the changes you did should avoid the crash, there was a
potential error when assigning image->img.swf->nCurrentMovie =
cachePtr->layerindex since the movie index and the layer index are not
in sync. The crash happened for layerindex > nLayerMovies but the
assignment could also be wrong without a crash.
If you are willing to do the tests please contact me personally and I
will send you the modifications before commiting the code. If not I will
enter a bug and commit the code when I will do proper testing on my side.
Late
Steve Spicklemire wrote:
>
> Hi (again) Mapserver folks,
>
> I have a map where msDrawLabelCacheSWF segfaults mapserver when
> OUTPUT_MOVIE=MULTIPLE. The problem is that if the last layer is not
> drawn, drawMap still tries to cache labels on that layer, and
> (mistakenly) tries to access the movie for that layer, which immediately
> segfaults since there is no movie for that layer (drawlayer never calls
> startlayer if the layer isn't visible).
>
> Anyway... this patch stops the crashing for me:
>
> Index: mapswf.c
> ===================================================================
> RCS file: /data2/cvsroot/mapserver/mapswf.c,v
> retrieving revision 1.31
> diff -C3 -r1.31 mapswf.c
> *** mapswf.c 16 Jul 2003 16:44:58 -0000 1.31
> --- mapswf.c 2 Dec 2003 20:53:18 -0000
> ***************
> *** 2119,2128 ****
> /* set the current layer so the label will be drawn in the
> */
> /* using the correct SWF handle.
> */
> /*
> ==================================================================== */
> ! image->img.swf->nCurrentMovie = cachePtr->layerindex;
>
> ! //msImageStartLayerSWF(map, layerPtr, image);
> ! image->img.swf->nCurrentLayerIdx = cachePtr->layerindex;
> /*
> ==================================================================== */
> /* at this point the layer (at the shape level is closed). So
> */
> /* we will open it if necessary.
> */
> --- 2119,2134 ----
> /* set the current layer so the label will be drawn in the
> */
> /* using the correct SWF handle.
> */
> /*
> ==================================================================== */
> !
> ! if (cachePtr->layerindex >= image->img.swf->nLayerMovies) {
> ! continue;
> ! }
> !
> ! image->img.swf->nCurrentMovie = cachePtr->layerindex;
> !
>
> ! //msImageStartLayerSWF(map, layerPtr, image);
> ! image->img.swf->nCurrentLayerIdx = cachePtr->layerindex;
> /*
> ==================================================================== */
> /* at this point the layer (at the shape level is closed). So
> */
> /* we will open it if necessary.
> */
>
>
> I've not seen any trouble with it so far..
>
> -steve
>
> _______________________________________________
> Mapserver-dev mailing list
> Mapserver-dev at lists.gis.umn.edu
> http://lists.gis.umn.edu/mailman/listinfo/mapserver-dev
>
--
----------------------------------------------------------------
Assefa Yewondwossen
Software Analyst
Email: assefa at dmsolutions.ca
http://www.dmsolutions.ca/
Phone: (613) 565-5056 (ext 14)
Fax: (613) 565-0925
----------------------------------------------------------------
More information about the mapserver-dev
mailing list