]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add overlap checking for stpcpy().
authorJulian Seward <jseward@acm.org>
Mon, 22 Dec 2003 22:31:27 +0000 (22:31 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 22 Dec 2003 22:31:27 +0000 (22:31 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@2145

memcheck/mac_replace_strmem.c

index f37ba234c17621b6c655f7bcc94226cb624e3484..8f7acd7d6902cffc6b51b8dfc3399031080465ac 100644 (file)
@@ -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 ---*/
 /*--------------------------------------------------------------------*/