Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtsushi Eno <atsushieno@gmail.com>2008-07-28 20:40:11 +0400
committerAtsushi Eno <atsushieno@gmail.com>2008-07-28 20:40:11 +0400
commit7889d76d13e66896f7dc30c244844797fb0d8c62 (patch)
tree32ed57536d3fb38a316cbbea92d123fd2d3d1099 /mcs/class/System.XML
parent941ac9038430bdede12c43b187d5533ef46086c6 (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')
-rw-r--r--mcs/class/System.XML/System.Xml/ChangeLog7
-rw-r--r--mcs/class/System.XML/System.Xml/XmlNamespaceManager.cs2
-rw-r--r--mcs/class/System.XML/System.Xml/XmlTextReader.cs38
-rw-r--r--mcs/class/System.XML/Test/System.Xml/ChangeLog4
-rw-r--r--mcs/class/System.XML/Test/System.Xml/XmlTextReaderTests.cs13
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.
+ }
}
}