[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