From 50a717a67bc36ba6fb26b70476918f46b8ddf293 Mon Sep 17 00:00:00 2001 From: Warner Losh Date: Mon, 13 Nov 2017 17:04:44 +0000 Subject: [PATCH] Add notes about overlapping copies. Add notes to each of these that specifically state that results are undefined if the strings overlap. In the case of memcpy, we document the overlapping behavior on FreeBSD (pre-existing). For str*, it is left unspecified, however, since the default (and x86) implementations do not handle overlapping strings properly. PR: 223653 Sponsored by: Netflix --- lib/libc/string/memcpy.3 | 5 +++++ lib/libc/string/strcat.3 | 10 ++++++++++ lib/libc/string/strcpy.3 | 10 ++++++++++ 3 files changed, 25 insertions(+) diff --git a/lib/libc/string/memcpy.3 b/lib/libc/string/memcpy.3 index 25a6c359f1da..febc0fa34dd9 100644 --- a/lib/libc/string/memcpy.3 +++ b/lib/libc/string/memcpy.3 @@ -54,6 +54,11 @@ bytes from string .Fa src to string .Fa dst . +If +.Fa src +and +.Fa dst +overlap, the results are not defined. .Sh RETURN VALUES The .Fn memcpy diff --git a/lib/libc/string/strcat.3 b/lib/libc/string/strcat.3 index 802226980d27..a6d0fcef61f0 100644 --- a/lib/libc/string/strcat.3 +++ b/lib/libc/string/strcat.3 @@ -62,6 +62,11 @@ then add a terminating The string .Fa s must have sufficient space to hold the result. +If +.Fa s +and +.Fa append +overlap, the results are undefined. .Pp The .Fn strncat @@ -72,6 +77,11 @@ characters from .Fa append , and then adds a terminating .Ql \e0 . +If +.Fa s +and +.Fa append +overlap, the results are undefined. .Sh RETURN VALUES The .Fn strcat diff --git a/lib/libc/string/strcpy.3 b/lib/libc/string/strcpy.3 index 4d4a1ee7b3ce..bc555411dde1 100644 --- a/lib/libc/string/strcpy.3 +++ b/lib/libc/string/strcpy.3 @@ -63,6 +63,11 @@ to (including the terminating .Ql \e0 character.) +If +.Fa src +and +.Fa dst +overlap, the results are undefined. .Pp The .Fn stpncpy @@ -89,6 +94,11 @@ Otherwise, is .Em not terminated. +If +.Fa src +and +.Fa dst +overlap, the results are undefined. .Sh RETURN VALUES The .Fn strcpy