summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Botchkov <holyfoot@askmonty.org>2013-03-19 17:16:10 +0400
committerAlexey Botchkov <holyfoot@askmonty.org>2013-03-19 17:16:10 +0400
commit15a7335d77d056e860a9fdc844343c840e310e68 (patch)
tree7d74d47ba9109a7a33d61a7c3a232a97c016252e
parent2cd7cf8fe6fa41fca124c9239468fc22f8df9957 (diff)
downloadmariadb-git-15a7335d77d056e860a9fdc844343c840e310e68.tar.gz
MDEV-4296 Assertion `n_linear_rings > 0' fails in Gis_polygon::centroid_xy.
Forgotten DBUG_ASSERT should be replaced with the 'return error'.
-rw-r--r--mysql-test/r/gis.result6
-rw-r--r--mysql-test/t/gis.test5
-rw-r--r--sql/spatial.cc6
3 files changed, 13 insertions, 4 deletions
diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result
index 7566f0beb8c..6ea977d5bfd 100644
--- a/mysql-test/r/gis.result
+++ b/mysql-test/r/gis.result
@@ -1102,4 +1102,10 @@ NULL
select geometryn(0x0100000000070000000100000001030000000200000000000000ffffff0f, 1);
geometryn(0x0100000000070000000100000001030000000200000000000000ffffff0f, 1)
NULL
+#
+# MDEV-4296 Assertion `n_linear_rings > 0' fails in Gis_polygon::centroid_xy
+#
+SELECT Centroid( AsBinary( LineString(Point(0,0), Point(0,0), Point(0,0) )));
+Centroid( AsBinary( LineString(Point(0,0), Point(0,0), Point(0,0) )))
+NULL
End of 5.1 tests
diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test
index c42541e82b8..b8cce077e3e 100644
--- a/mysql-test/t/gis.test
+++ b/mysql-test/t/gis.test
@@ -834,4 +834,9 @@ select envelope(0x0100000000030000000100000000000010);
select geometryn(0x0100000000070000000100000001030000000200000000000000ffff0000, 1);
select geometryn(0x0100000000070000000100000001030000000200000000000000ffffff0f, 1);
+--echo #
+--echo # MDEV-4296 Assertion `n_linear_rings > 0' fails in Gis_polygon::centroid_xy
+--echo #
+
+SELECT Centroid( AsBinary( LineString(Point(0,0), Point(0,0), Point(0,0) )));
--echo End of 5.1 tests
diff --git a/sql/spatial.cc b/sql/spatial.cc
index 5a4b768140c..afaa67763e8 100644
--- a/sql/spatial.cc
+++ b/sql/spatial.cc
@@ -972,13 +972,11 @@ int Gis_polygon::centroid_xy(double *x, double *y) const
const char *data= m_data;
bool first_loop= 1;
- if (no_data(data, 4))
+ if (no_data(data, 4) ||
+ (n_linear_rings= uint4korr(data)) == 0)
return 1;
- n_linear_rings= uint4korr(data);
data+= 4;
- DBUG_ASSERT(n_linear_rings > 0);
-
while (n_linear_rings--)
{
uint32 n_points, org_n_points;