Commit 5647e604 authored by Nigel Tao's avatar Nigel Tao

Check gzip strings for NUL elements, since they are NUL-terminated

on the wire.

R=rsc
CC=golang-dev
https://golang.org/cl/194146
parent af7e0f1b
...@@ -104,7 +104,7 @@ func (z *Inflater) readString() (string, os.Error) { ...@@ -104,7 +104,7 @@ func (z *Inflater) readString() (string, os.Error) {
return "", err return "", err
} }
if z.buf[i] == 0 { if z.buf[i] == 0 {
// GZIP (RFC 1952) specifies that strings are null-terminated ISO 8859-1 (Latin-1). // GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1).
// TODO(nigeltao): Convert from ISO 8859-1 (Latin-1) to UTF-8. // TODO(nigeltao): Convert from ISO 8859-1 (Latin-1) to UTF-8.
return string(z.buf[0:i]), nil return string(z.buf[0:i]), nil
} }
......
...@@ -85,11 +85,11 @@ func (z *Deflater) writeBytes(b []byte) os.Error { ...@@ -85,11 +85,11 @@ func (z *Deflater) writeBytes(b []byte) os.Error {
// writeString writes a string (in ISO 8859-1 (Latin-1) format) to z.w. // writeString writes a string (in ISO 8859-1 (Latin-1) format) to z.w.
func (z *Deflater) writeString(s string) os.Error { func (z *Deflater) writeString(s string) os.Error {
// GZIP (RFC 1952) specifies that strings are null-terminated ISO 8859-1 (Latin-1). // GZIP (RFC 1952) specifies that strings are NUL-terminated ISO 8859-1 (Latin-1).
// TODO(nigeltao): Convert from UTF-8 to ISO 8859-1 (Latin-1). // TODO(nigeltao): Convert from UTF-8 to ISO 8859-1 (Latin-1).
for _, v := range s { for _, v := range s {
if v > 0x7f { if v == 0 || v > 0x7f {
return os.NewError("gzip.Write: Comment/Name character code was outside the 0x00-0x7f range") return os.NewError("gzip.Write: non-ASCII header string")
} }
} }
_, err := io.WriteString(z.w, s) _, err := io.WriteString(z.w, s)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment