[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