summaryrefslogtreecommitdiff
path: root/src/cmd/gc/subr.c
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-02-16 16:47:39 -0800
committerRuss Cox <rsc@golang.org>2010-02-16 16:47:39 -0800
commite05cd21ca99cb138add583ccf0255ecf6b236ac5 (patch)
tree7d6f4f0c7d6bed346b5198901020a42e200d5775 /src/cmd/gc/subr.c
parent28c4fded36a93426112a611888c6a6d03172775f (diff)
downloadgolang-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.c10
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);