https://issues.shibboleth.net/jira/browse/CPPOST-71
authorScott Cantor <cantor.2@osu.edu>
Tue, 22 Nov 2011 19:55:51 +0000 (19:55 +0000)
committerScott Cantor <cantor.2@osu.edu>
Tue, 22 Nov 2011 19:55:51 +0000 (19:55 +0000)
xmltooling/encryption/impl/EncryptionImpl.cpp
xmltooling/signature/impl/KeyInfoImpl.cpp
xmltooling/soap/impl/SOAPImpl.cpp

index 8e006da..5e25d72 100644 (file)
@@ -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<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
-                v.push_back((*i)->clone());
+            for (vector<XMLObject*>::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<xmlsignature::Transform*>::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<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
-                v.push_back((*i)->clone());
+            for (vector<XMLObject*>::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<EncryptionProperty*>::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<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
-                v.push_back((*i)->clone());
+            for (vector<XMLObject*>::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);
index 0613940..ef7283b 100644 (file)
@@ -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<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
                 if (*i) {
                     XPath* x=dynamic_cast<XPath*>(*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<Transform*>::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<SPKISexp*,XMLObject*> > 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<SPKISexp*,XMLObject*> >::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<SPKISexp*,XMLObject*> > 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<XMLObject*>::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<XMLObject*>::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<XMLObject*>::const_iterator i=src.m_children.begin(); i!=src.m_children.end(); i++) {
                 if (*i) {
                     X509Data* xd=dynamic_cast<X509Data*>(*i);
@@ -955,7 +956,9 @@ namespace xmlsignature {
                         continue;
                     }
 
-                    getUnknownXMLObjects().push_back((*i)->clone());
+                    if (*i) {
+                        getUnknownXMLObjects().push_back((*i)->clone());
+                    }
                 }
             }
         }
index b4d619d..866fbb8 100644 (file)
@@ -114,9 +114,11 @@ namespace {
                     AbstractAttributeExtensibleXMLObject(src),
                     AbstractComplexElement(src),
                     AbstractDOMCachingXMLObject(src) {
-            VectorOf(XMLObject) v=getUnknownXMLObjects();
-            for (vector<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
-                v.push_back((*i)->clone());
+            for (vector<XMLObject*>::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<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
-                v.push_back((*i)->clone());
+            for (vector<XMLObject*>::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<XMLObject*>::const_iterator i=src.m_UnknownXMLObjects.begin(); i!=src.m_UnknownXMLObjects.end(); ++i)
-                v.push_back((*i)->clone());
+            for (vector<XMLObject*>::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());