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:
@@ -22,6 +22,8 @@
|
|||||||
Thanks to Florian.
|
Thanks to Florian.
|
||||||
- TW #1955 Adding tasks in context.
|
- TW #1955 Adding tasks in context.
|
||||||
Thanks to Jean-Francois Joly, Matt Smith.
|
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"
|
- TW #2004 "shell" should not be expand to "exec tasksh"
|
||||||
Thanks to Arvedui
|
Thanks to Arvedui
|
||||||
- TW #2007 Compute number of current tasks correctly
|
- TW #2007 Compute number of current tasks correctly
|
||||||
|
|||||||
14
src/CLI2.cpp
14
src/CLI2.cpp
@@ -417,8 +417,18 @@ void CLI2::lexArguments ()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::string quote = "'";
|
std::string quote = "'";
|
||||||
std::string escaped = _original_args[i].attribute ("raw");
|
// Escape unescaped single quotes
|
||||||
escaped = str_replace (escaped, quote, "\\'");
|
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::size_type cursor = 0;
|
||||||
std::string word;
|
std::string word;
|
||||||
|
|||||||
Reference in New Issue
Block a user