mirror of
https://github.com/GothenburgBitFactory/taskwarrior.git
synced 2025-06-26 10:54:26 +02:00
A more thorough fix to corruption of the depends property
This commit is contained in:
parent
96d6c1df9f
commit
7321febe4f
2 changed files with 13 additions and 12 deletions
21
src/Task.cpp
21
src/Task.cpp
|
@ -659,18 +659,19 @@ void Task::parse (const std::string& input)
|
||||||
data[name] = decode (json::decode (value));
|
data[name] = decode (json::decode (value));
|
||||||
|
|
||||||
// Fix for issue#2689: taskserver sometimes encodes the depends
|
// Fix for issue#2689: taskserver sometimes encodes the depends
|
||||||
// property as a JSON-encoded one-element array of strings. So, if
|
// property as a JSON-encoded array of strings. To avoid this whole
|
||||||
// depends has form `[".."]`, then apply another layer of JSON
|
// issue, we strip anything that isn't a UUID character or a comma.
|
||||||
// decoding.
|
if (name == "depends") {
|
||||||
if (name == "depends" && data[name].length () >= 4) {
|
std::string newDep;
|
||||||
auto l = data[name].length ();
|
for (auto &c: data[name]) {
|
||||||
if (data[name][0] == '[' &&
|
if ((c >= '0' && c <= '9') ||
|
||||||
data[name][1] == '"' &&
|
(c >= 'a' && c <= 'f') ||
|
||||||
data[name][l-2] == '"' &&
|
c == ',' || c == '-') {
|
||||||
data[name][l-1] == ']') {
|
newDep.push_back(c);
|
||||||
data[name] = data[name].substr(2, l-4);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
data[name] = newDep;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
attLine.skip (' ');
|
attLine.skip (' ');
|
||||||
|
|
|
@ -137,7 +137,7 @@ int main (int, char**)
|
||||||
sample = "["
|
sample = "["
|
||||||
"uuid:\"00000000-0000-0000-0000-000000000000\" "
|
"uuid:\"00000000-0000-0000-0000-000000000000\" "
|
||||||
"description:\"d\" "
|
"description:\"d\" "
|
||||||
"depends:\"[\\\"cfee3170-f153-4075-aa1d-e20bcac2841b,f5982cca-2ea1-4bfd-832c-9bd571dc0743\\\"]\""
|
"depends:\"[\\\"cfee3170-f153-4075-aa1d-e20bcac2841b\\\",\\\"f5982cca-2ea1-4bfd-832c-9bd571dc0743\\\"]\""
|
||||||
"]";
|
"]";
|
||||||
ff4 = Task (sample);
|
ff4 = Task (sample);
|
||||||
value = ff4.get ("uuid");
|
value = ff4.get ("uuid");
|
||||||
|
@ -151,7 +151,7 @@ int main (int, char**)
|
||||||
sample = "["
|
sample = "["
|
||||||
"uuid:\"00000000-0000-0000-0000-000000000000\" "
|
"uuid:\"00000000-0000-0000-0000-000000000000\" "
|
||||||
"description:\"d\" "
|
"description:\"d\" "
|
||||||
"depends:\"&open;\\\"cfee3170-f153-4075-aa1d-e20bcac2841b,f5982cca-2ea1-4bfd-832c-9bd571dc0743\\\"&close;\""
|
"depends:\"&open;\\\"cfee3170-f153-4075-aa1d-e20bcac2841b\\\",\\\"f5982cca-2ea1-4bfd-832c-9bd571dc0743\\\"&close;\""
|
||||||
"]";
|
"]";
|
||||||
ff4 = Task (sample);
|
ff4 = Task (sample);
|
||||||
value = ff4.get ("uuid");
|
value = ff4.get ("uuid");
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue