From: Julian Seward Date: Mon, 22 Dec 2003 22:31:27 +0000 (+0000) Subject: Add overlap checking for stpcpy(). X-Git-Tag: svn/VALGRIND_2_1_1~157 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=eb141a093cf46a9d23e5e788d375d4278919571c;p=thirdparty%2Fvalgrind.git Add overlap checking for stpcpy(). git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2145 --- diff --git a/memcheck/mac_replace_strmem.c b/memcheck/mac_replace_strmem.c index f37ba234c1..8f7acd7d69 100644 --- a/memcheck/mac_replace_strmem.c +++ b/memcheck/mac_replace_strmem.c @@ -320,23 +320,30 @@ int memcmp ( const void *s1V, const void *s2V, unsigned int n ) return 0; } -/* glibc-2.3.2/sysdeps/generic/stpcpy.c */ -/* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ -char * -stpcpy (dest, src) - char *dest; - const char *src; + +/* Copy SRC to DEST, returning the address of the terminating '\0' in + DEST. (minor variant of strcpy) */ + +char* stpcpy ( char* dst, const char* src ) { - register char *d = dest; - register const char *s = src; + const Char* src_orig = src; + Char* dst_orig = dst; - do - *d++ = *s; - while (*s++ != '\0'); + while (*src) *dst++ = *src++; + *dst = 0; - return d - 1; + /* This checks for overlap after copying, unavoidable without + pre-counting length... should be ok */ + if (is_overlap(dst_orig, + src_orig, + (Addr)dst-(Addr)dst_orig+1, + (Addr)src-(Addr)src_orig+1)) + complain2("stpcpy", dst_orig, src_orig); + + return dst; } + /*--------------------------------------------------------------------*/ /*--- end mac_replace_strmem.c ---*/ /*--------------------------------------------------------------------*/