----------------------------------------------------------- This is an automatically generated e-mail. To reply, visit: http://git.reviewboard.kde.org/r/103577/ -----------------------------------------------------------
Review request for kdelibs. Description ------- KConfigIniBackend::isWritable() tries to handle cases where the config file doesn't exist and one or more of the deepest directories don't exist either, in which case 'true' is returned if the deepest directory is writable. However, this fails because the code tries to use QDir::cdUp() to go upwards until an existing directory is found. As per documentation, cdUp() will fail when the parent directory doesn't exist, causing isWritable() to bail out and return false without checking further parent directories. This will cause e.g. KConfig::accessMode() to return ReadOnly if the configuration directory structure doesn't exist yet, even if the KConfig is actually writeable (the parent directories are automatically created by KConfigIniBackend at writing time). This was observed at https://bugs.mageia.org/show_bug.cgi?id=3601#c10 Fix that by walking through the tree using QFileInfo::absolutePath() instead. Diffs ----- kdecore/config/kconfigini.cpp 5f7ba7c Diff: http://git.reviewboard.kde.org/r/103577/diff/diff Testing ------- Built kdelibs 4.7.95 with the patch, the error message in the referenced Mageia bugreport comment (which is shown when accessMode() returns ReadOnly) doesn't show up anymore when the ~/.kde4 directory tree doesn't exist. Also, if I create an empty ~/.kde4 dir without any permissions, the accessMode() call still returns ReadOnly as expected. Thanks, Anssi Hannula