Commit ef737284 authored by Alexey Botchkov's avatar Alexey Botchkov

MDEV-4295 Server crashes in get_point on a query with Area, AsBinary, MultiPoint.

        Need to check if the number of points is 0 for the polygon.
parent 15a7335d
...@@ -1108,4 +1108,10 @@ NULL ...@@ -1108,4 +1108,10 @@ NULL
SELECT Centroid( AsBinary( LineString(Point(0,0), Point(0,0), Point(0,0) ))); 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) ))) Centroid( AsBinary( LineString(Point(0,0), Point(0,0), Point(0,0) )))
NULL NULL
#
# MDEV-4295 Server crashes in get_point on a query with Area, AsBinary, MultiPoint
#
SELECT Area(AsBinary(MultiPoint(Point(0,9), Point(0,1), Point(2,2))));
Area(AsBinary(MultiPoint(Point(0,9), Point(0,1), Point(2,2))))
NULL
End of 5.1 tests End of 5.1 tests
...@@ -839,4 +839,9 @@ select geometryn(0x0100000000070000000100000001030000000200000000000000ffffff0f, ...@@ -839,4 +839,9 @@ select geometryn(0x0100000000070000000100000001030000000200000000000000ffffff0f,
--echo # --echo #
SELECT Centroid( AsBinary( LineString(Point(0,0), Point(0,0), Point(0,0) ))); SELECT Centroid( AsBinary( LineString(Point(0,0), Point(0,0), Point(0,0) )));
--echo #
--echo # MDEV-4295 Server crashes in get_point on a query with Area, AsBinary, MultiPoint
--echo #
SELECT Area(AsBinary(MultiPoint(Point(0,9), Point(0,1), Point(2,2))));
--echo End of 5.1 tests --echo End of 5.1 tests
...@@ -868,7 +868,7 @@ int Gis_polygon::area(double *ar, const char **end_of_data) const ...@@ -868,7 +868,7 @@ int Gis_polygon::area(double *ar, const char **end_of_data) const
if (no_data(data, 4)) if (no_data(data, 4))
return 1; return 1;
n_points= uint4korr(data); n_points= uint4korr(data);
if (n_points > max_n_points || if (n_points == 0 || n_points > max_n_points ||
no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points)) no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
return 1; return 1;
get_point(&prev_x, &prev_y, data+4); get_point(&prev_x, &prev_y, data+4);
...@@ -989,7 +989,7 @@ int Gis_polygon::centroid_xy(double *x, double *y) const ...@@ -989,7 +989,7 @@ int Gis_polygon::centroid_xy(double *x, double *y) const
return 1; return 1;
org_n_points= n_points= uint4korr(data); org_n_points= n_points= uint4korr(data);
data+= 4; data+= 4;
if (n_points > max_n_points || if (n_points == 0 || n_points > max_n_points ||
no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points)) no_data(data, (SIZEOF_STORED_DOUBLE*2) * n_points))
return 1; return 1;
get_point(&prev_x, &prev_y, data); get_point(&prev_x, &prev_y, data);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment