diff options
author | deraadt <> | 1996-09-25 08:17:31 +0000 |
---|---|---|
committer | deraadt <> | 1996-09-25 08:17:31 +0000 |
commit | e1d97f672bb21109e95b3a91fd67865f61ec96ca (patch) | |
tree | ceb605cc4fe68d3cc7d91284f9a4342e44615920 /src/lib | |
parent | 78ff40b0a2d20864f3aba0938b17ac74741977d8 (diff) | |
download | openbsd-e1d97f672bb21109e95b3a91fd67865f61ec96ca.tar.gz openbsd-e1d97f672bb21109e95b3a91fd67865f61ec96ca.tar.bz2 openbsd-e1d97f672bb21109e95b3a91fd67865f61ec96ca.zip |
nls buffers are NL_TEXTMAX long -- not a security hole; netbsd pr#2780, mike.long@analog.com
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libc/string/__strerror.c | 13 | ||||
-rw-r--r-- | src/lib/libc/string/__strsignal.c | 12 |
2 files changed, 15 insertions, 10 deletions
diff --git a/src/lib/libc/string/__strerror.c b/src/lib/libc/string/__strerror.c index 16d8205868..9c023f8a53 100644 --- a/src/lib/libc/string/__strerror.c +++ b/src/lib/libc/string/__strerror.c | |||
@@ -32,7 +32,7 @@ | |||
32 | */ | 32 | */ |
33 | 33 | ||
34 | #if defined(LIBC_SCCS) && !defined(lint) | 34 | #if defined(LIBC_SCCS) && !defined(lint) |
35 | static char *rcsid = "$OpenBSD: __strerror.c,v 1.5 1996/09/16 05:43:38 tholo Exp $"; | 35 | static char *rcsid = "$OpenBSD: __strerror.c,v 1.6 1996/09/25 08:17:30 deraadt Exp $"; |
36 | #endif /* LIBC_SCCS and not lint */ | 36 | #endif /* LIBC_SCCS and not lint */ |
37 | 37 | ||
38 | #ifdef NLS | 38 | #ifdef NLS |
@@ -46,6 +46,7 @@ static char *rcsid = "$OpenBSD: __strerror.c,v 1.5 1996/09/16 05:43:38 tholo Exp | |||
46 | #define sys_nerr _sys_nerr | 46 | #define sys_nerr _sys_nerr |
47 | 47 | ||
48 | #include <errno.h> | 48 | #include <errno.h> |
49 | #include <limits.h> | ||
49 | #include <stdio.h> | 50 | #include <stdio.h> |
50 | #include <string.h> | 51 | #include <string.h> |
51 | 52 | ||
@@ -86,18 +87,20 @@ __strerror(num, buf) | |||
86 | errnum = num; /* convert to unsigned */ | 87 | errnum = num; /* convert to unsigned */ |
87 | if (errnum < sys_nerr) { | 88 | if (errnum < sys_nerr) { |
88 | #ifdef NLS | 89 | #ifdef NLS |
89 | strcpy(buf, catgets(catd, 1, errnum, | 90 | strncpy(buf, catgets(catd, 1, errnum, |
90 | (char *)sys_errlist[errnum])); | 91 | (char *)sys_errlist[errnum]), NL_TEXTMAX-1); |
92 | buf[NL_TEXTMAX - 1] = '\0'; | ||
91 | #else | 93 | #else |
92 | return(sys_errlist[errnum]); | 94 | return(sys_errlist[errnum]); |
93 | #endif | 95 | #endif |
94 | } else { | 96 | } else { |
95 | #ifdef NLS | 97 | #ifdef NLS |
96 | strcpy(buf, catgets(catd, 1, 0xffff, UPREFIX)); | 98 | strncpy(buf, catgets(catd, 1, 0xffff, UPREFIX), NL_TEXTMAX-1); |
99 | buf[NL_TEXTMAX - 1] = '\0'; | ||
97 | #else | 100 | #else |
98 | strcpy(buf, UPREFIX); | 101 | strcpy(buf, UPREFIX); |
99 | #endif | 102 | #endif |
100 | strcat(buf, itoa(errnum)); | 103 | strncat(buf, itoa(errnum), NL_TEXTMAX-strlen(buf)-1); |
101 | } | 104 | } |
102 | 105 | ||
103 | #ifdef NLS | 106 | #ifdef NLS |
diff --git a/src/lib/libc/string/__strsignal.c b/src/lib/libc/string/__strsignal.c index 5a424bfde2..53c9e59e59 100644 --- a/src/lib/libc/string/__strsignal.c +++ b/src/lib/libc/string/__strsignal.c | |||
@@ -32,7 +32,7 @@ | |||
32 | */ | 32 | */ |
33 | 33 | ||
34 | #if defined(LIBC_SCCS) && !defined(lint) | 34 | #if defined(LIBC_SCCS) && !defined(lint) |
35 | static char *rcsid = "$OpenBSD: __strsignal.c,v 1.3 1996/09/16 05:43:39 tholo Exp $"; | 35 | static char *rcsid = "$OpenBSD: __strsignal.c,v 1.4 1996/09/25 08:17:31 deraadt Exp $"; |
36 | #endif /* LIBC_SCCS and not lint */ | 36 | #endif /* LIBC_SCCS and not lint */ |
37 | 37 | ||
38 | #ifdef NLS | 38 | #ifdef NLS |
@@ -79,18 +79,20 @@ __strsignal(num, buf) | |||
79 | signum = num; /* convert to unsigned */ | 79 | signum = num; /* convert to unsigned */ |
80 | if (signum < NSIG) { | 80 | if (signum < NSIG) { |
81 | #ifdef NLS | 81 | #ifdef NLS |
82 | strcpy(buf, catgets(catd, 2, signum, | 82 | strncpy(buf, catgets(catd, 2, signum, |
83 | (char *)sys_siglist[signum])); | 83 | (char *)sys_siglist[signum]), NL_TEXTMAX-1); |
84 | buf[NL_TEXTMAX-1] = '\0'; | ||
84 | #else | 85 | #else |
85 | return((char *)sys_siglist[signum]); | 86 | return((char *)sys_siglist[signum]); |
86 | #endif | 87 | #endif |
87 | } else { | 88 | } else { |
88 | #ifdef NLS | 89 | #ifdef NLS |
89 | strcpy(buf, catgets(catd, 1, 0xffff, UPREFIX)); | 90 | strncpy(buf, catgets(catd, 1, 0xffff, UPREFIX), NL_TEXTMAX-1); |
91 | buf[NL_TEXTMAX-1] = '\0'; | ||
90 | #else | 92 | #else |
91 | strcpy(buf, UPREFIX); | 93 | strcpy(buf, UPREFIX); |
92 | #endif | 94 | #endif |
93 | strcat(buf, itoa(signum)); | 95 | strncat(buf, itoa(signum), NL_TEXTMAX-strlen(buf)-1); |
94 | } | 96 | } |
95 | 97 | ||
96 | #ifdef NLS | 98 | #ifdef NLS |