xml: allow text segments to end at EOF

Fixes #674.

R=adg
CC=golang-dev
https://golang.org/cl/1018042
This commit is contained in:
Russ Cox 2010-04-28 19:29:20 -07:00
parent de92199648
commit 0485ba72c3
3 changed files with 31 additions and 7 deletions

View file

@ -758,10 +758,16 @@ func (p *Parser) text(quote int, cdata bool) []byte {
p.buf.Reset()
Input:
for {
b, ok := p.mustgetc()
b, ok := p.getc()
if !ok {
if cdata {
if p.err == os.EOF {
p.err = p.syntaxError("unexpected EOF in CDATA section")
}
return nil
}
break Input
}
// <![CDATA[ section ends with ]]>.
// It is an error for ]]> to appear in ordinary text.

View file

@ -102,7 +102,6 @@ var xmlInput = []string{
"<t",
"<t ",
"<t/",
"<t/>c",
"<!",
"<!-",
"<!--",
@ -124,8 +123,6 @@ var xmlInput = []string{
"<t/><![CDATA[d]]",
// other Syntax errors
" ",
">",
"<>",
"<t/a",
"<0 />",
@ -140,7 +137,6 @@ var xmlInput = []string{
"<t a=>",
"<t a=v>",
// "<![CDATA[d]]>", // let the Token() caller handle
"cdata",
"<t></e>",
"<t></>",
"<t></t!",
@ -369,3 +365,25 @@ func TestSyntaxErrorLineNum(t *testing.T) {
t.Error("SyntaxError didn't have correct line number.")
}
}
func TestTrailingRawToken(t *testing.T) {
input := `<FOO></FOO> `
p := NewParser(StringReader(input))
var err os.Error
for _, err = p.RawToken(); err == nil; _, err = p.RawToken() {
}
if err != os.EOF {
t.Fatalf("p.RawToken() = _, %v, want _, os.EOF", err)
}
}
func TestTrailingToken(t *testing.T) {
input := `<FOO></FOO> `
p := NewParser(StringReader(input))
var err os.Error
for _, err = p.Token(); err == nil; _, err = p.Token() {
}
if err != os.EOF {
t.Fatalf("p.Token() = _, %v, want _, os.EOF", err)
}
}