Hmmm.... The geometry member is initialized to NULL and not used unless you do 
something like a buffer or a convex hull. The code to free the geometry does 
check to make sure the geometry is not NULL before unallocating it. This leads 
me to believe the problem is not GEOS per se but elsewhere in the query or 
MapScript code- perhaps someplace that doesn't use msInitShape() to initialize 
a shapeObj structure, which could lead to an unitialized geometry pointer. I 
guess we should try the same code snippet in another MapScript flavor to make 
sure it's not a java specific issue.

Steve

>>> Donovan <[EMAIL PROTECTED]> 11/16/05 12:07 PM >>>
>You've got my attention. Donovan do you have any more specific information
regarding the GEOS crash?   --Steve

Sure,

I'm using mapserver 4.8.0beta - but 4.6.0 breaks too
--geos-2.1.1 from rpm (gdal-1.2.6 and proj-4.4.9 also)
--FedoraCore3 with java1.5 (glibc-2.3.5)

I think the crash occurs any time a shapeObj is returned.

I modified the java mapscript example class DrawMap from the mapserver
source tree to demonstrate the problem - Query.java is attached.

Without GEOS, Query.java generates the png but with GEOS, it looks like this:
# cd ~/mapserver-4.8.0-beta1/mapscript/java
# javac -classpath ./:examples/:./mapscript.jar -d examples/ examples/*.java
# java -classpath ./:examples/:./mapscript.jar -Djava.library.path=. Query
../../tests/test.map ./map.png

> The map will be drawn to:./map.png
> *** glibc detected *** malloc(): memory corruption: 0xb1c11ee8 ***
> Aborted

>From poking around in the source i think the crash happens while freeing the
geometry pointer in the shape obj but i didn't get any further.

If there is anything else i can provide or if some testing is required i'd
be happy to help...

Thanks for your attention


----mapscript/java/examples/Query.java----cut-here--
import edu.umn.gis.mapscript.*;

public class Query {

  public static void usage() {
    System.err.println("Usage: Query {mapfile} {outfile}");
    System.exit(-1);
  }

  public static void main(String[] args) {
    if (args.length != 2) usage();
        try
        {
          System.loadLibrary("mapscript");
        }
        catch(UnsatisfiedLinkError ule)
        {
          System.err.println(ule);
          System.exit(-1);
        }

    mapObj map = new mapObj(args[0]);
    map.getImagecolor().setRGB(153, 153, 204);
    styleObj st = map.getLayer(1).getClass(0).getStyle(0);
    st.getColor().setHex("#000000");
    imageObj img = map.draw();
    System.out.println("The map will be drawn to:"+args[1]);

    layerObj layer = map.getLayerByName("POLYGON");
    layer.setTemplate("dummy.template");
    layer.queryByPoint(map,new pointObj(0.10,51.4,0),
        mapscriptConstants.MS_MULTIPLE,-1);
    resultCacheObj results = layer.getResults();
    layer.open();
    for (int i=0;i<results.getNumresults();i++) {
       resultCacheMemberObj result = results.getResult(i);
       //CRASH HAPPENS ON NEXT LINE
       shapeObj feature = layer.getFeature(result.getShapeindex(),-1);
    }
    layer.close();

    img.save(args[1], map);
  }
}
-----End of Query.java----------

Reply via email to