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.
This commit is contained in:
parent
1f55f5b617
commit
adc17cd41e
@ -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[];
|
|||||||
/* 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);
|
|||||||
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 @@
|
|||||||
#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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* strmov */
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user