[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdepim/libkleo/backends/qgpgme
From:       Marc Mutz <mutz () kde ! org>
Date:       2008-03-12 14:31:09
Message-ID: 1205332269.132360.12966.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 784823 by mutz:

Don't hold references to shared_ptr<QIODevices> long after they're no longer used. \
Fixes shared_ptr<>::reset() having no effect in FileOutput in \
kleopatra/utils/output.cpp

 M  +7 -2      qgpgmedecryptjob.cpp  
 M  +8 -2      qgpgmedecryptverifyjob.cpp  
 M  +10 -3     qgpgmeencryptjob.cpp  
 M  +5 -1      qgpgmejob.cpp  
 M  +3 -0      qgpgmejob.h  
 M  +13 -4     qgpgmesignencryptjob.cpp  
 M  +9 -3      qgpgmesignjob.cpp  
 M  +6 -2      qgpgmeverifydetachedjob.cpp  
 M  +7 -2      qgpgmeverifyopaquejob.cpp  


--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmedecryptjob.cpp #784822:784823
@@ -90,12 +90,17 @@
 
     hookupContextToEventLoopInteractor();
 
-    if ( const GpgME::Error err = mCtx->startDecryption( *mInData, *mOutData ) )
+    if ( const GpgME::Error err = mCtx->startDecryption( *mInData, *mOutData ) ) {
+        resetDataObjects();
         doThrow( err, i18n("Can't start decrypt job") );
+    }
 }
 
 void Kleo::QGpgMEDecryptJob::doOperationDoneEvent( const GpgME::Error & ) {
-    emit result( mCtx->decryptionResult(), outData() );
+    const GpgME::DecryptionResult res = mCtx->decryptionResult();
+    const QByteArray plainText = outData();
+    resetDataObjects();
+    emit result( res, plainText );
 }
 
 #include "qgpgmedecryptjob.moc"
--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmedecryptverifyjob.cpp \
#784822:784823 @@ -91,12 +91,18 @@
 
     hookupContextToEventLoopInteractor();
 
-    if ( const GpgME::Error err = mCtx->startCombinedDecryptionAndVerification( \
*mInData, *mOutData ) ) +    if ( const GpgME::Error err = \
mCtx->startCombinedDecryptionAndVerification( *mInData, *mOutData ) ) { +        \
                resetDataObjects();
         doThrow( err, i18n("Can't start combined decrypt/verify operation") );
+    }
 }
 
 void Kleo::QGpgMEDecryptVerifyJob::doOperationDoneEvent( const GpgME::Error & ) {
-    emit result( mCtx->decryptionResult(), mCtx->verificationResult(), outData() );
+    const GpgME::DecryptionResult dr = mCtx->decryptionResult();
+    const GpgME::VerificationResult vr = mCtx->verificationResult();
+    const QByteArray plainText = outData();
+    resetDataObjects();
+    emit result( dr, vr, plainText );
 }
 
 #include "qgpgmedecryptverifyjob.moc"
--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmeencryptjob.cpp #784822:784823
@@ -105,8 +105,10 @@
 
   const GpgME::Context::EncryptionFlags flags =
     alwaysTrust ? GpgME::Context::AlwaysTrust : GpgME::Context::None;
-  if ( const GpgME::Error err = mCtx->startEncryption( recipients, *mInData, \
*mOutData, flags ) ) +  if ( const GpgME::Error err = mCtx->startEncryption( \
recipients, *mInData, *mOutData, flags ) ) { +      resetDataObjects();
       doThrow( err, i18n("Can't start encrypt job") );
+  }
 }
 
 void Kleo::QGpgMEEncryptJob::start( const std::vector<GpgME::Key> & recipients,
@@ -130,11 +132,16 @@
     return GpgME::EncryptionResult( err );
   waitForFinished();
   ciphertext = outData();
-  return mResult = mCtx->encryptionResult();
+  mResult = mCtx->encryptionResult();
+  resetDataObjects();
+  return mResult;
 }
 
 void Kleo::QGpgMEEncryptJob::doOperationDoneEvent( const GpgME::Error & ) {
-  emit result( mResult = mCtx->encryptionResult(), outData() );
+  mResult = mCtx->encryptionResult();
+  const QByteArray ciphertext = outData();
+  resetDataObjects();
+  emit result( mResult, ciphertext );
 }
 
 void Kleo::QGpgMEEncryptJob::showErrorDialog( QWidget * parent, const QString & \
                caption ) const {
--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmejob.cpp #784822:784823
@@ -133,11 +133,15 @@
 Kleo::QGpgMEJob::~QGpgMEJob() {
   InvarianceChecker check( this );
   delete mCtx; mCtx = 0;
+  resetDataObjects();
+  deleteAllPatterns();
+}
+
+void Kleo::QGpgMEJob::resetDataObjects() {
   delete mInData; mInData = 0;
   delete mInDataDataProvider; mInDataDataProvider = 0;
   delete mOutData; mOutData = 0;
   delete mOutDataDataProvider; mOutDataDataProvider = 0;
-  deleteAllPatterns();
 }
 
 void Kleo::QGpgMEJob::deleteAllPatterns() {
--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmejob.h #784822:784823
@@ -103,6 +103,9 @@
     void createOutData();
     /*! Creates a GpgME::Data/QGpgME::QByteArrayDataProvider pair associated with \a \
out */  void createOutData( const boost::shared_ptr<QIODevice> & out );
+    /*! Destroys all data objects (call this before the result signal
+      is emitted, or on error return from start()). */
+    void resetDataObjects();
     /*! Creates a GpgME::Data/QGpgME::QIODeviceDataProvider pair,
       associated with \a in */
     void createInData( const boost::shared_ptr<QIODevice> & in );
--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmesignencryptjob.cpp #784822:784823
@@ -117,8 +117,10 @@
 
   const GpgME::Context::EncryptionFlags flags =
     alwaysTrust ? GpgME::Context::AlwaysTrust : GpgME::Context::None ;
-  if ( const GpgME::Error err = mCtx->startCombinedSigningAndEncryption( recipients, \
*mInData, *mOutData, flags ) ) +  if ( const GpgME::Error err = \
mCtx->startCombinedSigningAndEncryption( recipients, *mInData, *mOutData, flags ) ) { \
+      resetDataObjects();  doThrow( err, i18n("Can't start combined sign-encrypt \
job") ); +  }
 }
 
 void Kleo::QGpgMESignEncryptJob::start( const std::vector<GpgME::Key> & signers,
@@ -131,6 +133,7 @@
     } catch ( const GpgME::Exception & e ) {
         mResult.first = GpgME::SigningResult( e.error() );
         mResult.second = GpgME::EncryptionResult();
+        resetDataObjects();
         throw;
     }
 }
