X-Git-Url: http://www.project-moonshot.org/gitweb/?a=blobdiff_plain;f=xmltooling%2Fsecurity%2Fimpl%2FInlineKeyResolver.cpp;h=acc6953c7109a7fd071bc9b902ca663004c90780;hb=283aad6d4e6291bb79567bac2d4e373cece4c6ad;hp=c198b93be8b43177ba372c11068db8b9bcec483d;hpb=4a27857b3f38f55a6e0c3b4bf8bb147097d26c33;p=shibboleth%2Fxmltooling.git diff --git a/xmltooling/security/impl/InlineKeyResolver.cpp b/xmltooling/security/impl/InlineKeyResolver.cpp index c198b93..acc6953 100644 --- a/xmltooling/security/impl/InlineKeyResolver.cpp +++ b/xmltooling/security/impl/InlineKeyResolver.cpp @@ -67,18 +67,30 @@ namespace xmltooling { KeyInfo* getKeyInfo(bool compact=false) const { KeyInfo* ret = m_credctx->getKeyInfo() ? m_credctx->getKeyInfo()->cloneKeyInfo() : NULL; - if (ret && compact) { - ret->getKeyValues().clear(); - ret->getSPKIDatas().clear(); - ret->getPGPDatas().clear(); - ret->getUnknownXMLObjects().clear(); - const vector x509Datas=const_cast(ret)->getX509Datas(); - for (vector::const_iterator x=x509Datas.begin(); x!=x509Datas.end(); ++x) { - (*x)->getX509Certificates().clear(); - (*x)->getX509CRLs().clear(); - (*x)->getUnknownXMLObjects().clear(); + if (ret) { + ret->setId(NULL); + ret->getRetrievalMethods().clear(); + if (compact) { + ret->getKeyValues().clear(); + ret->getSPKIDatas().clear(); + ret->getPGPDatas().clear(); + ret->getUnknownXMLObjects().clear(); + VectorOf(X509Data) x509Datas=ret->getX509Datas(); + for (VectorOf(X509Data)::size_type pos = 0; pos < x509Datas.size();) { + x509Datas[pos]->getX509Certificates().clear(); + x509Datas[pos]->getX509CRLs().clear(); + x509Datas[pos]->getUnknownXMLObjects().clear(); + if (x509Datas[pos]->hasChildren()) + ++pos; + else + x509Datas.erase(x509Datas.begin() + pos); + } } } + if (!ret->hasChildren()) { + delete ret; + ret = NULL; + } return ret; }