2a2834
Remove overly optimistic definition of strmov() as stpcpy().
2a2834
2a2834
mysql uses this macro with overlapping source and destination strings,
2a2834
which is verboten per spec, and fails on some Red Hat platforms.
2a2834
Deleting the definition is sufficient to make it fall back to a
2a2834
byte-at-a-time copy loop, which should consistently give the
2a2834
expected behavior.
2a2834
2a2834
Note: the particular case that prompted this patch is reported and fixed
2a2834
at http://bugs.mysql.com/bug.php?id=48864.  However, my faith in upstream's
2a2834
ability to detect this type of error is low, and I also see little evidence
2a2834
of any real performance gain from optimizing these calls.  So I'm keeping
2a2834
this patch.
2a2834
2a2834
diff -up mariadb-5.5.28a/include/m_string.h.p2 mariadb-5.5.28a/include/m_string.h
2a2834
--- mariadb-5.5.28a/include/m_string.h.p2	2012-12-17 16:14:19.140536799 +0100
2a2834
+++ mariadb-5.5.28a/include/m_string.h	2012-12-17 16:15:40.036567242 +0100
2a2834
@@ -79,12 +79,6 @@ extern "C" {
2a2834
 extern void *(*my_str_malloc)(size_t);
2a2834
 extern void (*my_str_free)(void *);
2a2834
 
2a2834
-#if defined(HAVE_STPCPY) && MY_GNUC_PREREQ(3, 4) && !defined(__INTEL_COMPILER)
2a2834
-#define strmov(A,B) __builtin_stpcpy((A),(B))
2a2834
-#elif defined(HAVE_STPCPY)
2a2834
-#define strmov(A,B) stpcpy((A),(B))
2a2834
-#endif
2a2834
-
2a2834
 /* Declared in int2str() */
2a2834
 extern const char _dig_vec_upper[];
2a2834
 extern const char _dig_vec_lower[];