mardelle added a comment.

  The unittest is in another diff because it's a different author I guess. I 
can process the comments but looking closer I found 2 other important issues in 
this class:
  
  1. When using KAutoSaveFile::staleFiles(filename) to check if there is an 
existing stale file for a document, we use the function 
KAutoSaveFile::extractManagedFilePath
  
  This function compares the orginal document path one reconstructed from the 
lock file name. However this logic seems flawed since the lock file name uses a 
trimmed path in some cases it is impossible to rebuild the original document's 
path from it.
  Instead I would propose to replace extractManagedFilePath with a new 
function, comparing filename, then paths like:
  
    bool staleMatchesManaged(const QString& staleFileName, const QString 
managedFile)
    {
        const QStringRef sep = staleFileName.rightRef(3);
        int sepPos = staleFileName.indexOf(sep);
        if (QFileInfo(managedFile).fileName() != 
staleFileName.leftRef(sepPos).toString()) {
            // File names don't match
            return false;
        }
        int pathPos = staleFileName.indexOf(QChar::fromLatin1('_'), sepPos);
        const QByteArray encodedPath = staleFileName.midRef(pathPos+1, 
staleFileName.length()-pathPos-1-KAutoSaveFilePrivate::NamePadding).toLatin1();
        const QString sourcePathStart = QUrl::fromPercentEncoding(encodedPath);
        return 
QFileInfo(managedFile).absolutePath().startsWith(sourcePathStart);
    }
  
  
  
  2. The QLockFile class used in KAutoSaveFile creates a temporary file to 
manage locking:
  
  > QLockFile rmlock(d->fileName + QLatin1String(".rmlock"));
  
  https://github.com/qt/qtbase/blob/dev/src/corelib/io/qlockfile.cpp#L259
  
  This means that in our situation where we have a filename that already has 
the maximum length, trying to lock will always fail, preventing usage of the 
autosave file.
  Easier solution is probably to make maximum filename in KAutoSave 
File::tempFileName() a bit shorter.
  
  Thoughts? Should I prepare separate patches ? But changing the fileName 
encoding as suggested:
  
  > Simpler than toPercentEncoding: use QUrl::fileName(QUrl::FullyEncoded).
  
  Might break more the path recovery method extractManagedFilePath..

REPOSITORY
  R244 KCoreAddons

REVISION DETAIL
  https://phabricator.kde.org/D24489

To: mardelle, #frameworks, dfaure, mpyne
Cc: ahmadsamir, kde-frameworks-devel, LeGast00n, GB_2, michaelh, ngraham, bruns

Reply via email to