Commit 3e18dfb6 authored by Magne Mahre's avatar Magne Mahre

Fix of incorrect casting for large sizes

parent ab061391
...@@ -311,18 +311,17 @@ typedef struct st_mysql_lex_string LEX_STRING; ...@@ -311,18 +311,17 @@ typedef struct st_mysql_lex_string LEX_STRING;
static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len) static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len)
{ {
const uchar *start= ptr;
const uchar *end= ptr + len; const uchar *end= ptr + len;
if (len > 20) if (len > 20)
{ {
const uchar *end_words= (const uchar *) const uchar *end_words= (const uchar *)(intptr)
(((intptr)end) / SIZEOF_INT * SIZEOF_INT); (((ulonglong)(intptr)end) / SIZEOF_INT * SIZEOF_INT);
const uchar *start_words= (const uchar *) const uchar *start_words= (const uchar *)(intptr)
((((intptr)start) + SIZEOF_INT - 1) / SIZEOF_INT * SIZEOF_INT); ((((ulonglong)(intptr)ptr) + SIZEOF_INT - 1) / SIZEOF_INT * SIZEOF_INT);
DBUG_ASSERT(((intptr)start) >= SIZEOF_INT); DBUG_ASSERT(((ulonglong)(intptr)ptr) >= SIZEOF_INT);
if (end_words > start) if (end_words > ptr)
{ {
while (end > end_words && end[-1] == 0x20) while (end > end_words && end[-1] == 0x20)
end--; end--;
...@@ -331,7 +330,7 @@ static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len) ...@@ -331,7 +330,7 @@ static inline const uchar *skip_trailing_space(const uchar *ptr,size_t len)
end -= SIZEOF_INT; end -= SIZEOF_INT;
} }
} }
while (end > start && end[-1] == 0x20) while (end > ptr && end[-1] == 0x20)
end--; end--;
return (end); return (end);
} }
......
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