Commit 0c4a2e9c authored by MySQL Build Team's avatar MySQL Build Team

Backport into build-201002030816-5.0.87sp1

> ------------------------------------------------------------
> revno: 2818.1.6
> revision-id: joro@sun.com-20091021084345-iki6z0uceieoupey
> parent: ramil@mysql.com-20091023112648-gie6o3odj57cxh1e
> committer: Georgi Kodinov <joro@sun.com>
> branch nick: B47780-5.0-bugteam
> timestamp: Wed 2009-10-21 11:43:45 +0300
> message:
>   Bug #47780: crash when comparing GIS items from subquery
>         
>   If the first argument to GeomFromWKB function is a geometry
>   field then the function just returns its value.
>   However in doing so it's not preserving first argument's 
>   null_value flag and this causes unexpected null value to
>   be returned to the calling function.
>         
>   Fixed by updating the null_value of the GeomFromWKB function
>   in such cases (and all other cases that return a NULL e.g.
>   because of not enough memory for the return buffer).
parent a0336e90
...@@ -971,4 +971,16 @@ select min(`col002`) from t1 union select `col002` from t1; ...@@ -971,4 +971,16 @@ select min(`col002`) from t1 union select `col002` from t1;
min(`col002`) min(`col002`)
NULL NULL
drop table t1; drop table t1;
#
# Bug #47780: crash when comparing GIS items from subquery
#
CREATE TABLE t1(a INT, b MULTIPOLYGON);
INSERT INTO t1 VALUES
(0,
GEOMFROMTEXT(
'multipolygon(((1 2,3 4,5 6,7 8,9 8),(7 6,5 4,3 2,1 2,3 4)))'));
# must not crash
SELECT 1 FROM t1 WHERE a <> (SELECT GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
1
DROP TABLE t1;
End of 5.0 tests End of 5.0 tests
...@@ -654,4 +654,20 @@ insert into t1 values (),(),(); ...@@ -654,4 +654,20 @@ insert into t1 values (),(),();
select min(`col002`) from t1 union select `col002` from t1; select min(`col002`) from t1 union select `col002` from t1;
drop table t1; drop table t1;
--echo #
--echo # Bug #47780: crash when comparing GIS items from subquery
--echo #
CREATE TABLE t1(a INT, b MULTIPOLYGON);
INSERT INTO t1 VALUES
(0,
GEOMFROMTEXT(
'multipolygon(((1 2,3 4,5 6,7 8,9 8),(7 6,5 4,3 2,1 2,3 4)))'));
--echo # must not crash
SELECT 1 FROM t1 WHERE a <> (SELECT GEOMETRYCOLLECTIONFROMWKB(b) FROM t1);
DROP TABLE t1;
--echo End of 5.0 tests --echo End of 5.0 tests
...@@ -76,7 +76,9 @@ String *Item_func_geometry_from_wkb::val_str(String *str) ...@@ -76,7 +76,9 @@ String *Item_func_geometry_from_wkb::val_str(String *str)
if (args[0]->field_type() == MYSQL_TYPE_GEOMETRY) if (args[0]->field_type() == MYSQL_TYPE_GEOMETRY)
{ {
return args[0]->val_str(str); String *str_ret= args[0]->val_str(str);
null_value= args[0]->null_value;
return str_ret;
} }
wkb= args[0]->val_str(&arg_val); wkb= args[0]->val_str(&arg_val);
...@@ -86,7 +88,10 @@ String *Item_func_geometry_from_wkb::val_str(String *str) ...@@ -86,7 +88,10 @@ String *Item_func_geometry_from_wkb::val_str(String *str)
str->set_charset(&my_charset_bin); str->set_charset(&my_charset_bin);
if (str->reserve(SRID_SIZE, 512)) if (str->reserve(SRID_SIZE, 512))
return 0; {
null_value= TRUE; /* purecov: inspected */
return 0; /* purecov: inspected */
}
str->length(0); str->length(0);
str->q_append(srid); str->q_append(srid);
if ((null_value= if ((null_value=
......
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