Fixed bug with double escaped single quotes

Before, the parser always escaped single quotes, independent of the quotes being escaped already. This is now fixed.
This commit is contained in:
sebu06 2021-08-28 10:10:47 +02:00 committed by Tomas Babej
parent d270ef31a4
commit 0523ada9fc
2 changed files with 14 additions and 2 deletions

View file

@ -22,6 +22,8 @@
Thanks to Florian.
- TW #1955 Adding tasks in context.
Thanks to Jean-Francois Joly, Matt Smith.
- TW #1960 Fixed bug with double escaped single quotes.
Thanks to Sebastian Uharek
- TW #2004 "shell" should not be expand to "exec tasksh"
Thanks to Arvedui
- TW #2007 Compute number of current tasks correctly

View file

@ -417,8 +417,18 @@ void CLI2::lexArguments ()
else
{
std::string quote = "'";
std::string escaped = _original_args[i].attribute ("raw");
escaped = str_replace (escaped, quote, "\\'");
// Escape unescaped single quotes
std::string escaped = "";
bool nextEscaped = false;
for(auto c : _original_args[i].attribute ("raw")) {
if(!nextEscaped && (c == '\\')) {
nextEscaped = true;
} else {
if(c == '\'' && !nextEscaped) escaped += "\\";
nextEscaped = false;
}
escaped += c;
}
std::string::size_type cursor = 0;
std::string word;