Commit 56a9b118 authored by bell@sanja.is.com.ua's avatar bell@sanja.is.com.ua

Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1

into sanja.is.com.ua:/home/bell/mysql/bk/work-in-4.1
parents bffd0153 54167da4
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
enum Gis_read_stream::enum_tok_types Gis_read_stream::get_next_toc_type() enum Gis_read_stream::enum_tok_types Gis_read_stream::get_next_toc_type()
{ {
skip_space(); skip_space();
if (!*m_cur) if (m_cur >= m_limit)
return eostream; return eostream;
if (my_isvar_start(&my_charset_bin, *m_cur)) if (my_isvar_start(&my_charset_bin, *m_cur))
return word; return word;
...@@ -53,7 +53,7 @@ bool Gis_read_stream::get_next_word(LEX_STRING *res) ...@@ -53,7 +53,7 @@ bool Gis_read_stream::get_next_word(LEX_STRING *res)
my_isvar() is a macro that would cause side effects my_isvar() is a macro that would cause side effects
*/ */
m_cur++; m_cur++;
while (my_isvar(&my_charset_bin, *m_cur)) while ((m_cur < m_limit) && my_isvar(&my_charset_bin, *m_cur))
m_cur++; m_cur++;
res->length= (uint32) (m_cur - res->str); res->length= (uint32) (m_cur - res->str);
...@@ -71,16 +71,21 @@ bool Gis_read_stream::get_next_word(LEX_STRING *res) ...@@ -71,16 +71,21 @@ bool Gis_read_stream::get_next_word(LEX_STRING *res)
bool Gis_read_stream::get_next_number(double *d) bool Gis_read_stream::get_next_number(double *d)
{ {
char *endptr; char *endptr;
int err;
skip_space(); skip_space();
/* The following will also test for end \0 */
if ((*m_cur < '0' || *m_cur > '9') && *m_cur != '-' && *m_cur != '+') if ((m_cur >= m_limit) ||
(*m_cur < '0' || *m_cur > '9') && *m_cur != '-' && *m_cur != '+')
{ {
set_error_msg("Numeric constant expected"); set_error_msg("Numeric constant expected");
return 1; return 1;
} }
*d = my_strtod(m_cur, &endptr); *d = my_strntod(m_charset, (char *)m_cur,
m_limit-m_cur, &endptr, &err);
if (err)
return 1;
if (endptr) if (endptr)
m_cur = endptr; m_cur = endptr;
return 0; return 0;
...@@ -90,7 +95,7 @@ bool Gis_read_stream::get_next_number(double *d) ...@@ -90,7 +95,7 @@ bool Gis_read_stream::get_next_number(double *d)
bool Gis_read_stream::check_next_symbol(char symbol) bool Gis_read_stream::check_next_symbol(char symbol)
{ {
skip_space(); skip_space();
if (*m_cur != symbol) if ((m_cur >= m_limit) || (*m_cur != symbol))
{ {
char buff[32]; char buff[32];
strmov(buff, "'?' expected"); strmov(buff, "'?' expected");
......
...@@ -29,8 +29,8 @@ class Gis_read_stream ...@@ -29,8 +29,8 @@ class Gis_read_stream
comma comma
}; };
Gis_read_stream(const char *buffer, int size) Gis_read_stream(CHARSET_INFO *charset, const char *buffer, int size)
:m_cur(buffer), m_limit(buffer + size), m_err_msg(NULL) :m_cur(buffer), m_limit(buffer + size), m_err_msg(NULL), m_charset(charset)
{} {}
Gis_read_stream(): m_cur(NullS), m_limit(NullS), m_err_msg(NullS) Gis_read_stream(): m_cur(NullS), m_limit(NullS), m_err_msg(NullS)
{} {}
...@@ -46,14 +46,14 @@ class Gis_read_stream ...@@ -46,14 +46,14 @@ class Gis_read_stream
inline void skip_space() inline void skip_space()
{ {
while (my_isspace(&my_charset_latin1, *m_cur)) while ((m_cur < m_limit) && my_isspace(&my_charset_latin1, *m_cur))
m_cur++; m_cur++;
} }
/* Skip next character, if match. Return 1 if no match */ /* Skip next character, if match. Return 1 if no match */
inline bool skip_char(char skip) inline bool skip_char(char skip)
{ {
skip_space(); skip_space();
if (*m_cur != skip) if ((m_cur >= m_limit) || *m_cur != skip)
return 1; /* Didn't find char */ return 1; /* Didn't find char */
m_cur++; m_cur++;
return 0; return 0;
...@@ -72,4 +72,5 @@ class Gis_read_stream ...@@ -72,4 +72,5 @@ class Gis_read_stream
const char *m_cur; const char *m_cur;
const char *m_limit; const char *m_limit;
char *m_err_msg; char *m_err_msg;
CHARSET_INFO *m_charset;
}; };
...@@ -31,10 +31,13 @@ ...@@ -31,10 +31,13 @@
String *Item_func_geometry_from_text::val_str(String *str) String *Item_func_geometry_from_text::val_str(String *str)
{ {
Geometry_buffer buffer; Geometry_buffer buffer;
Geometry *geom;
String arg_val; String arg_val;
String *wkt= args[0]->val_str(&arg_val); String *wkt= args[0]->val_str(&arg_val);
Gis_read_stream trs(wkt->c_ptr(), wkt->length());
if ((null_value= args[0]->null_value))
return 0;
Gis_read_stream trs(wkt->charset(), wkt->ptr(), wkt->length());
uint32 srid= 0; uint32 srid= 0;
if ((arg_count == 2) && !args[1]->null_value) if ((arg_count == 2) && !args[1]->null_value)
...@@ -44,8 +47,7 @@ String *Item_func_geometry_from_text::val_str(String *str) ...@@ -44,8 +47,7 @@ String *Item_func_geometry_from_text::val_str(String *str)
return 0; return 0;
str->length(0); str->length(0);
str->q_append(srid); str->q_append(srid);
if ((null_value=(args[0]->null_value || if ((null_value= !Geometry::create_from_wkt(&buffer, &trs, str, 0)))
!(geom= Geometry::create_from_wkt(&buffer, &trs, str, 0)))))
return 0; return 0;
return str; return str;
} }
......
...@@ -2241,7 +2241,7 @@ String *Item_func_hex::val_str(String *str) ...@@ -2241,7 +2241,7 @@ String *Item_func_hex::val_str(String *str)
return &tmp_value; return &tmp_value;
} }
int inline hexchar_to_int(char c) inline int hexchar_to_int(char c)
{ {
if (c <= '9' && c >= '0') if (c <= '9' && c >= '0')
return c-'0'; return c-'0';
...@@ -2721,7 +2721,7 @@ String *Item_func_uuid::val_str(String *str) ...@@ -2721,7 +2721,7 @@ String *Item_func_uuid::val_str(String *str)
{ {
ulong tmp=sql_rnd_with_mutex(); ulong tmp=sql_rnd_with_mutex();
uchar mac[6]; uchar mac[6];
int i; unsigned int i;
if (my_gethwaddr(mac)) if (my_gethwaddr(mac))
{ {
/* /*
......
...@@ -157,7 +157,7 @@ struct Geometry_buffer; ...@@ -157,7 +157,7 @@ struct Geometry_buffer;
class Geometry class Geometry
{ {
public: public:
static void *operator new(unsigned size_t, void *buffer) static void *operator new(size_t size, void *buffer)
{ {
return buffer; return buffer;
} }
......
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