@@ -140,21 +143,27 @@
 				  const std::vector<GpgME::Key> & recipients,
 				  const QByteArray & plainText, bool alwaysTrust,
 				  QByteArray & cipherText ) {
-  if ( GpgME::Error err = setup( signers, recipients, plainText, alwaysTrust ) )
-    return mResult = std::make_pair( GpgME::SigningResult( err ), \
GpgME::EncryptionResult() ); +  if ( const GpgME::Error err = setup( signers, \
recipients, plainText, alwaysTrust ) ) { +    mResult = std::make_pair( \
GpgME::SigningResult( err ), GpgME::EncryptionResult() ); +    resetDataObjects();
+    return mResult;
+  }
 
   waitForFinished();
 
   cipherText = outData();
   mResult.first = mCtx->signingResult();
   mResult.second = mCtx->encryptionResult();
+  resetDataObjects();
   return mResult;
 }
 
 void Kleo::QGpgMESignEncryptJob::doOperationDoneEvent( const GpgME::Error & ) {
   mResult.first = mCtx->signingResult();
   mResult.second = mCtx->encryptionResult();
-  emit result( mResult.first, mResult.second, outData() );
+  const QByteArray cipherText = outData();
+  resetDataObjects();
+  emit result( mResult.first, mResult.second, cipherText );
 }
 
 void Kleo::QGpgMESignEncryptJob::showErrorDialog( QWidget * parent, const QString & \
                caption ) const {
--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmesignjob.cpp #784822:784823
@@ -113,8 +113,10 @@
     setSigningKeys( signers );
     hookupContextToEventLoopInteractor();
 
-    if ( const GpgME::Error err = mCtx->startSigning( *mInData, *mOutData, mode ) )
+    if ( const GpgME::Error err = mCtx->startSigning( *mInData, *mOutData, mode ) ) \
{ +        resetDataObjects();
         doThrow( err, i18n("Can't start sign job") );
+    }
 }
 
 void Kleo::QGpgMESignJob::start( const std::vector<GpgME::Key> & signers,
@@ -140,11 +142,15 @@
   waitForFinished();
 
   signature = outData();
-  return mResult = mCtx->signingResult();
+  mResult = mCtx->signingResult();
+  resetDataObjects();
+  return mResult;
 }
 
 void Kleo::QGpgMESignJob::doOperationDoneEvent( const GpgME::Error & ) {
-  emit result( mResult = mCtx->signingResult(), outData() );
+  mResult = mCtx->signingResult();
+  const QByteArray cipherText = outData();
+  emit result( mResult, cipherText );
 }
 
 void Kleo::QGpgMESignJob::showErrorDialog( QWidget * parent, const QString & caption \
                ) const {
--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmeverifydetachedjob.cpp \
#784822:784823 @@ -94,12 +94,16 @@
 
   hookupContextToEventLoopInteractor();
 
-  if ( const GpgME::Error err = mCtx->startDetachedSignatureVerification( *mInData, \
*mOutData ) ) +  if ( const GpgME::Error err = \
mCtx->startDetachedSignatureVerification( *mInData, *mOutData ) ) { +      \
                resetDataObjects();
       doThrow( err, i18n("Can't start detached signature verification") );
+  }
 }
 
 void Kleo::QGpgMEVerifyDetachedJob::doOperationDoneEvent( const GpgME::Error & ) {
-    emit result( mCtx->verificationResult() );
+    const GpgME::VerificationResult vr = mCtx->verificationResult();
+    resetDataObjects();
+    emit result( vr );
 }
 
 
--- trunk/KDE/kdepim/libkleo/backends/qgpgme/qgpgmeverifyopaquejob.cpp #784822:784823
@@ -90,12 +90,17 @@
 
     hookupContextToEventLoopInteractor();
 
-    if ( const GpgME::Error err = mCtx->startOpaqueSignatureVerification( *mInData, \
*mOutData ) ) +    if ( const GpgME::Error err = \
mCtx->startOpaqueSignatureVerification( *mInData, *mOutData ) ) { +        \
                resetDataObjects();
         doThrow( err, i18n("Can't start opaque signature verification") );
+    }
 }
 
 void Kleo::QGpgMEVerifyOpaqueJob::doOperationDoneEvent( const GpgME::Error & ) {
-    emit result( mCtx->verificationResult(), outData() );
+    const GpgME::VerificationResult vr = mCtx->verificationResult();
+    const QByteArray plainText = outData();
+    resetDataObjects();
+    emit result( vr, plainText );
 }
 
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic