summaryrefslogtreecommitdiffstats
path: root/src/xmlpatterns/schema
diff options
context:
space:
mode:
authorPeter Hartmann <peter.hartmann@nokia.com>2010-03-16 13:01:17 (GMT)
committerPeter Hartmann <peter.hartmann@nokia.com>2010-04-26 17:26:45 (GMT)
commit5b086892cec1cbcd9fe7f0abca5293519ecc4633 (patch)
treee7b395eb4160b0eefd49041a34b1fdd79f83ad4c /src/xmlpatterns/schema
parentc3067851071ae9480688e0d746dd6b03bd113823 (diff)
downloadQt-5b086892cec1cbcd9fe7f0abca5293519ecc4633.zip
Qt-5b086892cec1cbcd9fe7f0abca5293519ecc4633.tar.gz
Qt-5b086892cec1cbcd9fe7f0abca5293519ecc4633.tar.bz2
QXmlSchema internals: fix crash with anonymous types
The crash occurred when an anonymous type was created that was a list type. In that case, we did not set the item type, which is used later at XsdSchemaChecker::checkSimpleDerivationRestrictions(), which would lead to a crash. Additionally, in the xmlpatternsvalidator test, check the exit status of the process after it has finished, to detect crashes. Reviewed-by: Tobias Koenig <tokoe@kde.org> Reviewed-by: Frans Englich Task-number: QTBUG-8920
Diffstat (limited to 'src/xmlpatterns/schema')
-rw-r--r--src/xmlpatterns/schema/qxsdschemaresolver.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/xmlpatterns/schema/qxsdschemaresolver.cpp b/src/xmlpatterns/schema/qxsdschemaresolver.cpp
index 34eb12c..f3d1ed0 100644
--- a/src/xmlpatterns/schema/qxsdschemaresolver.cpp
+++ b/src/xmlpatterns/schema/qxsdschemaresolver.cpp
@@ -632,7 +632,14 @@ void XsdSchemaResolver::resolveSimpleContentComplexTypes(const XsdComplexType::P
} else {
// 1.2
const XsdSimpleType::Ptr anonType(new XsdSimpleType());
- anonType->setCategory(complexBaseType->contentType()->simpleType()->category());
+ XsdSimpleType::TypeCategory baseCategory = complexBaseType->contentType()->simpleType()->category();
+ anonType->setCategory(baseCategory);
+
+ if (baseCategory == XsdSimpleType::SimpleTypeList) {
+ const XsdSimpleType::Ptr baseSimpleType = complexBaseType->contentType()->simpleType();
+ anonType->setItemType(baseSimpleType->itemType());
+ }
+
anonType->setDerivationMethod(XsdSimpleType::DerivationRestriction);
anonType->setWxsSuperType(complexBaseType->contentType()->simpleType());
anonType->setFacets(complexTypeFacets(complexType));