[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-core-devel
Subject: Path check in kdelibs/plasma/package.cpp ?
From: Frank Wilson <frank () thefixedpoint ! me ! uk>
Date: 2009-01-04 18:18:11
Message-ID: 4960FD63.4000807 () thefixedpoint ! me ! uk
[Download RAW message or body]
I've been trying out kde 4.2 beta 2 and I have an issue with the way
different wallpapers are loaded.
My problem is that I cannot change my wallpaper to one of the default
directory-packaged wallpapers that come with kde (n.b. single-image
wallpapers are fine!). When I click on the "Picture" drop down box none
of the directory-packaged wallpapers display. When I select
one of the directory-packaged wallpapers the background is set to a
plain colour background and not the wallpaper I asked for.
When I select a directory-packaged wallpaper or display the drop down
list I get messages such as the following:
> plasma(10713)/libplasma Plasma::Package::filePath:
>> "/System/Links/Shared/wallpapers/Vector_Sunset/contents/
>> screenshot.png" does not exist
and when I select a directory-packaged wallpaper I also get:
> QImage::scaled: Image is a null image
I am using GoboLinux, which does not use the FHS. So, on my distro
kde-libs is installed in /Programs/KDE-Libs/Current, kde-base-workspace
in /Programs/KDE-Base-Workspace/Current, etc. Everything is symlinked
under /System/Links/Executables, /System/Links/Shared, etc.
It seems that kde is looking for the wallpapers under
/System/Links/Shared/wallpapers and it does not like symlinks such as,
/System/Links/Shared/wallpapers/Vector_Sunset
which points to
/Programs/KDE-Base-Workspace/4.1.85/Shared/wallpapers/Vector_Sunset
I know this because when I removed the symbolic link and replaced it
with a physical copy of the wallpaper, everything worked once again.
I had a look at the code involved and it seems that you are doing
some sort of explicit checks for symbolic links in Package::filePath()
in the file kdelibs/plasma/package.cpp .
Specifically, this check fails:
if (canonicalized.startsWith(d->basePath)) { ...
I added a bit more debug output, namely:
if (QFile::exists(path)) {
// ensure that we don't return files outside of our base path
// due to symlink or ../ games
QDir dir(path);
QString canonicalized = dir.canonicalPath() + QDir::separator();
/*** Extra Debug output ***/
kDebug() << "canonical path is: " << canonicalized;
kDebug() << "base path is: " << d->basePath;
/**************************/
if (canonicalized.startsWith(d->basePath)) {
return path;
}
}
Which gave me the following output when I tried to select a
directory-packaged wallpaper:
plasma(10713)/libplasma Plasma::Package::filePath: canonical path is:
"/Programs/KDE-Base-Workspace/4.1.85/Shared/wallpapers/Vector_Sunset/contents/screenshot.png/"
plasma(10713)/libplasma Plasma::Package::filePath: base path is:
"/System/Links/Shared/wallpapers/Vector_Sunset/"
plasma(10713)/libplasma Plasma::Package::filePath:
"/System/Links/Shared/wallpapers/Vector_Sunset/contents/screenshot.png"
does not exist
I have two questions about this. Firstly, is there some cmake option
that would allow this check to pass? Secondly, what is the purpose of
this check?
Thanks,
Frank Wilson
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic