[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: Re: [kdelibs/KDE/4.7] kdecore/services: Don't hang when determining
From: Peter Penz <peter.penz19 () gmail ! com>
Date: 2011-09-01 18:35:55
Message-ID: 201109012035.55788.peter.penz19 () gmail ! com
[Download RAW message or body]
Sorry, I've pushed this by mistake - will revert it soon (has not been OKed by David yet).
On Thursday 01 September 2011 19:53:31 Peter Penz wrote:
> Git commit 880a4e8512343462353f69ddecb63ae1748b9902 by Peter Penz.
> Committed on 20/08/2011 at 19:14.
> Pushed by ppenz into branch 'KDE/4.7'.
>
> Don't hang when determining MIME type of corrupted files
>
> The patch has been provided by Miroslav Ľos.
>
> BUG: 280446
>
> M +8 -0 kdecore/services/kmimetyperepository.cpp
> M +2 -2 kdecore/services/kmimetype.cpp
>
> http://commits.kde.org/kdelibs/880a4e8512343462353f69ddecb63ae1748b9902
>
> diff --git a/kdecore/services/kmimetype.cpp b/kdecore/services/kmimetype.cpp
> index 955bf62..a4631f2 100644
> --- a/kdecore/services/kmimetype.cpp
> +++ b/kdecore/services/kmimetype.cpp
> @@ -218,7 +218,7 @@ KMimeType::Ptr KMimeType::findByUrlHelper( const KUrl& _url, mode_t mode,
> }
>
> if ( device && !device->isOpen() ) {
> - if ( !device->open(QIODevice::ReadOnly) ) {
> + if ( !device->open(QIODevice::ReadOnly|QIODevice::Unbuffered) ) {
> device = 0;
> }
> }
> @@ -383,7 +383,7 @@ KMimeType::Ptr KMimeType::findByFileContent( const QString &fileName, int *accur
> *accuracy = 100;
> return mimeFromMode;
> }
> - if (!device.open(QIODevice::ReadOnly)) {
> + if (!device.open(QIODevice::ReadOnly|QIODevice::Unbuffered)) {
> if (accuracy)
> *accuracy = 0;
> return KMimeType::defaultMimeTypePtr();
> diff --git a/kdecore/services/kmimetyperepository.cpp b/kdecore/services/kmimetyperepository.cpp
> index 6ff3d16..7a69005 100644
> --- a/kdecore/services/kmimetyperepository.cpp
> +++ b/kdecore/services/kmimetyperepository.cpp
> @@ -234,6 +234,14 @@ KMimeType::Ptr KMimeTypeRepository::findFromContent(QIODevice* device, int* accu
> *accuracy = 100;
> return findMimeTypeByName(QLatin1String("application/x-zerosize"));
> }
> + if (beginning.isEmpty()) {
> + // check if we can really read the data; also provide enough data for most rules
> + const qint64 dataNeeded = qMin(deviceSize, (qint64) 2048);
> + beginning.resize(dataNeeded);
> + if (!device->seek(0) || device->read(beginning.data(), dataNeeded) == -1) {
> + return defaultMimeTypePtr(); // don't bother detecting unreadable file
> + }
> + }
>
> m_mutex.lockForWrite();
> if (!m_magicFilesParsed) {
>
>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic