Bug 105635 - xdg-desktop-menu uninstall /nonexistent/*.directory /nonexistent/*.desktop removes unrelated files
Summary: xdg-desktop-menu uninstall /nonexistent/*.directory /nonexistent/*.desktop re...
Status: NEW
Alias: None
Product: Portland
Classification: Unclassified
Component: xdg-utils (show other bugs)
Version: unspecified
Hardware: All Linux (All)
: medium major
Assignee: Portland Bugs
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-03-20 23:42 UTC by marmarek
Modified: 2018-03-20 23:42 UTC (History)
0 users

See Also:
i915 platform:
i915 features:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description marmarek 2018-03-20 23:42:27 UTC
Providing arguments to xdg-desktop-menu with wildcards (not expanded by shell - either because of quoting, or missing files) expand them internally, but ignoring directory part of the argument. This results in operation on unrelated files.

The most extreme case is: xdg-desktop-menu uninstall /nonexistent/*.directory /nonexistent/*.desktop
This results in removing all files from /usr/share/desktop-directories and /usr/share/applications.
While this behavior could be expected (if documented!) for just "*.desktop" argument, certainly it isn't when there was a full path provided.

Looks like missing quoting here:

        uninstall)
            for x in $xdg_dir $kde_dir $gnome_dir ; do
                rm -f $x/$basefile  # <- here
            done

(this fragment appears twice in the script - once for directory files and once for desktop files)

Version: xdg-utils 1.1.1 (Fedora 26).

BTW I recommend running shellcheck on this (and other) script, it detects problems like this:
In /usr/bin/xdg-desktop-menu line 1411:
                rm -f $x/$basefile
                      ^-- SC2086: Double quote to prevent globbing and word splitting.
                         ^-- SC2086: Double quote to prevent globbing and word splitting.


Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.