From 9152f6326e65cea910c095ebdfd34fc4e19f77c4 Mon Sep 17 00:00:00 2001 From: David Abram Cargill <cargilld@apache.org> Date: Thu, 5 Feb 2004 18:09:53 +0000 Subject: [PATCH] Fix a seg fault with PSVI and set basetype of anysimpletype to be anytype. git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@175721 13f79535-47bb-0310-9956-ffa450edef68 --- src/xercesc/framework/psvi/XSModel.cpp | 11 +++++++---- src/xercesc/internal/XSObjectFactory.cpp | 16 ++++++++++++---- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/xercesc/framework/psvi/XSModel.cpp b/src/xercesc/framework/psvi/XSModel.cpp index 3c20ace84..23f32e28d 100644 --- a/src/xercesc/framework/psvi/XSModel.cpp +++ b/src/xercesc/framework/psvi/XSModel.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.20 2004/02/05 18:09:53 cargilld + * Fix a seg fault with PSVI and set basetype of anysimpletype to be anytype. + * * Revision 1.19 2004/01/29 11:46:30 cargilld * Code cleanup changes to get rid of various compiler diagnostic messages. * @@ -244,11 +247,11 @@ XSModel::XSModel( XMLGrammarPool *grammarPool dvFactory.expandRegistryToFullSchemaSet(); addS4SToXSModel ( - getNamespaceItem(SchemaSymbols::fgURI_SCHEMAFORSCHEMA) + namespaceItem , dvFactory.getBuiltInRegistry() ); - - unsigned int numberOfNamespaces = fXSNamespaceItemList->size(); + // don't include S4S (thus the -1) + unsigned int numberOfNamespaces = fXSNamespaceItemList->size() -1; for (unsigned int j = 0; j < numberOfNamespaces; j++) addGrammarToXSModel(fXSNamespaceItemList->elementAt(j)); } @@ -416,7 +419,7 @@ XSModel::XSModel( XSModel *baseModel fDeleteNamespace->addElement(namespaceItem); addS4SToXSModel ( - getNamespaceItem(SchemaSymbols::fgURI_SCHEMAFORSCHEMA) + namespaceItem , dvFactory.getBuiltInRegistry() ); } diff --git a/src/xercesc/internal/XSObjectFactory.cpp b/src/xercesc/internal/XSObjectFactory.cpp index 0151e9ea6..5a10f2e85 100644 --- a/src/xercesc/internal/XSObjectFactory.cpp +++ b/src/xercesc/internal/XSObjectFactory.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.20 2004/02/05 18:09:53 cargilld + * Fix a seg fault with PSVI and set basetype of anysimpletype to be anytype. + * * Revision 1.19 2004/01/07 02:33:56 knoaman * PSVI: inherit facets from base type * @@ -396,7 +399,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, XSSimpleTypeDefinition* xsObj = (XSSimpleTypeDefinition*) xsModel->getXSObject(validator); if (!xsObj) { - XSSimpleTypeDefinition* baseType = 0; + XSTypeDefinition* baseType = 0; XSSimpleTypeDefinitionList* memberTypes = 0; XSSimpleTypeDefinition* primitiveOrItemType = 0; XSSimpleTypeDefinition::VARIETY typeVariety = XSSimpleTypeDefinition::VARIETY_ATOMIC; @@ -438,7 +441,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, if (baseDV->getType() == DatatypeValidator::List) { baseType = addOrFind(baseDV, xsModel); - primitiveOrItemType = baseType->getItemType(); + primitiveOrItemType = ((XSSimpleTypeDefinition*) baseType)->getItemType(); } else { @@ -455,7 +458,7 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, if (baseDV) { baseType = addOrFind(baseDV, xsModel); - primitiveOrItemType = baseType->getPrimitiveType(); + primitiveOrItemType = ((XSSimpleTypeDefinition*) baseType)->getPrimitiveType(); } else // built-in { @@ -467,6 +470,10 @@ XSObjectFactory::addOrFind(DatatypeValidator* const validator, primitiveTypeSelf = true; } } + else + { + baseType = xsModel->getTypeDefinition(SchemaSymbols::fgATTVAL_ANYTYPE, SchemaSymbols::fgURI_SCHEMAFORSCHEMA); + } xsObj = new (fMemoryManager) XSSimpleTypeDefinition ( @@ -1061,7 +1068,8 @@ void XSObjectFactory::processFacets(DatatypeValidator* const dv, } // inherit facets from base - if (xsST->getBaseType()) + + if (xsST->getBaseType() && xsST->getBaseType()->getTypeCategory() == XSTypeDefinition::SIMPLE_TYPE) { XSSimpleTypeDefinition* baseST = (XSSimpleTypeDefinition*) xsST->getBaseType(); XSFacetList* baseFacets = baseST->getFacets(); -- GitLab