private bool ForceLaxSkippedValidation(out string message)
        {
            bool result = true;

            message = null;
            if (RDLValidatingReader.m_processContent == XmlSchemaContentProcessing.Lax && m_reader.NodeType == XmlNodeType.EndElement && m_reader.SchemaInfo != null && m_reader.SchemaInfo.Validity == XmlSchemaValidity.NotKnown && ListUtils.ContainsWithOrdinalComparer(m_reader.NamespaceURI, m_validationNamespaceList))
            {
                result  = false;
                message = RDLValidatingReaderStrings.rdlValidationNoElementDecl(GetExpandedName(m_reader.LocalName, m_reader.NamespaceURI), m_reader.LocalName, m_reader.NamespaceURI, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat));
            }
            return(result);
        }
        private void ReadStructContent(object obj, StructMapping mapping)
        {
            this.m_reader.MoveToContent();
            string name         = this.m_reader.Name;
            string namespaceURI = this.m_reader.NamespaceURI;

            this.ReadStructAttributes(obj, mapping);
            if (this.m_reader.IsEmptyElement)
            {
                this.m_reader.Skip();
            }
            else
            {
                this.m_reader.ReadStartElement();
                this.m_reader.MoveToContent();
                while (this.m_reader.NodeType != XmlNodeType.EndElement && this.m_reader.NodeType != 0)
                {
                    string localName     = this.m_reader.LocalName;
                    string namespaceURI2 = this.m_reader.NamespaceURI;
                    namespaceURI2 = ((namespaceURI == namespaceURI2) ? string.Empty : namespaceURI2);
                    MemberMapping memberMapping = mapping.GetElement(localName, namespaceURI2);
                    Type          type          = null;
                    if (memberMapping != null)
                    {
                        type = memberMapping.Type;
                    }
                    else
                    {
                        List <MemberMapping> typeNameElements = mapping.GetTypeNameElements();
                        if (typeNameElements != null)
                        {
                            bool flag = false;
                            for (int i = 0; i < typeNameElements.Count; i++)
                            {
                                memberMapping = typeNameElements[i];
                                XmlElementAttributes xmlElements = memberMapping.XmlAttributes.XmlElements;
                                if (base.XmlOverrides != null)
                                {
                                    XmlAttributes xmlAttributes = base.XmlOverrides[obj.GetType()];
                                    if (xmlAttributes == null)
                                    {
                                        xmlAttributes = base.XmlOverrides[memberMapping.Type];
                                    }
                                    if (xmlAttributes != null && xmlAttributes.XmlElements != null)
                                    {
                                        xmlElements = xmlAttributes.XmlElements;
                                    }
                                }
                                foreach (XmlElementAttribute item in xmlElements)
                                {
                                    if (item.ElementName == localName && item.Type != null)
                                    {
                                        type = item.Type;
                                        flag = true;
                                        break;
                                    }
                                }
                                if (flag)
                                {
                                    break;
                                }
                            }
                        }
                    }
                    if (type != null)
                    {
                        if (memberMapping.ChildAttributes != null)
                        {
                            foreach (MemberMapping childAttribute in memberMapping.ChildAttributes)
                            {
                                this.ReadChildAttribute(obj, mapping, childAttribute);
                            }
                        }
                        if (memberMapping.IsReadOnly)
                        {
                            if (!TypeMapper.IsPrimitiveType(type))
                            {
                                object value = memberMapping.GetValue(obj);
                                if (value != null)
                                {
                                    this.ReadObjectContent(value, memberMapping, 0);
                                }
                                else
                                {
                                    this.m_reader.Skip();
                                }
                            }
                            else
                            {
                                this.m_reader.Skip();
                            }
                        }
                        else
                        {
                            object obj2 = this.ReadObject(type, memberMapping, 0);
                            if (obj2 != null)
                            {
                                memberMapping.SetValue(obj, obj2);
                            }
                        }
                    }
                    else
                    {
                        if (namespaceURI2 != string.Empty && this.m_validNamespaces.Contains(namespaceURI2))
                        {
                            IXmlLineInfo xmlLineInfo = (IXmlLineInfo)this.m_reader;
                            string       message     = RDLValidatingReaderStrings.rdlValidationInvalidMicroVersionedElement(this.m_reader.Name, name, xmlLineInfo.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), xmlLineInfo.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                            throw new XmlException(message);
                        }
                        this.m_reader.Skip();
                    }
                    this.m_reader.MoveToContent();
                }
                this.m_reader.ReadEndElement();
            }
        }
        private bool RdlAdditionElementLocationValidation(out string message)
        {
            Pair <string, string>?pair = null;
            string text = null;
            bool   flag = false;

            message = null;
            if (ListUtils.ContainsWithOrdinalComparer(NamespaceURI, m_validationNamespaceList))
            {
                switch (NodeType)
                {
                case XmlNodeType.Element:
                {
                    text = GetExpandedName(LocalName, NamespaceURI);
                    bool flag2 = IsPowerViewMicroVersionedNamespace();
                    if ((m_itemType == ItemType.Rdl || m_itemType == ItemType.Rsd) && flag2)
                    {
                        message = RDLValidatingReaderStrings.rdlValidationInvalidNamespaceElement(text, NamespaceURI, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                        return(false);
                    }
                    if (m_rdlElementHierarchy.Count > 0)
                    {
                        pair = m_rdlElementHierarchy.Peek();
                    }
                    if (!pair.HasValue)
                    {
                        Global.Tracer.Assert(LocalName == "Report", "(this.LocalName == Constants.Report)");
                        Global.Tracer.Assert(NamespaceURI == "http://schemas.microsoft.com/sqlserver/reporting/2010/01/reportdefinition" || NamespaceURI == "http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition", "(this.NamespaceURI == Constants.RDL2010NamespaceURI) || (this.NamespaceURI == Constants.RDL2016NamespaceURI)");
                    }
                    if (!IsEmptyElement)
                    {
                        m_rdlElementHierarchy.Push(new Pair <string, string>(text, NamespaceURI));
                    }
                    if (!flag2)
                    {
                        break;
                    }
                    string[] values = m_microversioningValidationStructureElements.GetValues(text);
                    if (values != null)
                    {
                        for (int i = 0; i < values.Length; i++)
                        {
                            if (pair.Value.First.Equals(values[i], StringComparison.Ordinal))
                            {
                                flag = true;
                                break;
                            }
                        }
                        if (!flag)
                        {
                            message = RDLValidatingReaderStrings.rdlValidationInvalidParent(Name, NamespaceURI, pair.Value.First, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                            return(false);
                        }
                    }
                    else if (!pair.Value.Second.Equals(NamespaceURI, StringComparison.Ordinal))
                    {
                        message = RDLValidatingReaderStrings.rdlValidationInvalidMicroVersionedElement(Name, pair.Value.First, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                        return(false);
                    }
                    break;
                }

                case XmlNodeType.EndElement:
                    m_rdlElementHierarchy.Pop();
                    break;
                }
            }
            return(true);
        }
        private bool RdlAdditionAttributeLocationValidation(out string message)
        {
            message = null;
            HashSet <string> hashSet = null;

            if (NodeType == XmlNodeType.Element && HasAttributes)
            {
                string expandedName = GetExpandedName(LocalName, NamespaceURI);
                string namespaceURI = NamespaceURI;
                if (string.CompareOrdinal(expandedName, GetExpandedName("Report", "http://schemas.microsoft.com/sqlserver/reporting/2016/01/reportdefinition")) == 0 && GetAttributeLocalName("MustUnderstand") != null)
                {
                    hashSet = new HashSet <string>(GetAttributeLocalName("MustUnderstand").Split());
                }
                while (MoveToNextAttribute())
                {
                    string text = NamespaceURI;
                    if (string.IsNullOrEmpty(text))
                    {
                        text = namespaceURI;
                    }
                    if (IsMicroVersionedAttributeNamespace(text))
                    {
                        string expandedName2 = GetExpandedName(LocalName, text);
                        if (m_itemType == ItemType.Rdl || m_itemType == ItemType.Rsd)
                        {
                            message = RDLValidatingReaderStrings.rdlValidationInvalidNamespaceAttribute(expandedName2, text, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                        }
                        else
                        {
                            string[] values = m_microversioningValidationStructureAttributes.GetValues(expandedName2);
                            if (values != null)
                            {
                                for (int i = 0; i < values.Length; i++)
                                {
                                    if (values[i].Equals(expandedName, StringComparison.Ordinal))
                                    {
                                        MoveToElement();
                                        return(true);
                                    }
                                }
                            }
                            message = RDLValidatingReaderStrings.rdlValidationInvalidMicroVersionedAttribute(expandedName2, expandedName, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                        }
                    }
                    if (hashSet != null && Prefix == "xmlns" && hashSet.Contains(LocalName))
                    {
                        hashSet.Remove(LocalName);
                        if (!m_serverSupportedSchemas.Contains(Value))
                        {
                            message = RDLValidatingReaderStrings.rdlValidationUnsupportedSchema(Value, LocalName, base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                            m_errorContext.Register(ProcessingErrorCode.rsInvalidMustUnderstandNamespaces, Severity.Error, ObjectType.Report, null, "MustUnderstand", message);
                            throw new ReportProcessingException(m_errorContext.Messages);
                        }
                    }
                }
                if (hashSet != null && hashSet.Count != 0)
                {
                    if (hashSet.Count == 1)
                    {
                        message = RDLValidatingReaderStrings.rdlValidationUndefinedSchemaNamespace(hashSet.First(), "MustUnderstand", base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                        m_errorContext.Register(ProcessingErrorCode.rsInvalidMustUnderstandNamespaces, Severity.Error, ObjectType.Report, null, "MustUnderstand", message);
                        throw new ReportProcessingException(m_errorContext.Messages);
                    }
                    message = RDLValidatingReaderStrings.rdlValidationMultipleUndefinedSchemaNamespaces(string.Join(", ", hashSet.ToArray()), "MustUnderstand", base.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), base.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                    m_errorContext.Register(ProcessingErrorCode.rsInvalidMustUnderstandNamespaces, Severity.Error, ObjectType.Report, null, "MustUnderstand", message);
                    throw new ReportProcessingException(m_errorContext.Messages);
                }
                MoveToElement();
            }
            return(message == null);
        }
Exemple #5
0
        public bool Validate(out string message)
        {
            message = null;
            if (!ListUtils.ContainsWithOrdinalComparer(this.m_reader.NamespaceURI, this.m_validationNamespaceList))
            {
                return(true);
            }
            XmlSchemaComplexType xmlSchemaComplexType = null;
            bool      result    = true;
            ArrayList arrayList = new ArrayList();

            switch (this.m_reader.NodeType)
            {
            case XmlNodeType.Element:
                if (this.m_rdlElementStack == null)
                {
                    this.m_rdlElementStack = new RdlElementStack();
                }
                xmlSchemaComplexType = (this.m_reader.SchemaInfo.SchemaType as XmlSchemaComplexType);
                if (xmlSchemaComplexType != null)
                {
                    RDLValidatingReader.TraverseParticle(xmlSchemaComplexType.ContentTypeParticle, arrayList);
                }
                if (!this.m_reader.IsEmptyElement)
                {
                    if (xmlSchemaComplexType != null && 1 < arrayList.Count && RDLValidatingReader.CompareWithInvariantCulture("ReportItemsType", xmlSchemaComplexType.Name, false) != 0 && RDLValidatingReader.CompareWithInvariantCulture("MapLayersType", xmlSchemaComplexType.Name, false) != 0)
                    {
                        Hashtable hashtable2 = new Hashtable(arrayList.Count);
                        hashtable2.Add("_ParentName", this.m_reader.LocalName);
                        hashtable2.Add("_Type", xmlSchemaComplexType);
                        this.m_rdlElementStack.Add(hashtable2);
                    }
                    else
                    {
                        this.m_rdlElementStack.Add(null);
                    }
                }
                else if (xmlSchemaComplexType != null)
                {
                    for (int j = 0; j < arrayList.Count; j++)
                    {
                        XmlSchemaElement xmlSchemaElement2 = arrayList[j] as XmlSchemaElement;
                        if (xmlSchemaElement2.MinOccurs > 0m)
                        {
                            result  = false;
                            message = RDLValidatingReaderStrings.rdlValidationMissingChildElement(this.m_reader.LocalName, xmlSchemaElement2.Name, this.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), this.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                        }
                    }
                }
                if (0 < this.m_reader.Depth && this.m_rdlElementStack != null)
                {
                    Hashtable hashtable3 = this.m_rdlElementStack[this.m_reader.Depth - 1];
                    if (hashtable3 != null)
                    {
                        string text = (string)hashtable3[this.m_reader.LocalName];
                        if (text == null)
                        {
                            hashtable3.Add(this.m_reader.LocalName, this.m_reader.NamespaceURI);
                        }
                        else if (RDLValidatingReader.CompareWithInvariantCulture(text, this.m_reader.NamespaceURI, false) == 0)
                        {
                            result  = false;
                            message = RDLValidatingReaderStrings.rdlValidationInvalidElement(hashtable3["_ParentName"] as string, this.m_reader.LocalName, this.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), this.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                        }
                        else
                        {
                            string key = this.m_reader.LocalName + "$" + this.m_reader.NamespaceURI;
                            if (hashtable3.ContainsKey(key))
                            {
                                result  = false;
                                message = RDLValidatingReaderStrings.rdlValidationInvalidElement(hashtable3["_ParentName"] as string, this.m_reader.LocalName, this.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), this.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                            }
                            else
                            {
                                hashtable3.Add(key, this.m_reader.LocalName);
                            }
                        }
                    }
                }
                break;

            case XmlNodeType.EndElement:
                if (this.m_rdlElementStack != null)
                {
                    Hashtable hashtable = this.m_rdlElementStack[this.m_rdlElementStack.Count - 1];
                    if (hashtable != null)
                    {
                        xmlSchemaComplexType = (hashtable["_Type"] as XmlSchemaComplexType);
                        RDLValidatingReader.TraverseParticle(xmlSchemaComplexType.ContentTypeParticle, arrayList);
                        for (int i = 0; i < arrayList.Count; i++)
                        {
                            XmlSchemaElement xmlSchemaElement = arrayList[i] as XmlSchemaElement;
                            if (xmlSchemaElement.MinOccurs > 0m && !hashtable.ContainsKey(xmlSchemaElement.Name))
                            {
                                result  = false;
                                message = RDLValidatingReaderStrings.rdlValidationMissingChildElement(this.m_reader.LocalName, xmlSchemaElement.Name, this.LineNumber.ToString(CultureInfo.InvariantCulture.NumberFormat), this.LinePosition.ToString(CultureInfo.InvariantCulture.NumberFormat));
                            }
                        }
                        this.m_rdlElementStack[this.m_rdlElementStack.Count - 1] = null;
                    }
                    this.m_rdlElementStack.RemoveAt(this.m_rdlElementStack.Count - 1);
                }
                break;
            }
            return(result);
        }