From: Scott Cantor Date: Tue, 22 Nov 2011 19:55:51 +0000 (+0000) Subject: https://issues.shibboleth.net/jira/browse/CPPOST-71 X-Git-Tag: 1.5.0~63 X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=commitdiff_plain;h=317f447213370116523cbcfdfafa4b06762d6ed6 https://issues.shibboleth.net/jira/browse/CPPOST-71 --- diff --git a/xmltooling/encryption/impl/EncryptionImpl.cpp b/xmltooling/encryption/impl/EncryptionImpl.cpp index 8e006da..5e25d72 100644 --- a/xmltooling/encryption/impl/EncryptionImpl.cpp +++ b/xmltooling/encryption/impl/EncryptionImpl.cpp @@ -72,6 +72,7 @@ namespace xmlencryption { m_pos_OAEPparams=m_pos_KeySize; ++m_pos_OAEPparams; } + public: virtual ~EncryptionMethodImpl() { XMLString::release(&m_Algorithm); @@ -90,9 +91,11 @@ namespace xmlencryption { setKeySize(src.getKeySize()->cloneKeySize()); if (src.getOAEPparams()) setOAEPparams(src.getOAEPparams()->cloneOAEPparams()); - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) { + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } + } } IMPL_XMLOBJECT_CLONE(EncryptionMethod); @@ -141,10 +144,9 @@ namespace xmlencryption { TransformsImpl(const TransformsImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(xmlsignature::Transform) v=getTransforms(); for (vector::const_iterator i=src.m_Transforms.begin(); i!=src.m_Transforms.end(); i++) { if (*i) { - v.push_back((*i)->cloneTransform()); + getTransforms().push_back((*i)->cloneTransform()); } } } @@ -171,6 +173,7 @@ namespace xmlencryption { m_children.push_back(nullptr); m_pos_Transforms=m_children.begin(); } + public: virtual ~CipherReferenceImpl() { XMLString::release(&m_URI); @@ -224,6 +227,7 @@ namespace xmlencryption { m_pos_CipherReference=m_pos_CipherValue; ++m_pos_CipherReference; } + public: virtual ~CipherDataImpl() {} @@ -263,6 +267,7 @@ namespace xmlencryption { void init() { m_Id=m_Target=nullptr; } + public: virtual ~EncryptionPropertyImpl() { XMLString::release(&m_Id); @@ -282,9 +287,11 @@ namespace xmlencryption { init(); setId(src.getId()); setTarget(src.getTarget()); - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) { + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } + } } IMPL_XMLOBJECT_CLONE(EncryptionProperty); @@ -332,6 +339,7 @@ namespace xmlencryption { void init() { m_Id=nullptr; } + public: virtual ~EncryptionPropertiesImpl() { XMLString::release(&m_Id); @@ -346,10 +354,9 @@ namespace xmlencryption { : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); setId(src.getId()); - VectorOf(EncryptionProperty) v=getEncryptionPropertys(); for (vector::const_iterator i=src.m_EncryptionPropertys.begin(); i!=src.m_EncryptionPropertys.end(); i++) { if (*i) { - v.push_back((*i)->cloneEncryptionProperty()); + getEncryptionPropertys().push_back((*i)->cloneEncryptionProperty()); } } } @@ -391,20 +398,20 @@ namespace xmlencryption { } ReferenceTypeImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { - m_URI=nullptr; + : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_URI(nullptr) { } ReferenceTypeImpl(const ReferenceTypeImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - m_URI=nullptr; + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), m_URI(nullptr) { } void _clone(const ReferenceTypeImpl& src) { setURI(src.getURI()); - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) { + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } + } } IMPL_XMLOBJECT_CLONE_EX(ReferenceType); @@ -520,6 +527,7 @@ namespace xmlencryption { m_pos_EncryptionProperties=m_pos_CipherData; ++m_pos_EncryptionProperties; } + protected: EncryptedTypeImpl() { init(); @@ -644,7 +652,6 @@ namespace xmlencryption { } IMPL_XMLOBJECT_CLONE_EX(EncryptedKey); - IMPL_STRING_ATTRIB(Recipient); IMPL_TYPED_CHILD(ReferenceList); IMPL_TYPED_CHILD(CarriedKeyName); diff --git a/xmltooling/signature/impl/KeyInfoImpl.cpp b/xmltooling/signature/impl/KeyInfoImpl.cpp index 0613940..ef7283b 100644 --- a/xmltooling/signature/impl/KeyInfoImpl.cpp +++ b/xmltooling/signature/impl/KeyInfoImpl.cpp @@ -55,33 +55,6 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { - public: - virtual ~DSAKeyValueImpl() {} - - DSAKeyValueImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { - init(); - } - - DSAKeyValueImpl(const DSAKeyValueImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - init(); - if (src.getP()) - setP(src.getP()->cloneP()); - if (src.getQ()) - setQ(src.getQ()->cloneQ()); - if (src.getG()) - setG(src.getG()->cloneG()); - if (src.getY()) - setY(src.getY()->cloneY()); - if (src.getJ()) - setJ(src.getJ()->cloneJ()); - if (src.getSeed()) - setSeed(src.getSeed()->cloneSeed()); - if (src.getPgenCounter()) - setPgenCounter(src.getPgenCounter()->clonePgenCounter()); - } - void init() { m_P=nullptr; m_Q=nullptr; @@ -111,7 +84,34 @@ namespace xmlsignature { m_pos_PgenCounter=m_pos_Seed; ++m_pos_PgenCounter; } - + + public: + virtual ~DSAKeyValueImpl() {} + + DSAKeyValueImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) + : AbstractXMLObject(nsURI, localName, prefix, schemaType) { + init(); + } + + DSAKeyValueImpl(const DSAKeyValueImpl& src) + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + init(); + if (src.getP()) + setP(src.getP()->cloneP()); + if (src.getQ()) + setQ(src.getQ()->cloneQ()); + if (src.getG()) + setG(src.getG()->cloneG()); + if (src.getY()) + setY(src.getY()->cloneY()); + if (src.getJ()) + setJ(src.getJ()->cloneJ()); + if (src.getSeed()) + setSeed(src.getSeed()->cloneSeed()); + if (src.getPgenCounter()) + setPgenCounter(src.getPgenCounter()->clonePgenCounter()); + } + IMPL_XMLOBJECT_CLONE(DSAKeyValue); IMPL_TYPED_CHILD(P); IMPL_TYPED_CHILD(Q); @@ -140,6 +140,16 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_Modulus=nullptr; + m_Exponent=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_pos_Modulus=m_children.begin(); + m_pos_Exponent=m_pos_Modulus; + ++m_pos_Exponent; + } + public: virtual ~RSAKeyValueImpl() {} @@ -157,16 +167,6 @@ namespace xmlsignature { setExponent(src.getExponent()->cloneExponent()); } - void init() { - m_Modulus=nullptr; - m_Exponent=nullptr; - m_children.push_back(nullptr); - m_children.push_back(nullptr); - m_pos_Modulus=m_children.begin(); - m_pos_Exponent=m_pos_Modulus; - ++m_pos_Exponent; - } - IMPL_XMLOBJECT_CLONE(RSAKeyValue); IMPL_TYPED_CHILD(Modulus); IMPL_TYPED_CHILD(Exponent); @@ -191,14 +191,12 @@ namespace xmlsignature { } NamedCurveImpl(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix, const xmltooling::QName* schemaType) - : AbstractXMLObject(nsURI, localName, prefix, schemaType) { - m_URI=nullptr; + : AbstractXMLObject(nsURI, localName, prefix, schemaType), m_URI(nullptr) { } NamedCurveImpl(const NamedCurveImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - m_URI=nullptr; - setURI(getURI()); + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), m_URI(nullptr) { + setURI(src.getURI()); } IMPL_XMLOBJECT_CLONE(NamedCurve); @@ -221,6 +219,21 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_Id=nullptr; + m_ECParameters=nullptr; + m_NamedCurve=nullptr; + m_PublicKey=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_pos_ECParameters=m_children.begin(); + m_pos_NamedCurve=m_pos_ECParameters; + ++m_pos_NamedCurve; + m_pos_PublicKey=m_pos_NamedCurve; + ++m_pos_PublicKey; + } + public: virtual ~ECKeyValueImpl() { XMLString::release(&m_Id); @@ -234,7 +247,7 @@ namespace xmlsignature { ECKeyValueImpl(const ECKeyValueImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - m_Id=XMLString::replicate(src.m_Id); + setId(src.getId()); if (src.getECParameters()) setECParameters(src.getECParameters()->clone()); if (src.getNamedCurve()) @@ -243,21 +256,6 @@ namespace xmlsignature { setPublicKey(src.getPublicKey()->clonePublicKey()); } - void init() { - m_Id=nullptr; - m_ECParameters=nullptr; - m_NamedCurve=nullptr; - m_PublicKey=nullptr; - m_children.push_back(nullptr); - m_children.push_back(nullptr); - m_children.push_back(nullptr); - m_pos_ECParameters=m_children.begin(); - m_pos_NamedCurve=m_pos_ECParameters; - ++m_pos_NamedCurve; - m_pos_PublicKey=m_pos_NamedCurve; - ++m_pos_PublicKey; - } - IMPL_XMLOBJECT_CLONE(ECKeyValue); IMPL_ID_ATTRIB_EX(Id,ID,nullptr); IMPL_XMLOBJECT_CHILD(ECParameters); @@ -295,6 +293,24 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_DSAKeyValue=nullptr; + m_RSAKeyValue=nullptr; + m_ECKeyValue=nullptr; + m_UnknownXMLObject=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_pos_DSAKeyValue=m_children.begin(); + m_pos_RSAKeyValue=m_pos_DSAKeyValue; + ++m_pos_RSAKeyValue; + m_pos_ECKeyValue=m_pos_RSAKeyValue; + ++m_pos_ECKeyValue; + m_pos_UnknownXMLObject=m_pos_ECKeyValue; + ++m_pos_UnknownXMLObject; + } + public: virtual ~KeyValueImpl() {} @@ -315,25 +331,7 @@ namespace xmlsignature { if (src.getUnknownXMLObject()) setUnknownXMLObject(src.getUnknownXMLObject()->clone()); } - - void init() { - m_DSAKeyValue=nullptr; - m_RSAKeyValue=nullptr; - m_ECKeyValue=nullptr; - m_UnknownXMLObject=nullptr; - m_children.push_back(nullptr); - m_children.push_back(nullptr); - m_children.push_back(nullptr); - m_children.push_back(nullptr); - m_pos_DSAKeyValue=m_children.begin(); - m_pos_RSAKeyValue=m_pos_DSAKeyValue; - ++m_pos_RSAKeyValue; - m_pos_ECKeyValue=m_pos_RSAKeyValue; - ++m_pos_ECKeyValue; - m_pos_UnknownXMLObject=m_pos_ECKeyValue; - ++m_pos_UnknownXMLObject; - } - + IMPL_XMLOBJECT_CLONE(KeyValue); IMPL_TYPED_CHILD(DSAKeyValue); IMPL_TYPED_CHILD(RSAKeyValue); @@ -407,8 +405,8 @@ namespace xmlsignature { } TransformImpl(const TransformImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), - m_Algorithm(XMLString::replicate(src.m_Algorithm)) { + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), m_Algorithm(nullptr) { + setAlgorithm(src.getAlgorithm()); for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { XPath* x=dynamic_cast(*i); @@ -416,7 +414,10 @@ namespace xmlsignature { getXPaths().push_back(x->cloneXPath()); continue; } - getUnknownXMLObjects().push_back((*i)->clone()); + + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } } } } @@ -465,10 +466,9 @@ namespace xmlsignature { TransformsImpl(const TransformsImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(Transform) v=getTransforms(); for (vector::const_iterator i=src.m_Transforms.begin(); i!=src.m_Transforms.end(); i++) { if (*i) { - v.push_back((*i)->cloneTransform()); + getTransforms().push_back((*i)->cloneTransform()); } } } @@ -489,6 +489,13 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_URI=m_Type=nullptr; + m_Transforms=nullptr; + m_children.push_back(nullptr); + m_pos_Transforms=m_children.begin(); + } + public: virtual ~RetrievalMethodImpl() { XMLString::release(&m_URI); @@ -503,19 +510,12 @@ namespace xmlsignature { RetrievalMethodImpl(const RetrievalMethodImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setURI(getURI()); - setType(getType()); + setURI(src.getURI()); + setType(src.getType()); if (src.getTransforms()) setTransforms(src.getTransforms()->cloneTransforms()); } - void init() { - m_URI=m_Type=nullptr; - m_Transforms=nullptr; - m_children.push_back(nullptr); - m_pos_Transforms=m_children.begin(); - } - IMPL_XMLOBJECT_CLONE(RetrievalMethod); IMPL_STRING_ATTRIB(URI); IMPL_STRING_ATTRIB(Type); @@ -545,6 +545,16 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_X509IssuerName=nullptr; + m_X509SerialNumber=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_pos_X509IssuerName=m_children.begin(); + m_pos_X509SerialNumber=m_pos_X509IssuerName; + ++m_pos_X509SerialNumber; + } + public: virtual ~X509IssuerSerialImpl() {} @@ -562,16 +572,6 @@ namespace xmlsignature { setX509SerialNumber(src.getX509SerialNumber()->cloneX509SerialNumber()); } - void init() { - m_X509IssuerName=nullptr; - m_X509SerialNumber=nullptr; - m_children.push_back(nullptr); - m_children.push_back(nullptr); - m_pos_X509IssuerName=m_children.begin(); - m_pos_X509SerialNumber=m_pos_X509IssuerName; - ++m_pos_X509SerialNumber; - } - IMPL_XMLOBJECT_CLONE(X509IssuerSerial); IMPL_TYPED_CHILD(X509IssuerName); IMPL_TYPED_CHILD(X509SerialNumber); @@ -678,7 +678,9 @@ namespace xmlsignature { continue; } - getUnknownXMLObjects().push_back((*i)->clone()); + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } } } } @@ -720,6 +722,8 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + vector< pair > m_SPKISexps; + public: virtual ~SPKIDataImpl() {} @@ -729,19 +733,15 @@ namespace xmlsignature { SPKIDataImpl(const SPKIDataImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOfPairs(SPKISexp,XMLObject) v=getSPKISexps(); for (vector< pair >::const_iterator i=src.m_SPKISexps.begin(); i!=src.m_SPKISexps.end(); i++) { if (i->first) { - v.push_back(make_pair(i->first->cloneSPKISexp(),(i->second ? i->second->clone() : (XMLObject*)nullptr))); + getSPKISexps().push_back(make_pair(i->first->cloneSPKISexp(),(i->second ? i->second->clone() : (XMLObject*)nullptr))); } } } IMPL_XMLOBJECT_CLONE(SPKIData); - private: - vector< pair > m_SPKISexps; - public: VectorOfPairs(SPKISexp,XMLObject) getSPKISexps() { return VectorOfPairs(SPKISexp,XMLObject)(this, m_SPKISexps, &m_children, m_children.end()); @@ -784,6 +784,16 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_PGPKeyID=nullptr; + m_PGPKeyPacket=nullptr; + m_children.push_back(nullptr); + m_children.push_back(nullptr); + m_pos_PGPKeyID=m_children.begin(); + m_pos_PGPKeyPacket=m_pos_PGPKeyID; + ++m_pos_PGPKeyPacket; + } + public: virtual ~PGPDataImpl() {} @@ -799,19 +809,11 @@ namespace xmlsignature { setPGPKeyID(src.getPGPKeyID()->clonePGPKeyID()); if (src.getPGPKeyPacket()) setPGPKeyPacket(src.getPGPKeyPacket()->clonePGPKeyPacket()); - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); - } - - void init() { - m_PGPKeyID=nullptr; - m_PGPKeyPacket=nullptr; - m_children.push_back(nullptr); - m_children.push_back(nullptr); - m_pos_PGPKeyID=m_children.begin(); - m_pos_PGPKeyPacket=m_pos_PGPKeyID; - ++m_pos_PGPKeyPacket; + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) { + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } + } } IMPL_XMLOBJECT_CLONE(PGPData); @@ -841,6 +843,10 @@ namespace xmlsignature { public AbstractXMLObjectMarshaller, public AbstractXMLObjectUnmarshaller { + void init() { + m_Id=m_URI=nullptr; + } + public: virtual ~KeyInfoReferenceImpl() { XMLString::release(&m_Id); @@ -855,12 +861,8 @@ namespace xmlsignature { KeyInfoReferenceImpl(const KeyInfoReferenceImpl& src) : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); - setId(getId()); - setURI(getURI()); - } - - void init() { - m_Id=m_URI=nullptr; + setId(src.getId()); + setURI(src.getURI()); } IMPL_XMLOBJECT_CLONE(KeyInfoReference); @@ -896,9 +898,8 @@ namespace xmlsignature { } KeyInfoImpl(const KeyInfoImpl& src) - : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), - m_Id(XMLString::replicate(src.m_Id)) { - + : AbstractXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src), m_Id(nullptr) { + setId(src.getId()); for (list::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) { if (*i) { X509Data* xd=dynamic_cast(*i); @@ -955,7 +956,9 @@ namespace xmlsignature { continue; } - getUnknownXMLObjects().push_back((*i)->clone()); + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } } } } diff --git a/xmltooling/soap/impl/SOAPImpl.cpp b/xmltooling/soap/impl/SOAPImpl.cpp index b4d619d..866fbb8 100644 --- a/xmltooling/soap/impl/SOAPImpl.cpp +++ b/xmltooling/soap/impl/SOAPImpl.cpp @@ -114,9 +114,11 @@ namespace { AbstractAttributeExtensibleXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) { + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } + } } IMPL_XMLOBJECT_CLONE(Detail); @@ -159,6 +161,7 @@ namespace { m_pos_Detail=m_pos_Faultactor; ++m_pos_Detail; } + protected: FaultImpl() { init(); @@ -221,9 +224,11 @@ namespace { AbstractAttributeExtensibleXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) { + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } + } } IMPL_XMLOBJECT_CLONE(Body); @@ -263,9 +268,11 @@ namespace { AbstractAttributeExtensibleXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { - VectorOf(XMLObject) v=getUnknownXMLObjects(); - for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) - v.push_back((*i)->clone()); + for (vector::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i) { + if (*i) { + getUnknownXMLObjects().push_back((*i)->clone()); + } + } } IMPL_XMLOBJECT_CLONE(Header); @@ -301,6 +308,7 @@ namespace { m_pos_Body=m_pos_Header; ++m_pos_Body; } + public: virtual ~EnvelopeImpl() {} @@ -310,8 +318,7 @@ namespace { } EnvelopeImpl(const EnvelopeImpl& src) - : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), - AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { + : AbstractXMLObject(src), AbstractAttributeExtensibleXMLObject(src), AbstractComplexElement(src), AbstractDOMCachingXMLObject(src) { init(); if (src.getHeader()) setHeader(src.getHeader()->cloneHeader());