summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorderaadt <>1996-09-25 08:17:31 +0000
committerderaadt <>1996-09-25 08:17:31 +0000
commite1d97f672bb21109e95b3a91fd67865f61ec96ca (patch)
treeceb605cc4fe68d3cc7d91284f9a4342e44615920
parent78ff40b0a2d20864f3aba0938b17ac74741977d8 (diff)
downloadopenbsd-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
-rw-r--r--src/lib/libc/string/__strerror.c13
-rw-r--r--src/lib/libc/string/__strsignal.c12
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)
35static char *rcsid = "$OpenBSD: __strerror.c,v 1.5 1996/09/16 05:43:38 tholo Exp $"; 35static 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)
35static char *rcsid = "$OpenBSD: __strsignal.c,v 1.3 1996/09/16 05:43:39 tholo Exp $"; 35static 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