Commit b640b8f0 authored by Georgi Kodinov's avatar Georgi Kodinov

Bug #48866: mysql.test fails under Fedora 12

strmov() is not guaranteed to work correctly on overlapping
source and destination buffers. On some OSes it may work,
but Fedora 12 has a stpcpy() that's not working correctly 
on overlapping buffers.
Fixed to use the overlap-safe version of strmov instead.
Re-vitalized the overlap-safe version of strmov. 
parent 01cfb57f
...@@ -4108,7 +4108,7 @@ char *get_arg(char *line, my_bool get_next_arg) ...@@ -4108,7 +4108,7 @@ char *get_arg(char *line, my_bool get_next_arg)
if (*ptr == '\\' && ptr[1]) // escaped character if (*ptr == '\\' && ptr[1]) // escaped character
{ {
// Remove the backslash // Remove the backslash
strmov(ptr, ptr+1); strmov_overlapp(ptr, ptr+1);
} }
else if ((!quoted && *ptr == ' ') || (quoted && *ptr == qtype)) else if ((!quoted && *ptr == ' ') || (quoted && *ptr == qtype))
{ {
......
...@@ -108,9 +108,7 @@ extern char NEAR _dig_vec_lower[]; ...@@ -108,9 +108,7 @@ extern char NEAR _dig_vec_lower[];
/* Defined in strtod.c */ /* Defined in strtod.c */
extern const double log_10[309]; extern const double log_10[309];
#ifdef BAD_STRING_COMPILER #ifndef strmov
#define strmov(A,B) (memccpy(A,B,0,INT_MAX)-1)
#else
#define strmov_overlapp(A,B) strmov(A,B) #define strmov_overlapp(A,B) strmov(A,B)
#define strmake_overlapp(A,B,C) strmake(A,B,C) #define strmake_overlapp(A,B,C) strmake(A,B,C)
#endif #endif
...@@ -171,12 +169,11 @@ extern uint strinstr(const char *str,const char *search); ...@@ -171,12 +169,11 @@ extern uint strinstr(const char *str,const char *search);
extern uint r_strinstr(reg1 my_string str,int from, reg4 my_string search); extern uint r_strinstr(reg1 my_string str,int from, reg4 my_string search);
extern char *strkey(char *dst,char *head,char *tail,char *flags); extern char *strkey(char *dst,char *head,char *tail,char *flags);
extern char *strmake(char *dst,const char *src,uint length); extern char *strmake(char *dst,const char *src,uint length);
#ifndef strmake_overlapp
extern char *strmake_overlapp(char *dst,const char *src, uint length);
#endif
#ifndef strmov #ifndef strmov
extern char *strmov(char *dst,const char *src); extern char *strmov(char *dst,const char *src);
#else
extern char *strmov_overlapp(char *dst,const char *src);
#endif #endif
extern char *strnmov(char *dst,const char *src,uint n); extern char *strnmov(char *dst,const char *src,uint n);
extern char *strsuff(const char *src,const char *suffix); extern char *strsuff(const char *src,const char *suffix);
......
...@@ -24,13 +24,11 @@ ...@@ -24,13 +24,11 @@
#include <my_global.h> #include <my_global.h>
#include "m_string.h" #include "m_string.h"
#ifdef BAD_STRING_COMPILER #ifdef strmov
#undef strmov #undef strmov
#define strmov strmov_overlapp #define strmov strmov_overlapp
#endif #endif
#ifndef strmov
#if !defined(MC68000) && !defined(DS90) #if !defined(MC68000) && !defined(DS90)
char *strmov(register char *dst, register const char *src) char *strmov(register char *dst, register const char *src)
...@@ -53,5 +51,3 @@ char *strmov(dst, src) ...@@ -53,5 +51,3 @@ char *strmov(dst, src)
} }
#endif #endif
#endif /* strmov */
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