Thanks, strk.
I added a check in the LinearIterator constructor:
/**
* Creates an iterator starting at
* a component and vertex in a linear {...@link Geometry}
*
* @param linearGeom the linear geometry to iterate over
* @param componentIndex the component to start at
* @param vertexIndex the vertex to start at
* @throws IllegalArgumentException if linearGeom is not lineal
*/
public LinearIterator(Geometry linearGeom, int componentIndex, int
vertexIndex)
{
if (! (linearGeom instanceof Lineal))
throw new IllegalArgumentException("Lineal geometry is
required");
strk wrote:
Doing tests for the PHP biding I found a segfault
when using the C-API GEOSProject method against
something which is not a lineal geometry.
This goes down to linearref::LinearIterator assuming
the input is a lineal geometry w/out checking.
The bug goes deep into JTS as well, where you don't get
a segfault but do a wrong assumption here:
private void loadCurrentLine()
{
if (componentIndex >= numLines) {
currentLine = null;
return;
}
currentLine = (LineString) linear.getGeometryN(componentIndex);
}
That is, there's no code checking that 'linear' is a LINESTRING
or MULTILINESTRING:
public LinearIterator(Geometry linear, int componentIndex, int vertexIndex) {
this.linear = linear;
numLines = linear.getNumGeometries();
this.componentIndex = componentIndex;
this.vertexIndex = vertexIndex;
loadCurrentLine();
}
I'd throw an IllegalArgumentException from the constructor, if geom
is not LINEAL.
Will do this in GEOS trunk, but wanted to signal JTS too...
--strk;
() Free GIS & Flash consultant/developer
/\ http://strk.keybit.net/services.html
--
Martin Davis
Senior Technical Architect
Refractions Research, Inc.
(250) 383-3022
_______________________________________________
geos-devel mailing list
geos-devel@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/geos-devel