desktop-file-validate does not recognize \\" sequence in Exec quoted strings
Electrum ships a .desktop
file with the following entry:
Exec=sh -c "PATH=\"\\$HOME/.local/bin:\\$PATH\"; electrum %u"
desktop-file-validate
is okay with this, but someone else begs to differ:
kf5.kconfig.core: "KConfigIni: In file /usr/share/applications/electrum.desktop, line 6: " "Invalid escape sequence \"\\\"\"."
kf5.kconfig.core: "KConfigIni: In file /usr/share/applications/electrum.desktop, line 6: " "Invalid escape sequence \"\\\"\"."
From what I can grasp from the Desktop Entry Specification, a double quote character within a quoted Exec
string should be escaped as \\"
, just like the backtick, dollar sign and backslash characters. However, desktop-file-validate
does not agree:
Exec=sh -c "echo 'dollar:\\$ backtick:\\` backslash:\\\\ quotes:\\"'"
error: value "sh -c "echo 'dollar:\\$ backtick:\\` backslash:\\\\ quotes:\\"'"" for key "Exec" in group "Desktop Entry" contains a quote which is not closed
The bug seems to be at line 1230, with the if (!escaped)
lacking an else escaped = FALSE
, to have the escaped double quote character "consume" the escaping. As it is, the escaping spreads to the closing quote, hence the "unclosed quote" error.
(Correspondingly, unsupported escape sequences should probably trigger an error or warning around line 1281.)