summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr.bin/pcc/cc/cpp/cpp.c14
-rw-r--r--usr.bin/pcc/cc/cpp/scanner.l10
2 files changed, 15 insertions, 9 deletions
diff --git a/usr.bin/pcc/cc/cpp/cpp.c b/usr.bin/pcc/cc/cpp/cpp.c
index f4fc03bff5f..bf1c4e9926c 100644
--- a/usr.bin/pcc/cc/cpp/cpp.c
+++ b/usr.bin/pcc/cc/cpp/cpp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cpp.c,v 1.7 2007/09/20 19:34:40 otto Exp $ */
+/* $OpenBSD: cpp.c,v 1.8 2007/09/21 08:15:36 gilles Exp $ */
/*
* Copyright (c) 2004 Anders Magnusson (ragge@ludd.luth.se).
@@ -427,7 +427,9 @@ line()
llen = c;
}
yytext[strlen(yytext)-1] = 0;
- strcpy((char *)lbuf, &yytext[1]);
+ if (strlcpy((char *)lbuf, &yytext[1], SBSIZE) >= SBSIZE)
+ error("line exceeded buffer size");
+
ifiles->fname = lbuf;
if (yylex() != '\n')
goto bad;
@@ -549,6 +551,7 @@ define()
int c, i, redef;
int mkstr = 0, narg = -1;
int ellips = 0;
+ size_t len;
if (flslvl)
return;
@@ -577,8 +580,9 @@ define()
break;
}
if (c == IDENT) {
- args[narg] = alloca(strlen(yytext)+1);
- strcpy((char *)args[narg], yytext);
+ len = strlen(yytext);
+ args[narg] = alloca(len+1);
+ strlcpy((char *)args[narg], yytext, len+1);
narg++;
if ((c = definp()) == ',')
continue;
@@ -947,7 +951,7 @@ expmac(struct recur *rp)
stksv = NULL;
if ((c = yylex()) == WSPACE) {
stksv = alloca(yyleng+1);
- strcpy((char *)stksv, yytext);
+ strlcpy((char *)stksv, yytext, yyleng+1);
c = yylex();
}
/* only valid for expansion if fun macro */
diff --git a/usr.bin/pcc/cc/cpp/scanner.l b/usr.bin/pcc/cc/cpp/scanner.l
index 0183858bdfb..606c0aa037b 100644
--- a/usr.bin/pcc/cc/cpp/scanner.l
+++ b/usr.bin/pcc/cc/cpp/scanner.l
@@ -1,5 +1,5 @@
%{
-/* $OpenBSD: scanner.l,v 1.5 2007/09/20 13:39:39 otto Exp $ */
+/* $OpenBSD: scanner.l,v 1.6 2007/09/21 08:15:36 gilles Exp $ */
/*
* Copyright (c) 2004 Anders Magnusson. All rights reserved.
@@ -380,9 +380,11 @@ prinit(struct initar *it, struct includ *ic)
default:
error("prinit");
}
- strcat((char *)ic->buffer, pre);
- strcat((char *)ic->buffer, it->str);
- strcat((char *)ic->buffer, post);
+ strlcat((char *)ic->buffer, pre, CPPBUF+1);
+ strlcat((char *)ic->buffer, it->str, CPPBUF+1);
+ if (strlcat((char *)ic->buffer, post, CPPBUF+1) >= CPPBUF+1)
+ error("line exceeds buffer size");
+
ic->lineno--;
while (*ic->maxread)
ic->maxread++;