Commit 5eb666ad authored by Alexey Botchkov's avatar Alexey Botchkov

MDEV-12705 10.1.18-MariaDB-1~jessie - mysqld got signal 11.

        Space for the next operation wasn't reserved in
        Item_func_spatial_relate::val_str()
parent 01e656a6
...@@ -486,6 +486,25 @@ ST_Touches(ST_PolygonFromText('POLYGON((0 0,0 5,5 5,5 0,0 0))'),ST_PointFromText ...@@ -486,6 +486,25 @@ ST_Touches(ST_PolygonFromText('POLYGON((0 0,0 5,5 5,5 0,0 0))'),ST_PointFromText
select ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)')); select ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'));
ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)')) ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'))
0 0
SELECT ST_RELATE(
ST_DIFFERENCE(
GEOMETRYFROMTEXT('
MULTILINESTRING(
( 12841 36140, 8005 31007, 26555 31075, 52765 41191,
28978 6548, 45720 32057, 53345 3221 ),
( 8304 59107, 25233 31592, 40502 25303, 8205 42940 ),
( 7829 7305, 58841 56759, 64115 8512, 37562 54145, 2210 14701 ),
( 20379 2805, 40807 27770, 28147 14883, 26439 29383, 55663 5086 ),
( 35944 64702, 14433 23728, 49317 26241, 790 16941 )
)
'),
GEOMETRYFROMTEXT('POINT(46061 13545)')
),
GEOMETRYFROMTEXT('POINT(4599 60359)'),
'F*FFFF**F'
) as relate_res;
relate_res
0
DROP TABLE IF EXISTS p1; DROP TABLE IF EXISTS p1;
CREATE PROCEDURE p1(dist DOUBLE, geom TEXT) CREATE PROCEDURE p1(dist DOUBLE, geom TEXT)
BEGIN BEGIN
......
...@@ -362,5 +362,24 @@ select ST_Touches(ST_LineFromText('LINESTRING(0 0,5 5)'),ST_PointFromText('POINT ...@@ -362,5 +362,24 @@ select ST_Touches(ST_LineFromText('LINESTRING(0 0,5 5)'),ST_PointFromText('POINT
select ST_Touches(ST_PolygonFromText('POLYGON((0 0,0 5,5 5,5 0,0 0))'),ST_PointFromText('POINT(0 0)')); select ST_Touches(ST_PolygonFromText('POLYGON((0 0,0 5,5 5,5 0,0 0))'),ST_PointFromText('POINT(0 0)'));
select ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)')); select ST_Touches(ST_PointFromText('POINT(0 0)'),ST_PointFromText('POINT(0 0)'));
# MDEV-12705 10.1.18-MariaDB-1~jessie - mysqld got signal 11.
SELECT ST_RELATE(
ST_DIFFERENCE(
GEOMETRYFROMTEXT('
MULTILINESTRING(
( 12841 36140, 8005 31007, 26555 31075, 52765 41191,
28978 6548, 45720 32057, 53345 3221 ),
( 8304 59107, 25233 31592, 40502 25303, 8205 42940 ),
( 7829 7305, 58841 56759, 64115 8512, 37562 54145, 2210 14701 ),
( 20379 2805, 40807 27770, 28147 14883, 26439 29383, 55663 5086 ),
( 35944 64702, 14433 23728, 49317 26241, 790 16941 )
)
'),
GEOMETRYFROMTEXT('POINT(46061 13545)')
),
GEOMETRYFROMTEXT('POINT(4599 60359)'),
'F*FFFF**F'
) as relate_res;
--source include/gis_debug.inc --source include/gis_debug.inc
...@@ -1194,6 +1194,8 @@ static int setup_relate_func(Geometry *g1, Geometry *g2, ...@@ -1194,6 +1194,8 @@ static int setup_relate_func(Geometry *g1, Geometry *g2,
} }
else else
func->repeat_expression(shape_a); func->repeat_expression(shape_a);
if (func->reserve_op_buffer(1))
return 1;
func->add_operation(op_matrix(nc%3), 1); func->add_operation(op_matrix(nc%3), 1);
if (do_store_shapes) if (do_store_shapes)
{ {
...@@ -1364,11 +1366,13 @@ longlong Item_func_spatial_precise_rel::val_int() ...@@ -1364,11 +1366,13 @@ longlong Item_func_spatial_precise_rel::val_int()
Gcalc_function::op_intersection, 2); Gcalc_function::op_intersection, 2);
func.add_operation(Gcalc_function::op_internals, 1); func.add_operation(Gcalc_function::op_internals, 1);
shape_a= func.get_next_expression_pos(); shape_a= func.get_next_expression_pos();
if ((null_value= g1.store_shapes(&trn))) if ((null_value= g1.store_shapes(&trn)) ||
func.reserve_op_buffer(1))
break; break;
func.add_operation(Gcalc_function::op_internals, 1); func.add_operation(Gcalc_function::op_internals, 1);
shape_b= func.get_next_expression_pos(); shape_b= func.get_next_expression_pos();
if ((null_value= g2.store_shapes(&trn))) if ((null_value= g2.store_shapes(&trn)) ||
func.reserve_op_buffer(1))
break; break;
func.add_operation(Gcalc_function::v_find_t | func.add_operation(Gcalc_function::v_find_t |
Gcalc_function::op_intersection, 2); Gcalc_function::op_intersection, 2);
...@@ -1603,6 +1607,8 @@ int Item_func_buffer::Transporter::single_point(double x, double y) ...@@ -1603,6 +1607,8 @@ int Item_func_buffer::Transporter::single_point(double x, double y)
{ {
if (buffer_op == Gcalc_function::op_difference) if (buffer_op == Gcalc_function::op_difference)
{ {
if (m_fn->reserve_op_buffer(1))
return 1;
m_fn->add_operation(Gcalc_function::op_false, 0); m_fn->add_operation(Gcalc_function::op_false, 0);
return 0; return 0;
} }
......
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