]> Cypherpunks repositories - gostls13.git/commitdiff
xml: allow text segments to end at EOF
authorRuss Cox <rsc@golang.org>
Thu, 29 Apr 2010 02:29:20 +0000 (19:29 -0700)
committerRuss Cox <rsc@golang.org>
Thu, 29 Apr 2010 02:29:20 +0000 (19:29 -0700)
Fixes #674.

R=adg
CC=golang-dev
https://golang.org/cl/1018042

src/pkg/xml/read_test.go
src/pkg/xml/xml.go
src/pkg/xml/xml_test.go

index 97fa423d6ac1135a6f7905f58aca7a597db75944..a080c016fba832b5eb21fcfda3df51783eab7df2 100644 (file)
@@ -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"
index 1ad1039f6443af22d9ed5045c3d13d477c30d689..44c42c035959cbe7b528d3544f01bd85b1c8f0b9 100644 (file)
@@ -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 ]]>.
index dab35df7319ab32bb114a68be4201e323586ad5f..148bd2cd0c5657224802ab777d48eab9970e0609 100644 (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)
+       }
+}