summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-04-28 19:29:20 -0700
committerRuss Cox <rsc@golang.org>2010-04-28 19:29:20 -0700
commit0674a3a1706c9cbf452ad21045886cb8989437a9 (patch)
treea6a039ecdb5338622f161010006cd5fc464c807a
parent52d4d667d9589e756aa94ed714d471a3152715ea (diff)
downloadgolang-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.go2
-rw-r--r--src/pkg/xml/xml.go10
-rw-r--r--src/pkg/xml/xml_test.go26
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)
+ }
+}