diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-12-31 21:09:46 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-12-31 21:09:46 +0100 |
commit | 6cadd03bbeace1c256ba875c2e6a877f924877cd (patch) | |
tree | 8079ea6f6ccdb1c2cbb2b7813f618837617cb33e /sys/src/cmd/cc/dpchk.c | |
parent | 6d99096136278f06f6333f927da34105a8dfe0bf (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.c | 10 |
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; |