diff options
| author | Russ Cox <rsc@golang.org> | 2010-04-28 19:29:20 -0700 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2010-04-28 19:29:20 -0700 |
| commit | 0674a3a1706c9cbf452ad21045886cb8989437a9 (patch) | |
| tree | a6a039ecdb5338622f161010006cd5fc464c807a | |
| parent | 52d4d667d9589e756aa94ed714d471a3152715ea (diff) | |
| download | golang-0674a3a1706c9cbf452ad21045886cb8989437a9.tar.gz | |
xml: allow text segments to end at EOF
Fixes issue 674.
R=adg
CC=golang-dev
http://codereview.appspot.com/1018042
| -rw-r--r-- | src/pkg/xml/read_test.go | 2 | ||||
| -rw-r--r-- | src/pkg/xml/xml.go | 10 | ||||
| -rw-r--r-- | src/pkg/xml/xml_test.go | 26 |
3 files changed, 31 insertions, 7 deletions
diff --git a/src/pkg/xml/read_test.go b/src/pkg/xml/read_test.go index 97fa423d6..a080c016f 100644 --- a/src/pkg/xml/read_test.go +++ b/src/pkg/xml/read_test.go @@ -75,7 +75,7 @@ call sites. I also wanted to verify that ExpandTabs was not being used from outside intra_region_diff.py. -</summary></entry></feed>` +</summary></entry></feed> ` type Feed struct { XMLName Name "http://www.w3.org/2005/Atom feed" diff --git a/src/pkg/xml/xml.go b/src/pkg/xml/xml.go index 1ad1039f6..44c42c035 100644 --- a/src/pkg/xml/xml.go +++ b/src/pkg/xml/xml.go @@ -758,9 +758,15 @@ func (p *Parser) text(quote int, cdata bool) []byte { p.buf.Reset() Input: for { - b, ok := p.mustgetc() + b, ok := p.getc() if !ok { - return nil + if cdata { + if p.err == os.EOF { + p.err = p.syntaxError("unexpected EOF in CDATA section") + } + return nil + } + break Input } // <![CDATA[ section ends with ]]>. diff --git a/src/pkg/xml/xml_test.go b/src/pkg/xml/xml_test.go index dab35df73..148bd2cd0 100644 --- a/src/pkg/xml/xml_test.go +++ b/src/pkg/xml/xml_test.go @@ -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) + } +} |
