diff options
| author | Russ Cox <rsc@golang.org> | 2010-02-16 16:47:39 -0800 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2010-02-16 16:47:39 -0800 |
| commit | e05cd21ca99cb138add583ccf0255ecf6b236ac5 (patch) | |
| tree | 7d6f4f0c7d6bed346b5198901020a42e200d5775 /src/cmd/gc/subr.c | |
| parent | 28c4fded36a93426112a611888c6a6d03172775f (diff) | |
| download | golang-e05cd21ca99cb138add583ccf0255ecf6b236ac5.tar.gz | |
gc: disallow NUL byte, catch more invalid UTF-8, test
R=ken2, ken3
CC=golang-dev
http://codereview.appspot.com/209041
Diffstat (limited to 'src/cmd/gc/subr.c')
| -rw-r--r-- | src/cmd/gc/subr.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c index ee47cc8e1..7072d95e4 100644 --- a/src/cmd/gc/subr.c +++ b/src/cmd/gc/subr.c @@ -1525,6 +1525,7 @@ Zconv(Fmt *fp) Rune r; Strlit *sp; char *s, *se; + int n; sp = va_arg(fp->args, Strlit*); if(sp == nil) @@ -1533,8 +1534,15 @@ Zconv(Fmt *fp) s = sp->s; se = s + sp->len; while(s < se) { - s += chartorune(&r, s); + n = chartorune(&r, s); + s += n; switch(r) { + case Runeerror: + if(n == 1) { + fmtprint(fp, "\\x%02x", *(s-1)); + break; + } + // fall through default: if(r < ' ') { fmtprint(fp, "\\x%02x", r); |
