diff --git a/src/DocumentFormat.OpenXml.Framework/MCContext.cs b/src/DocumentFormat.OpenXml.Framework/MCContext.cs index db28a2e1b..e3e91c654 100644 --- a/src/DocumentFormat.OpenXml.Framework/MCContext.cs +++ b/src/DocumentFormat.OpenXml.Framework/MCContext.cs @@ -138,8 +138,8 @@ internal IEnumerable ParseQNameList(string qnameList, OnInvali foreach (var qname in qnames) { - var items = qname.Split(':'); - if (items.Length != 2) + var colonIndex = qname.IndexOf(":", StringComparison.Ordinal); + if (colonIndex <= 0 || colonIndex == qname.Length - 1 || qname.IndexOf(":", colonIndex + 1, StringComparison.Ordinal) >= 0) { if (onInvalidQName(qnameList)) { @@ -151,7 +151,7 @@ internal IEnumerable ParseQNameList(string qnameList, OnInvali } } - var ns = LookupNamespaceDelegate?.Invoke(items[0]); + var ns = LookupNamespaceDelegate?.Invoke(qname.Substring(0, colonIndex)); if (ns.IsNullOrEmpty()) { if (onInvalidQName(qnameList)) @@ -164,7 +164,7 @@ internal IEnumerable ParseQNameList(string qnameList, OnInvali } } - yield return new XmlQualifiedName(items[1], ns); + yield return new XmlQualifiedName(qname.Substring(colonIndex + 1), ns); } } diff --git a/src/DocumentFormat.OpenXml.Framework/Validation/Schema/CompatibilityRuleAttributesValidator.cs b/src/DocumentFormat.OpenXml.Framework/Validation/Schema/CompatibilityRuleAttributesValidator.cs index 745c4f102..2b9288db7 100644 --- a/src/DocumentFormat.OpenXml.Framework/Validation/Schema/CompatibilityRuleAttributesValidator.cs +++ b/src/DocumentFormat.OpenXml.Framework/Validation/Schema/CompatibilityRuleAttributesValidator.cs @@ -1,6 +1,7 @@ // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. +using System; using System.Collections.Generic; namespace DocumentFormat.OpenXml.Validation.Schema @@ -189,14 +190,14 @@ internal static void ValidateMcAttributes(ValidationContext validationContext) } // must be QName - var items = qname.Value.Split(':'); - if (items.Length != 2) + var colonIndex = qname.Value.IndexOf(":", StringComparison.Ordinal); + if (colonIndex <= 0 || colonIndex == qname.Value.Length - 1 || qname.Value.IndexOf(":", colonIndex + 1, StringComparison.Ordinal) >= 0) { return qname; } // Prefix must be already defined. - var attributeNamesapce = element.LookupNamespace(items[0]); + var attributeNamesapce = element.LookupNamespace(qname.Value.Substring(0, colonIndex)); if (attributeNamesapce.IsNullOrEmpty()) { return qname;