summaryrefslogtreecommitdiff
path: root/sys/src/cmd/cc/dpchk.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-12-31 21:09:46 +0100
committercinap_lenrek <cinap_lenrek@gmx.de>2012-12-31 21:09:46 +0100
commit6cadd03bbeace1c256ba875c2e6a877f924877cd (patch)
tree8079ea6f6ccdb1c2cbb2b7813f618837617cb33e /sys/src/cmd/cc/dpchk.c
parent6d99096136278f06f6333f927da34105a8dfe0bf (diff)
fix utf and rune handling in preparation for 32bit runes
Diffstat (limited to 'sys/src/cmd/cc/dpchk.c')
-rw-r--r--sys/src/cmd/cc/dpchk.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/src/cmd/cc/dpchk.c b/sys/src/cmd/cc/dpchk.c
index 99a49ee5a..aa7d468b8 100644
--- a/sys/src/cmd/cc/dpchk.c
+++ b/sys/src/cmd/cc/dpchk.c
@@ -67,13 +67,14 @@ getflag(char *s)
{
Bits flag;
int f;
- char *fmt;
+ char *fmt, *e;
Rune c;
fmt = fmtbuf;
+ e = fmtbuf + sizeof(fmtbuf)-1;
flag = zbits;
nstar = 0;
- for(;;) {
+ while(fmt < e){
s += chartorune(&c, s);
fmt += runetochar(fmt, &c);
if(c == 0 || c >= nelem(flagbits))
@@ -175,7 +176,7 @@ pragvararg(void)
{
Sym *s;
int n, c;
- char *t;
+ char *t, *e;
Rune r;
Type *ty;
@@ -225,12 +226,15 @@ cktype:
if(c != '"')
goto bad;
t = fmtbuf;
+ e = t + sizeof(fmtbuf)-1;
for(;;) {
r = getr();
if(r == ' ' || r == '\n')
goto bad;
if(r == '"')
break;
+ if(t >= e)
+ goto bad;
t += runetochar(t, &r);
}
*t = 0;