Skip to content

Commit 317e89b

Browse files
author
hf@deer.(none)
committed
Fix for valgrind's warning
1 parent ded8fa5 commit 317e89b

5 files changed

Lines changed: 25 additions & 17 deletions

File tree

sql/gstream.cc

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
enum Gis_read_stream::enum_tok_types Gis_read_stream::get_next_toc_type()
2525
{
2626
skip_space();
27-
if (!*m_cur)
27+
if (m_cur >= m_limit)
2828
return eostream;
2929
if (my_isvar_start(&my_charset_bin, *m_cur))
3030
return word;
@@ -53,7 +53,7 @@ bool Gis_read_stream::get_next_word(LEX_STRING *res)
5353
my_isvar() is a macro that would cause side effects
5454
*/
5555
m_cur++;
56-
while (my_isvar(&my_charset_bin, *m_cur))
56+
while ((m_cur < m_limit) && my_isvar(&my_charset_bin, *m_cur))
5757
m_cur++;
5858

5959
res->length= (uint32) (m_cur - res->str);
@@ -71,16 +71,21 @@ bool Gis_read_stream::get_next_word(LEX_STRING *res)
7171
bool Gis_read_stream::get_next_number(double *d)
7272
{
7373
char *endptr;
74+
int err;
7475

7576
skip_space();
76-
/* The following will also test for end \0 */
77-
if ((*m_cur < '0' || *m_cur > '9') && *m_cur != '-' && *m_cur != '+')
77+
78+
if ((m_cur >= m_limit) ||
79+
(*m_cur < '0' || *m_cur > '9') && *m_cur != '-' && *m_cur != '+')
7880
{
7981
set_error_msg("Numeric constant expected");
8082
return 1;
8183
}
8284

83-
*d = my_strtod(m_cur, &endptr);
85+
*d = my_strntod(m_charset, (char *)m_cur,
86+
m_limit-m_cur, &endptr, &err);
87+
if (err)
88+
return 1;
8489
if (endptr)
8590
m_cur = endptr;
8691
return 0;
@@ -90,7 +95,7 @@ bool Gis_read_stream::get_next_number(double *d)
9095
bool Gis_read_stream::check_next_symbol(char symbol)
9196
{
9297
skip_space();
93-
if (*m_cur != symbol)
98+
if ((m_cur >= m_limit) || (*m_cur != symbol))
9499
{
95100
char buff[32];
96101
strmov(buff, "'?' expected");

sql/gstream.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ class Gis_read_stream
2929
comma
3030
};
3131

32-
Gis_read_stream(const char *buffer, int size)
33-
:m_cur(buffer), m_limit(buffer + size), m_err_msg(NULL)
32+
Gis_read_stream(CHARSET_INFO *charset, const char *buffer, int size)
33+
:m_cur(buffer), m_limit(buffer + size), m_err_msg(NULL), m_charset(charset)
3434
{}
3535
Gis_read_stream(): m_cur(NullS), m_limit(NullS), m_err_msg(NullS)
3636
{}
@@ -46,14 +46,14 @@ class Gis_read_stream
4646

4747
inline void skip_space()
4848
{
49-
while (my_isspace(&my_charset_latin1, *m_cur))
49+
while ((m_cur < m_limit) && my_isspace(&my_charset_latin1, *m_cur))
5050
m_cur++;
5151
}
5252
/* Skip next character, if match. Return 1 if no match */
5353
inline bool skip_char(char skip)
5454
{
5555
skip_space();
56-
if (*m_cur != skip)
56+
if ((m_cur >= m_limit) || *m_cur != skip)
5757
return 1; /* Didn't find char */
5858
m_cur++;
5959
return 0;
@@ -72,4 +72,5 @@ class Gis_read_stream
7272
const char *m_cur;
7373
const char *m_limit;
7474
char *m_err_msg;
75+
CHARSET_INFO *m_charset;
7576
};

sql/item_geofunc.cc

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,13 @@
3131
String *Item_func_geometry_from_text::val_str(String *str)
3232
{
3333
Geometry_buffer buffer;
34-
Geometry *geom;
3534
String arg_val;
3635
String *wkt= args[0]->val_str(&arg_val);
37-
Gis_read_stream trs(wkt->c_ptr(), wkt->length());
36+
37+
if ((null_value= args[0]->null_value))
38+
return 0;
39+
40+
Gis_read_stream trs(wkt->charset(), wkt->ptr(), wkt->length());
3841
uint32 srid= 0;
3942

4043
if ((arg_count == 2) && !args[1]->null_value)
@@ -44,8 +47,7 @@ String *Item_func_geometry_from_text::val_str(String *str)
4447
return 0;
4548
str->length(0);
4649
str->q_append(srid);
47-
if ((null_value=(args[0]->null_value ||
48-
!(geom= Geometry::create_from_wkt(&buffer, &trs, str, 0)))))
50+
if ((null_value= !Geometry::create_from_wkt(&buffer, &trs, str, 0)))
4951
return 0;
5052
return str;
5153
}

sql/item_strfunc.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2241,7 +2241,7 @@ String *Item_func_hex::val_str(String *str)
22412241
return &tmp_value;
22422242
}
22432243

2244-
int inline hexchar_to_int(char c)
2244+
inline int hexchar_to_int(char c)
22452245
{
22462246
if (c <= '9' && c >= '0')
22472247
return c-'0';
@@ -2721,7 +2721,7 @@ String *Item_func_uuid::val_str(String *str)
27212721
{
27222722
ulong tmp=sql_rnd_with_mutex();
27232723
uchar mac[6];
2724-
int i;
2724+
unsigned int i;
27252725
if (my_gethwaddr(mac))
27262726
{
27272727
/*

sql/spatial.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ struct Geometry_buffer;
157157
class Geometry
158158
{
159159
public:
160-
static void *operator new(unsigned size_t, void *buffer)
160+
static void *operator new(size_t size, void *buffer)
161161
{
162162
return buffer;
163163
}

0 commit comments

Comments
 (0)