Commit 0485ba72 authored by Russ Cox's avatar Russ Cox

xml: allow text segments to end at EOF

Fixes #674.

R=adg
CC=golang-dev
https://golang.org/cl/1018042
parent de921996
...@@ -75,7 +75,7 @@ call sites. I also wanted to verify that ExpandTabs was ...@@ -75,7 +75,7 @@ call sites. I also wanted to verify that ExpandTabs was
not being used from outside intra_region_diff.py. not being used from outside intra_region_diff.py.
</summary></entry></feed>` </summary></entry></feed> `
type Feed struct { type Feed struct {
XMLName Name "http://www.w3.org/2005/Atom feed" XMLName Name "http://www.w3.org/2005/Atom feed"
......
...@@ -758,10 +758,16 @@ func (p *Parser) text(quote int, cdata bool) []byte { ...@@ -758,10 +758,16 @@ func (p *Parser) text(quote int, cdata bool) []byte {
p.buf.Reset() p.buf.Reset()
Input: Input:
for { for {
b, ok := p.mustgetc() b, ok := p.getc()
if !ok { if !ok {
if cdata {
if p.err == os.EOF {
p.err = p.syntaxError("unexpected EOF in CDATA section")
}
return nil return nil
} }
break Input
}
// <![CDATA[ section ends with ]]>. // <![CDATA[ section ends with ]]>.
// It is an error for ]]> to appear in ordinary text. // It is an error for ]]> to appear in ordinary text.
......
...@@ -102,7 +102,6 @@ var xmlInput = []string{ ...@@ -102,7 +102,6 @@ var xmlInput = []string{
"<t", "<t",
"<t ", "<t ",
"<t/", "<t/",
"<t/>c",
"<!", "<!",
"<!-", "<!-",
"<!--", "<!--",
...@@ -124,8 +123,6 @@ var xmlInput = []string{ ...@@ -124,8 +123,6 @@ var xmlInput = []string{
"<t/><![CDATA[d]]", "<t/><![CDATA[d]]",
// other Syntax errors // other Syntax errors
" ",
">",
"<>", "<>",
"<t/a", "<t/a",
"<0 />", "<0 />",
...@@ -140,7 +137,6 @@ var xmlInput = []string{ ...@@ -140,7 +137,6 @@ var xmlInput = []string{
"<t a=>", "<t a=>",
"<t a=v>", "<t a=v>",
// "<![CDATA[d]]>", // let the Token() caller handle // "<![CDATA[d]]>", // let the Token() caller handle
"cdata",
"<t></e>", "<t></e>",
"<t></>", "<t></>",
"<t></t!", "<t></t!",
...@@ -369,3 +365,25 @@ func TestSyntaxErrorLineNum(t *testing.T) { ...@@ -369,3 +365,25 @@ func TestSyntaxErrorLineNum(t *testing.T) {
t.Error("SyntaxError didn't have correct line number.") 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)
}
}
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