Don't leak temporary unpacked metadata files extracted from .okular files

This commit is contained in:
Fabio D'Urso 2014-05-10 11:35:33 +02:00
parent 6bf6b14f3c
commit f7ec9df0af
2 changed files with 11 additions and 14 deletions

View File

@ -109,7 +109,7 @@ struct ArchiveData
} }
KTemporaryFile document; KTemporaryFile document;
QString metadataFileName; KTemporaryFile metadataFile;
}; };
struct RunningSearch struct RunningSearch
@ -613,12 +613,12 @@ void DocumentPrivate::loadDocumentInfo()
if ( m_xmlFileName.isEmpty() ) if ( m_xmlFileName.isEmpty() )
return; return;
loadDocumentInfo( m_xmlFileName ); QFile infoFile( m_xmlFileName );
loadDocumentInfo( infoFile );
} }
void DocumentPrivate::loadDocumentInfo( const QString &fileName ) void DocumentPrivate::loadDocumentInfo( QFile &infoFile )
{ {
QFile infoFile( fileName );
if ( !infoFile.exists() || !infoFile.open( QIODevice::ReadOnly ) ) if ( !infoFile.exists() || !infoFile.open( QIODevice::ReadOnly ) )
return; return;
@ -2263,7 +2263,7 @@ bool Document::openDocument( const QString & docFile, const KUrl& url, const KMi
// 2. load Additional Data (bookmarks, local annotations and metadata) about the document // 2. load Additional Data (bookmarks, local annotations and metadata) about the document
if ( d->m_archiveData ) if ( d->m_archiveData )
{ {
d->loadDocumentInfo( d->m_archiveData->metadataFileName ); d->loadDocumentInfo( d->m_archiveData->metadataFile );
d->m_annotationsNeedSaveAs = true; d->m_annotationsNeedSaveAs = true;
} }
else else
@ -4192,19 +4192,15 @@ bool Document::openDocumentArchive( const QString & docFile, const KUrl & url )
archiveData->document.close(); archiveData->document.close();
} }
std::auto_ptr< KTemporaryFile > tempMetadataFileName;
const KArchiveEntry * metadataEntry = mainDir->entry( metadataFileName ); const KArchiveEntry * metadataEntry = mainDir->entry( metadataFileName );
if ( metadataEntry && metadataEntry->isFile() ) if ( metadataEntry && metadataEntry->isFile() )
{ {
std::auto_ptr< QIODevice > metadataEntryDevice( static_cast< const KZipFileEntry * >( metadataEntry )->createDevice() ); std::auto_ptr< QIODevice > metadataEntryDevice( static_cast< const KZipFileEntry * >( metadataEntry )->createDevice() );
tempMetadataFileName.reset( new KTemporaryFile() ); archiveData->metadataFile.setSuffix( ".xml" );
tempMetadataFileName->setSuffix( ".xml" ); if ( archiveData->metadataFile.open() )
tempMetadataFileName->setAutoRemove( false );
if ( tempMetadataFileName->open() )
{ {
copyQIODevice( metadataEntryDevice.get(), tempMetadataFileName.get() ); copyQIODevice( metadataEntryDevice.get(), &archiveData->metadataFile );
archiveData->metadataFileName = tempMetadataFileName->fileName(); archiveData->metadataFile.close();
tempMetadataFileName->close();
} }
} }

View File

@ -29,6 +29,7 @@
class QUndoStack; class QUndoStack;
class QEventLoop; class QEventLoop;
class QFile;
class QTimer; class QTimer;
class KTemporaryFile; class KTemporaryFile;
@ -121,7 +122,7 @@ class DocumentPrivate
qulonglong getTotalMemory(); qulonglong getTotalMemory();
qulonglong getFreeMemory( qulonglong *freeSwap = 0 ); qulonglong getFreeMemory( qulonglong *freeSwap = 0 );
void loadDocumentInfo(); void loadDocumentInfo();
void loadDocumentInfo( const QString &fileName ); void loadDocumentInfo( QFile &infoFile );
void loadViewsInfo( View *view, const QDomElement &e ); void loadViewsInfo( View *view, const QDomElement &e );
void saveViewsInfo( View *view, QDomElement &e ) const; void saveViewsInfo( View *view, QDomElement &e ) const;
QString giveAbsolutePath( const QString & fileName ) const; QString giveAbsolutePath( const QString & fileName ) const;