Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | --- strcpy.3.orig 2010-04-28 23:38:50.000000000 -0700 +++ strcpy.3 2010-04-29 09:37:17.000000000 -0700 @@ -43,13 +43,27 @@ .Sh SYNOPSIS .In string.h .Ft char * -.Fn stpcpy "char * restrict dst" "const char * restrict src" +.Fo stpcpy +.Fa "char *s1" +.Fa "const char *s2" +.Fc .Ft char * -.Fn stpncpy "char * restrict dst" "const char * restrict src" "size_t len" +.Fo stpncpy +.Fa "char *restrict s1" +.Fa "const char *restrict s2" +.Fa "size_t n" +.Fc .Ft char * -.Fn strcpy "char * restrict dst" "const char * restrict src" +.Fo strcpy +.Fa "char *restrict s1" +.Fa "const char *restrict s2" +.Fc .Ft char * -.Fn strncpy "char * restrict dst" "const char * restrict src" "size_t len" +.Fo strncpy +.Fa "char *restrict s1" +.Fa "const char *restrict s2" +.Fa "size_t n" +.Fc .Sh DESCRIPTION The .Fn stpcpy @@ -57,38 +71,41 @@ and .Fn strcpy functions copy the string -.Fa src +.Fa s2 to -.Fa dst +.Fa s1 (including the terminating .Ql \e0 -character.) +character). .Pp The .Fn stpncpy and .Fn strncpy functions copy at most -.Fa len +.Fa n characters from -.Fa src +.Fa s2 into -.Fa dst . +.Fa s1 . If -.Fa src +.Fa s2 is less than -.Fa len +.Fa n characters long, the remainder of -.Fa dst +.Fa s1 is filled with .Ql \e0 characters. Otherwise, -.Fa dst +.Fa s1 is .Em not terminated. +.Pp +The source and destination strings should not overlap, as the +behavior is undefined. .Sh RETURN VALUES The .Fn strcpy @@ -96,7 +113,7 @@ and .Fn strncpy functions return -.Fa dst . +.Fa s1 . The .Fn stpcpy and @@ -104,15 +121,15 @@ and functions return a pointer to the terminating .Ql \e0 character of -.Fa dst . +.Fa s1 . If .Fn stpncpy does not terminate -.Fa dst +.Fa s1 with a .Dv NUL character, it instead returns a pointer to -.Li dst[n] +.Li s1[n] (which does not necessarily refer to a valid memory location.) .Sh EXAMPLES The following sets @@ -139,7 +156,7 @@ Note that it does .Em not .Tn NUL terminate -.Va chararray +.Va chararray , because the length of the source string is greater than or equal to the length argument. .Pp @@ -169,21 +186,26 @@ This could be better achieved using as shown in the following example: .Pp .Dl "(void)strlcpy(buf, input, sizeof(buf));" -.Pp -Note that because -.Xr strlcpy 3 -is not defined in any standards, it should -only be used when portability is not a concern. .Sh SECURITY CONSIDERATIONS The -.Fn strcpy -function is easily misused in a manner which enables malicious users +.Fn strcpy , +.Fn strncpy , +.Fn stpcpy , +and +.Fn stpncpy +functions are easily misused in a manner which enables malicious users to arbitrarily change a running program's functionality through a buffer overflow attack. (See the FSA and .Sx EXAMPLES . ) +.Pp +It is recommended that +.Xr strlcpy 3 +be used instead as a way to avoid such problems. +.Xr strlcpy 3 +is not defined in any standards, but it has been adopted by most major libc implementations. .Sh SEE ALSO .Xr bcopy 3 , .Xr memccpy 3 , |