diff options
author | Atsushi Eno <atsushieno@gmail.com> | 2008-07-28 20:40:11 +0400 |
---|---|---|
committer | Atsushi Eno <atsushieno@gmail.com> | 2008-07-28 20:40:11 +0400 |
commit | 7889d76d13e66896f7dc30c244844797fb0d8c62 (patch) | |
tree | 32ed57536d3fb38a316cbbea92d123fd2d3d1099 /mcs/class/System.XML | |
parent | 941ac9038430bdede12c43b187d5533ef46086c6 (diff) |
2008-07-28 Atsushi Enomoto <atsushi@ximian.com>
* XmlNamespaceManager.cs : check null arg.
* XmlTextReader.cs : fixed bug #412657; now we populate nametable
and namespace manager in case they are null in parser context, and
use them instead of the members in the parser context.
* XmlTextReaderTests.cs : added test for bug #412657.
svn path=/trunk/mcs/; revision=109049
Diffstat (limited to 'mcs/class/System.XML')
5 files changed, 48 insertions, 16 deletions
diff --git a/mcs/class/System.XML/System.Xml/ChangeLog b/mcs/class/System.XML/System.Xml/ChangeLog index 9815cce9ef5..d39cc0f0dca 100644 --- a/mcs/class/System.XML/System.Xml/ChangeLog +++ b/mcs/class/System.XML/System.Xml/ChangeLog @@ -1,3 +1,10 @@ +2008-07-28 Atsushi Enomoto <atsushi@ximian.com> + + * XmlNamespaceManager.cs : check null arg. + * XmlTextReader.cs : fixed bug #412657; now we populate nametable + and namespace manager in case they are null in parser context, and + use them instead of the members in the parser context. + 2008-06-11 Atsushi Enomoto <atsushi@ximian.com> * XmlConvert.cs : fixed bug #397934. Utc mode accepts more formats. diff --git a/mcs/class/System.XML/System.Xml/XmlNamespaceManager.cs b/mcs/class/System.XML/System.Xml/XmlNamespaceManager.cs index 937fde3376a..24f6878e708 100644 --- a/mcs/class/System.XML/System.Xml/XmlNamespaceManager.cs +++ b/mcs/class/System.XML/System.Xml/XmlNamespaceManager.cs @@ -101,6 +101,8 @@ namespace System.Xml public XmlNamespaceManager (XmlNameTable nameTable) { + if (nameTable == null) + throw new ArgumentNullException ("nameTable"); this.nameTable = nameTable; nameTable.Add (PrefixXmlns); diff --git a/mcs/class/System.XML/System.Xml/XmlTextReader.cs b/mcs/class/System.XML/System.Xml/XmlTextReader.cs index 881038e8504..a9d20a534b4 100644 --- a/mcs/class/System.XML/System.Xml/XmlTextReader.cs +++ b/mcs/class/System.XML/System.Xml/XmlTextReader.cs @@ -323,7 +323,7 @@ namespace System.Xml } public override XmlNameTable NameTable { - get { return parserContext.NameTable; } + get { return nameTable; } } public override XmlNodeType NodeType { @@ -439,7 +439,7 @@ namespace System.Xml #if NET_2_0 public IDictionary<string, string> GetNamespacesInScope (XmlNamespaceScope scope) { - return parserContext.NamespaceManager.GetNamespacesInScope (scope); + return nsmgr.GetNamespacesInScope (scope); } IDictionary<string, string> IXmlNamespaceResolver.GetNamespacesInScope (XmlNamespaceScope scope) @@ -471,7 +471,7 @@ namespace System.Xml private string LookupNamespace (string prefix, bool atomizedNames) { - string s = parserContext.NamespaceManager.LookupNamespace ( + string s = nsmgr.LookupNamespace ( prefix, atomizedNames); return s == String.Empty ? null : s; } @@ -484,7 +484,7 @@ namespace System.Xml public string LookupPrefix (string ns, bool atomizedName) { - return parserContext.NamespaceManager.LookupPrefix (ns, atomizedName); + return nsmgr.LookupPrefix (ns, atomizedName); } #endif @@ -849,9 +849,9 @@ namespace System.Xml internal void FillXmlns () { if (Object.ReferenceEquals (Prefix, XmlNamespaceManager.PrefixXmlns)) - Reader.parserContext.NamespaceManager.AddNamespace (LocalName, Value); + Reader.nsmgr.AddNamespace (LocalName, Value); else if (Object.ReferenceEquals (Name, XmlNamespaceManager.PrefixXmlns)) - Reader.parserContext.NamespaceManager.AddNamespace (String.Empty, Value); + Reader.nsmgr.AddNamespace (String.Empty, Value); } internal void FillNamespace () @@ -877,6 +877,8 @@ namespace System.Xml private int attributeCount; private XmlParserContext parserContext; + private XmlNameTable nameTable; + private XmlNamespaceManager nsmgr; private ReadState readState; private bool disallowReset; @@ -1043,6 +1045,10 @@ namespace System.Xml String.Empty, XmlSpace.None); } + nameTable = parserContext.NameTable; + nameTable = nameTable != null ? nameTable : new NameTable (); + nsmgr = parserContext.NamespaceManager; + nsmgr = nsmgr != null ? nsmgr : new XmlNamespaceManager (nameTable); if (url != null && url.Length > 0) { Uri uri = null; @@ -1262,7 +1268,7 @@ namespace System.Xml private bool ReadContent () { if (popScope) { - parserContext.NamespaceManager.PopScope (); + nsmgr.PopScope (); parserContext.PopScope (); popScope = false; } @@ -1358,7 +1364,7 @@ namespace System.Xml throw NotWFError ("Multiple document element was detected."); currentState = XmlNodeType.Element; - parserContext.NamespaceManager.PushScope (); + nsmgr.PushScope (); currentLinkedNodeLineNumber = line; currentLinkedNodeLinePosition = column; @@ -1423,7 +1429,7 @@ namespace System.Xml if (prefix.Length > 0) currentToken.NamespaceURI = LookupNamespace (prefix, true); else if (namespaces) - currentToken.NamespaceURI = parserContext.NamespaceManager.DefaultNamespace; + currentToken.NamespaceURI = nsmgr.DefaultNamespace; if (namespaces) { if (NamespaceURI == null) @@ -1524,7 +1530,7 @@ namespace System.Xml if (expected.Prefix.Length > 0) currentToken.NamespaceURI = LookupNamespace (expected.Prefix, true); else if (namespaces) - currentToken.NamespaceURI = parserContext.NamespaceManager.DefaultNamespace; + currentToken.NamespaceURI = nsmgr.DefaultNamespace; popScope = true; @@ -2724,13 +2730,13 @@ namespace System.Xml int start = curNodePeekIndex + startOffset; - string name = parserContext.NameTable.Add ( + string name = NameTable.Add ( peekChars, start, length); if (colonAt > 0) { - prefix = parserContext.NameTable.Add ( + prefix = NameTable.Add ( peekChars, start, colonAt); - localName = parserContext.NameTable.Add ( + localName = NameTable.Add ( peekChars, start + colonAt + 1, length - colonAt - 1); } else { prefix = String.Empty; @@ -2775,11 +2781,11 @@ namespace System.Xml } } - string name = parserContext.NameTable.Add (nameBuffer, 0, nameLength); + string name = NameTable.Add (nameBuffer, 0, nameLength); if (colonAt > 0) { - prefix = parserContext.NameTable.Add (nameBuffer, 0, colonAt); - localName = parserContext.NameTable.Add (nameBuffer, colonAt + 1, nameLength - colonAt - 1); + prefix = NameTable.Add (nameBuffer, 0, colonAt); + localName = NameTable.Add (nameBuffer, colonAt + 1, nameLength - colonAt - 1); } else { prefix = String.Empty; localName = name; diff --git a/mcs/class/System.XML/Test/System.Xml/ChangeLog b/mcs/class/System.XML/Test/System.Xml/ChangeLog index 75fb3694e6a..f773f37b695 100644 --- a/mcs/class/System.XML/Test/System.Xml/ChangeLog +++ b/mcs/class/System.XML/Test/System.Xml/ChangeLog @@ -1,3 +1,7 @@ +2008-07-28 Atsushi Enomoto <atsushi@ximian.com> + + * XmlTextReaderTests.cs : added test for bug #412657. + 2008-06-11 Atsushi Enomoto <atsushi@ximian.com> * XmlConvertTests.cs : added test for bug #397934 diff --git a/mcs/class/System.XML/Test/System.Xml/XmlTextReaderTests.cs b/mcs/class/System.XML/Test/System.Xml/XmlTextReaderTests.cs index da8139649b6..32149858398 100644 --- a/mcs/class/System.XML/Test/System.Xml/XmlTextReaderTests.cs +++ b/mcs/class/System.XML/Test/System.Xml/XmlTextReaderTests.cs @@ -1272,5 +1272,18 @@ namespace MonoTests.System.Xml while (!r.EOF) r.Read (); } + + [Test] + public void Bug412657 () + { + string s = "<Verifier id='SimpleIntVerifier'/>"; + MemoryStream stream = new MemoryStream (Encoding.UTF8.GetBytes(s)); + XmlParserContext ctx = new XmlParserContext (null, null, null, XmlSpace.Default); + AssertNull ("#1", ctx.NamespaceManager); + AssertNull ("#2", ctx.NameTable); + XmlReader reader = new XmlTextReader (stream, XmlNodeType.Element, ctx); + AssertNull ("#1", ctx.NamespaceManager); + reader.Read (); // should not raise NRE. + } } } |