xmlsecurity/source/gpg/SecurityEnvironment.cxx |   13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

New commits:
commit 40c2e584df0cbef84d21c03ca889078a3b093a0f
Author: Samuel Mehrbrodt <samuel.mehrbr...@cib.de>
Date:   Fri Jun 23 10:18:01 2017 +0200

    tdf#108692 gpg4libre: List all gpg keys
    
    Change-Id: I7300da36215233fa91b7a04a42b1c9bf907ad78b
    (cherry picked from commit 91ffe409e35479d024f629fe1b5ce474993a0f54)
    Reviewed-on: https://gerrit.libreoffice.org/39163
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de>

diff --git a/xmlsecurity/source/gpg/SecurityEnvironment.cxx 
b/xmlsecurity/source/gpg/SecurityEnvironment.cxx
index 9892ec6ac5c8..bc7611fa7968 100644
--- a/xmlsecurity/source/gpg/SecurityEnvironment.cxx
+++ b/xmlsecurity/source/gpg/SecurityEnvironment.cxx
@@ -65,6 +65,7 @@ OUString 
SecurityEnvironmentGpg::getSecurityEnvironmentInformation()
 Sequence< Reference < XCertificate > > 
SecurityEnvironmentGpg::getPersonalCertificates()
 {
     CertificateImpl* xCert;
+    std::list< GpgME::Key > keyList;
     std::list< CertificateImpl* > certsList;
 
     m_ctx->setKeyListMode(GPGME_KEYLIST_MODE_LOCAL);
@@ -74,13 +75,19 @@ Sequence< Reference < XCertificate > > 
SecurityEnvironmentGpg::getPersonalCertif
         if (err)
             break;
         if (!k.isInvalid()) {
-            xCert = new CertificateImpl();
-            xCert->setCertificate(m_ctx.get(),k);
-            certsList.push_back(xCert);
+            // We can't create CertificateImpl here as 
CertificateImpl::setCertificate uses GpgME API
+            // which interrupts our key listing here. So first get the keys 
from GpgME, then create the CertificateImpls
+            keyList.push_back(k);
         }
     }
     m_ctx->endKeyListing();
 
+    for (auto const& key : keyList) {
+        xCert = new CertificateImpl();
+        xCert->setCertificate(m_ctx.get(),key);
+        certsList.push_back(xCert);
+    }
+
     Sequence< Reference< XCertificate > > 
xCertificateSequence(certsList.size());
     std::list< CertificateImpl* >::iterator xcertIt;
     int i;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to