summaryrefslogtreecommitdiff
path: root/sql/item_geofunc.h
diff options
context:
space:
mode:
authorKristofer Pettersson <kristofer.pettersson@oracle.com>2010-09-07 11:37:46 +0200
committerKristofer Pettersson <kristofer.pettersson@oracle.com>2010-09-07 11:37:46 +0200
commit9a4a7cf184b40b203702043f886f9bd9c26592fd (patch)
tree21bc0951f74623f9452b1ede5596d2abf580f8df /sql/item_geofunc.h
parent0012d0d884b5ab8097d3b2fcda3a58dfe0ba6375 (diff)
downloadmariadb-git-9a4a7cf184b40b203702043f886f9bd9c26592fd.tar.gz
Bug#55531 crash with conversions of geometry types / strings
Convertion from a floating point number to a string caused a crash. During rare circumstances a String object could crash when it was requested to allocate new memory. A crash could occcur in Field_double::val_str() because of a pointer referencing memory inside a String object which was of unknown size. And finally, the geometric collection should not accept arguments which are non geometric. mysql-test/r/gis.result: * Test cases change because we intercept the error behind the previous crashes much earlier. sql/field.cc: * It makes no sense to impose a lower limit on the length and not setting a upper limit will cause crashes later. sql/item_geofunc.h: * Disallow for binding with field- and item types which differ from MYSQL_TYPE_GEOMETRY types.
Diffstat (limited to 'sql/item_geofunc.h')
-rw-r--r--sql/item_geofunc.h13
1 files changed, 13 insertions, 0 deletions
diff --git a/sql/item_geofunc.h b/sql/item_geofunc.h
index edbe104e307..070c2cd26fc 100644
--- a/sql/item_geofunc.h
+++ b/sql/item_geofunc.h
@@ -175,6 +175,19 @@ public:
item_type=it;
}
String *val_str(String *);
+ void fix_length_and_dec()
+ {
+ for( unsigned int i=0; i<arg_count; ++i)
+ {
+ if( args[i]->fixed && args[i]->field_type() != MYSQL_TYPE_GEOMETRY)
+ {
+ String str;
+ args[i]->val_str(&str);
+ my_error(ER_ILLEGAL_VALUE_FOR_TYPE,MYF(0),"non geometric",str.c_ptr());
+ }
+ }
+ }
+
const char *func_name() const { return "multipoint"; }
};