Commit f5110c0f authored by MySQL Build Team's avatar MySQL Build Team

Backport into build-201002030816-5.0.87sp1

> ------------------------------------------------------------
> revno: 2818.1.29
> revision-id: joro@sun.com-20091118152410-j4tv22vf9xkb6sdz
> parent: kent.boortz@sun.com-20091117164924-rscth12t9a2qog1b
> committer: Georgi Kodinov <joro@sun.com>
> branch nick: test-5.0-bugteam
> timestamp: Wed 2009-11-18 17:24:10 +0200
> message:
>   Bug#48864: MySQL fails to compile on 64 bit Fedora 12
>   
>   Fixed 2 errors in comp_err executable : 
>   1. Wrong (off by 1) length passed to my_checksum()
>   2. strmov() was used on overlapping strings. This is
>    not legal according to the docs in stpcpy(). Used 
>   the overlap safe memmove() instead.
parent a800d18b
...@@ -660,7 +660,7 @@ static ha_checksum checksum_format_specifier(const char* msg) ...@@ -660,7 +660,7 @@ static ha_checksum checksum_format_specifier(const char* msg)
case 'u': case 'u':
case 'x': case 'x':
case 's': case 's':
chksum= my_checksum(chksum, start, (uint) (p - start)); chksum= my_checksum(chksum, start, (uint) (p + 1 - start));
start= 0; /* Not in format specifier anymore */ start= 0; /* Not in format specifier anymore */
break; break;
...@@ -1030,8 +1030,10 @@ static char *parse_text_line(char *pos) ...@@ -1030,8 +1030,10 @@ static char *parse_text_line(char *pos)
{ {
int i, nr; int i, nr;
char *row= pos; char *row= pos;
size_t len;
DBUG_ENTER("parse_text_line"); DBUG_ENTER("parse_text_line");
len= strlen (pos);
while (*pos) while (*pos)
{ {
if (*pos == '\\') if (*pos == '\\')
...@@ -1039,11 +1041,11 @@ static char *parse_text_line(char *pos) ...@@ -1039,11 +1041,11 @@ static char *parse_text_line(char *pos)
switch (*++pos) { switch (*++pos) {
case '\\': case '\\':
case '"': case '"':
VOID(strmov(pos - 1, pos)); VOID(memmove (pos - 1, pos, len - (row - pos)));
break; break;
case 'n': case 'n':
pos[-1]= '\n'; pos[-1]= '\n';
VOID(strmov(pos, pos + 1)); VOID(memmove (pos, pos + 1, len - (row - pos)));
break; break;
default: default:
if (*pos >= '0' && *pos < '8') if (*pos >= '0' && *pos < '8')
...@@ -1053,10 +1055,10 @@ static char *parse_text_line(char *pos) ...@@ -1053,10 +1055,10 @@ static char *parse_text_line(char *pos)
nr= nr * 8 + (*(pos++) - '0'); nr= nr * 8 + (*(pos++) - '0');
pos -= i; pos -= i;
pos[-1]= nr; pos[-1]= nr;
VOID(strmov(pos, pos + i)); VOID(memmove (pos, pos + i, len - (row - pos)));
} }
else if (*pos) else if (*pos)
VOID(strmov(pos - 1, pos)); /* Remove '\' */ VOID(memmove (pos - 1, pos, len - (row - pos))); /* Remove '\' */
} }
} }
else else
......
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