Skip to content

Commit 44a8b7e

Browse files
author
mhugent
committed
Added some 0 pointer checks for geometry (useful e.g. in cases of NULL geometries in postgis layers)
git-svn-id: http://svn.osgeo.org/qgis/trunk/qgis@8156 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent ed665d6 commit 44a8b7e

File tree

1 file changed

+66
-14
lines changed

1 file changed

+66
-14
lines changed

src/core/qgsgeometry.cpp

Lines changed: 66 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5044,7 +5044,13 @@ double QgsGeometry::distance(QgsGeometry& geom)
50445044
QgsGeometry* QgsGeometry::buffer(double distance, int segments)
50455045
{
50465046
if (mGeos == NULL)
5047-
exportWkbToGeos();
5047+
{
5048+
exportWkbToGeos();
5049+
}
5050+
if(!mGeos)
5051+
{
5052+
return 0;
5053+
}
50485054
GEOS_GEOM::Geometry* geos = mGeos->buffer(distance, segments);
50495055
QgsGeometry* g = new QgsGeometry;
50505056
g->setGeos(geos);
@@ -5054,7 +5060,13 @@ QgsGeometry* QgsGeometry::buffer(double distance, int segments)
50545060
QgsGeometry* QgsGeometry::convexHull()
50555061
{
50565062
if (mGeos == NULL)
5057-
exportWkbToGeos();
5063+
{
5064+
exportWkbToGeos();
5065+
}
5066+
if(!mGeos)
5067+
{
5068+
return 0;
5069+
}
50585070
GEOS_GEOM::Geometry* geos = mGeos->convexHull();
50595071
QgsGeometry* g = new QgsGeometry;
50605072
g->setGeos(geos);
@@ -5064,11 +5076,21 @@ QgsGeometry* QgsGeometry::convexHull()
50645076
QgsGeometry* QgsGeometry::intersection(QgsGeometry* geometry)
50655077
{
50665078
if (geometry == NULL)
5067-
return NULL;
5079+
{
5080+
return NULL;
5081+
}
50685082
if (mGeos == NULL)
5069-
exportWkbToGeos();
5083+
{
5084+
exportWkbToGeos();
5085+
}
50705086
if (geometry->mGeos == NULL)
5071-
geometry->exportWkbToGeos();
5087+
{
5088+
geometry->exportWkbToGeos();
5089+
}
5090+
if(!mGeos || !geometry->mGeos)
5091+
{
5092+
return 0;
5093+
}
50725094
GEOS_GEOM::Geometry* geos = mGeos->intersection(geometry->mGeos);
50735095
QgsGeometry* g = new QgsGeometry;
50745096
g->setGeos(geos);
@@ -5078,11 +5100,21 @@ QgsGeometry* QgsGeometry::intersection(QgsGeometry* geometry)
50785100
QgsGeometry* QgsGeometry::Union(QgsGeometry* geometry)
50795101
{
50805102
if (geometry == NULL)
5081-
return NULL;
5103+
{
5104+
return NULL;
5105+
}
50825106
if (mGeos == NULL)
5083-
exportWkbToGeos();
5107+
{
5108+
exportWkbToGeos();
5109+
}
50845110
if (geometry->mGeos == NULL)
5085-
geometry->exportWkbToGeos();
5111+
{
5112+
geometry->exportWkbToGeos();
5113+
}
5114+
if(!mGeos || !geometry->mGeos)
5115+
{
5116+
return 0;
5117+
}
50865118
GEOS_GEOM::Geometry* geos = mGeos->Union(geometry->mGeos);
50875119
QgsGeometry* g = new QgsGeometry;
50885120
g->setGeos(geos);
@@ -5092,11 +5124,21 @@ QgsGeometry* QgsGeometry::Union(QgsGeometry* geometry)
50925124
QgsGeometry* QgsGeometry::difference(QgsGeometry* geometry)
50935125
{
50945126
if (geometry == NULL)
5095-
return NULL;
5127+
{
5128+
return NULL;
5129+
}
50965130
if (mGeos == NULL)
5097-
exportWkbToGeos();
5131+
{
5132+
exportWkbToGeos();
5133+
}
50985134
if (geometry->mGeos == NULL)
5099-
geometry->exportWkbToGeos();
5135+
{
5136+
geometry->exportWkbToGeos();
5137+
}
5138+
if(!mGeos || !geometry->mGeos)
5139+
{
5140+
return 0;
5141+
}
51005142
GEOS_GEOM::Geometry* geos = mGeos->difference(geometry->mGeos);
51015143
QgsGeometry* g = new QgsGeometry;
51025144
g->setGeos(geos);
@@ -5106,11 +5148,21 @@ QgsGeometry* QgsGeometry::difference(QgsGeometry* geometry)
51065148
QgsGeometry* QgsGeometry::symDifference(QgsGeometry* geometry)
51075149
{
51085150
if (geometry == NULL)
5109-
return NULL;
5151+
{
5152+
return NULL;
5153+
}
51105154
if (mGeos == NULL)
5111-
exportWkbToGeos();
5155+
{
5156+
exportWkbToGeos();
5157+
}
51125158
if (geometry->mGeos == NULL)
5113-
geometry->exportWkbToGeos();
5159+
{
5160+
geometry->exportWkbToGeos();
5161+
}
5162+
if(!mGeos || !geometry->mGeos)
5163+
{
5164+
return 0;
5165+
}
51145166
GEOS_GEOM::Geometry* geos = mGeos->symDifference(geometry->mGeos);
51155167
QgsGeometry* g = new QgsGeometry;
51165168
g->setGeos(geos);

0 commit comments

Comments
 (0)