mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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:
parent
de92199648
commit
0485ba72c3
3 changed files with 31 additions and 7 deletions
|
|
@ -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{
|
||||||
"<t",
|
"<t",
|
||||||
"<t ",
|
"<t ",
|
||||||
"<t/",
|
"<t/",
|
||||||
"<t/>c",
|
|
||||||
"<!",
|
"<!",
|
||||||
"<!-",
|
"<!-",
|
||||||
"<!--",
|
"<!--",
|
||||||
|
|
@ -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{
|
||||||
"<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) {
|
||||||
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue