← Back to team overview

cairo-dock-team team mailing list archive

[Bug 526138] Re: GMenu does not handle desktop file exec strings properly

 

Ok, so using a rebuilt version that uses ..._get_value:

cCommand now fills with the entire command value, BUT...
in _launch_from_file:
107		if (cCommand != NULL)
108		{
109			gchar *str = strchr (cCommand, '%');
110			if (str != NULL)
111				*str = '\0';

This sequence truncates the string "kst -caption \"%c\" %i %m" to just "kst -caption \"".
Since there is no code to handle the freedesktop field codes, the function cairo_dock_launch_command_full() is fed an invalid command that chokes with a "no EOF" error when fed to system().  So, long story short, using g_key_file_get_value is a step in the right direction, but we're not there yet.

I did compare it to the gnome-panel code that performs the equivalent
task, and gnome-panel handles the launchers in a completely different
way.  I think I can come up with a patch for this function that will get
the right functionality in there without too big a change--only adding a
few lines to applet-util.c to handle the various freedesktop field
codes.

I'll let you know what I come up with.

-- 
GMenu does not handle desktop file exec strings properly
https://bugs.launchpad.net/bugs/526138
You received this bug notification because you are a member of Cairo-
Dock Team, which is subscribed to Cairo-Dock Core.

Status in Cairo-Dock : Core: New

Bug description:
Using GMenu plugin on cairo-dock-2.1.2.4 on Fedora 12:

Applications in the main menu whose .desktop file exec string contains quotes (single or double) don't get launched.

Example: Launching the application Kst from GMenu
exec=kst -caption "%c" %i %m

cairo-dock -l debug output:
debug   :  (cairo-dock-callbacks.c:cairo_dock_launch_command_full:955)  
  cairo_dock_launch_command_full (kst -caption " , (null))
sh: -c: line 0: unexpected EOF while looking for matching `"'
sh: -c: line 1: syntax error: unexpected end of file

by the time the exec string gets to cairo_dock_launch_command_full, any text appearing after quotes is truncated, causing the program to fail to launch.

workaround: modify .desktop files to remove quotes from exec strings

suggestion: GMenu/applet-utils.c:89 --> change g_key_file_get_string to g_key_file_get_value

Thoughts?  Does this open up any security issues? 

Reasoning:
g_key_file_parse_value_as_string, as called by g_key_file_get_string takes the result of g_key_file_get_value and processes some escape sequences.  However, it does not, for some reason, handle escapes such as \' and \", which mangles the exec string, causing the program not to launch.





References