Skip to content

Commit a0efa1e

Browse files
author
mhugent
committedApr 17, 2008
Fix for crashes when trying to delete a vertex in a polygon ring that has less than 3 vertices (bug 1041)
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@8358 c8812cc2-4d05-0410-92ff-de0c093fc19c

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed
 

‎src/core/qgsgeometry.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1443,9 +1443,10 @@ bool QgsGeometry::deleteVertexAt(int atVertex)
14431443
case QGis::WKBLineString:
14441444
{
14451445
int* nPoints = (int*)ptr;
1446-
if((*nPoints) < 3 || vertexnr > (*nPoints)-1 || vertexnr < 0)
1446+
if((*nPoints) < 3 || vertexnr > (*nPoints)-1 || vertexnr < 0) //line needs at least 2 vertices
14471447
{
1448-
break;
1448+
delete newbuffer;
1449+
return;
14491450
}
14501451
int newNPoints = (*nPoints)-1; //new number of points
14511452
memcpy(newBufferPtr, &newNPoints, sizeof(int));
@@ -1498,9 +1499,10 @@ bool QgsGeometry::deleteVertexAt(int atVertex)
14981499
//find out if the vertex is in this line
14991500
if(vertexnr >= pointindex && vertexnr < pointindex + (*nPoints))
15001501
{
1501-
if(*nPoints < 3)
1502+
if(*nPoints < 3) //line needs at least 2 vertices
15021503
{
1503-
break;
1504+
delete newbuffer;
1505+
return false;
15041506
}
15051507
newNPoint = (*nPoints)-1;
15061508
}
@@ -1557,7 +1559,8 @@ bool QgsGeometry::deleteVertexAt(int atVertex)
15571559
{
15581560
if(*nPoints < 5) //a ring has at least 3 points
15591561
{
1560-
break;
1562+
delete newbuffer;
1563+
return false;
15611564
}
15621565
newNPoints = *nPoints - 1;
15631566
}
@@ -1634,7 +1637,8 @@ bool QgsGeometry::deleteVertexAt(int atVertex)
16341637
{
16351638
if(*nPoints < 5) //a ring has at least 3 points
16361639
{
1637-
break;
1640+
delete newbuffer;
1641+
return false;
16381642
}
16391643
newNPoints = *nPoints - 1;
16401644
}

0 commit comments

Comments
 (0)
Please sign in to comment.