[Bug 279165] New: Qt's QFile::isWritable is broken by kde4

Simon simon.eu at gmail.com
Tue Aug 2 12:59:51 BST 2011


https://bugs.kde.org/show_bug.cgi?id=279165

           Summary: Qt's QFile::isWritable is broken by kde4
           Product: kde
           Version: 4.6
          Platform: Debian unstable
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: NOR
         Component: general
        AssignedTo: unassigned-bugs at kde.org
        ReportedBy: simon.eu at gmail.com


Version:           4.6 (using KDE 4.6.2) 
OS:                Linux

File permissions are reported incorrectly to Qt.

Reproducible: Always

Steps to Reproduce:
This code always says that the file (or directory) is writable. filename was
/tmp/ro/someFile which did not exist yet, /tmp/ro was r-xr-xr-x. QFile::open
returned true as well.

    QFile outFile(filename);
    if (QFileInfo(outFile).isWritable()) {
        qDebug() << "Can write file.";
    } else {
        qDebug() << "Cannot write file.";
    }
    if (QFileInfo(QFileInfo(outFile).absolutePath()).isWritable()) {
        qDebug() << "Can write directory.";
    } else {
        qDebug() << "Cannot write directory.";
    }
    qDebug() << "File permissions: " << outFile.permissions();
    qDebug() << "Directory permissions: " <<
QFile(QFileInfo(outFile).absolutePath()).permissions();
    if (QFile(QFileInfo(outFile).absolutePath()).permissions() &
QFile::WriteUser) {
        qDebug() << "Can write directory.";
    } else {
        qDebug() << "Cannot write directory.";
    }
    if (!outFile.open(QIODevice::WriteOnly)) {
        qDebug() << "Cannot write file " << filename;
        Q_ASSERT(false);
    }

#qt on freenode also suspected that this is the problem for file dialogs to not
switch into directories with QFileDialog::setDirectory() but changing into the
parent directory and selecting the directory it is assumed to change into.

Actual Results:  
r-xr-xr-x directory is reported as writable.

Expected Results:  
There is no w in r-xr-xr-x, so it is NOT writable! Really!

strace output when opening a file save dialog and trying to save to
/tmp/ro/myfile.svproj:

$ strace ./slowmoUI 2>&1 |grep '/tmp/ro'
stat("/tmp/ro/Lego.svproj", 0x226a748)  = -1 ENOENT (No such file or directory)
lstat("/tmp/ro/Lego.svproj", 0x7fffe0daf850) = -1 ENOENT (No such file or
directory)
write(2, "kfilemodule(5320)/kurifilter (pl"..., 77kfilemodule(5320)/kurifilter
(plugins) KShortUriFilter::filterUri: "/tmp/ro"
stat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
write(2, "kfilemodule(5320)/kurifilter KUr"..., 103kfilemodule(5320)/kurifilter
KUriFilterPlugin::setFilteredUri: Got filtered to: KUrl("file:///tmp/ro")
write(2, "kfilemodule(5320)/kurifilter (pl"..., 78kfilemodule(5320)/kurifilter
(plugins) KUriSearchFilter::filterUri: "/tmp/ro"
stat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
stat("/tmp/ro/", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
open("/tmp/ro/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 26
stat("/tmp/ro/", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
open("/tmp/ro/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 26
stat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
lstat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
stat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
lstat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
stat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
inotify_add_watch(17, "/tmp/ro",
IN_ATTRIB|IN_MOVED_FROM|IN_MOVED_TO|IN_CREATE|IN_DELETE|IN_DELETE_SELF) = 10
sendmsg(8, {msg_name(0)=NULL,
msg_iov(2)=[{"l\4\1\1\23\0\0\0}\0\0\0W\0\0\0\1\1o\0\1\0\0\0/\0\0\0\0\0\0\0"...,
104}, {"\16\0\0\0file:///tmp/ro\0", 19}], msg_controllen=0, msg_flags=0},
MSG_NOSIGNAL) = 123
write(25, "    12_47_\0\0\0\16file:///tmp/ro", 28) = 28
write(25, "    19_45_\0\0\0\25file:///tmp/ro/myf"..., 35) = 35
write(2, "kfilemodule(5320)/kio (KIOJob) K"..., 92kfilemodule(5320)/kio
(KIOJob) KIO::SlaveInterface::dispatch: error  111   "/tmp/ro/myfile"
write(25, "    20_45_\0\0\0\34file:///tmp/ro/myf"..., 42) = 42
write(2, "kfilemodule(5320)/kio (KIOJob) K"..., 99kfilemodule(5320)/kio
(KIOJob) KIO::SlaveInterface::dispatch: error  111   "/tmp/ro/myfile.svproj"
write(25, "    20_45_\0\0\0\34file:///tmp/ro/myf"..., 42) = 42
write(2, "kfilemodule(5320)/kio (KIOJob) K"..., 99kfilemodule(5320)/kio
(KIOJob) KIO::SlaveInterface::dispatch: error  111   "/tmp/ro/myfile.svproj"
lstat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
lstat("/tmp/ro/myfile.svproj", 0x7fffe0dad410) = -1 ENOENT (No such file or
directory)
stat("/tmp/ro/myfile.svproj", 0x7fffe0dae0e0) = -1 ENOENT (No such file or
directory)
open("/tmp/ro/myfile.svproj", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or
directory)
stat("/tmp/ro/myfile.svproj", 0x2aea1c8) = -1 ENOENT (No such file or
directory)
lstat("/tmp/ro/myfile.svproj", 0x7fffe0dae000) = -1 ENOENT (No such file or
directory)
stat("/tmp/ro/myfile.svproj", 0x2aea1c8) = -1 ENOENT (No such file or
directory)
lstat("/tmp/ro/myfile.svproj", 0x7fffe0db09a0) = -1 ENOENT (No such file or
directory)
write(2, "Saving project as  \"/tmp/ro/myfi"..., 44Saving project as 
"/tmp/ro/myfile.svproj" 
lstat("/tmp/ro", {st_mode=S_IFDIR|0555, st_size=4096, ...}) = 0
sendmsg(8, {msg_name(0)=NULL,
msg_iov(2)=[{"l\4\1\1\23\0\0\0\204\0\0\0O\0\0\0\1\1o\0\1\0\0\0/\0\0\0\0\0\0\0"...,
96}, {"\16\0\0\0file:///tmp/ro\0", 19}], msg_controllen=0, msg_flags=0},
MSG_NOSIGNAL) = 115

-- 
Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the Unassigned-bugs mailing list