Merge remote-tracking branch 'myk002/myk_orders_crash' into develop

Conflicts:
	docs/changelog.txt
develop
lethosor 2021-02-10 00:10:53 -05:00
commit ebbbfc0f8e
No known key found for this signature in database
GPG Key ID: 76A269552F4F58C1
2 changed files with 15 additions and 5 deletions

@ -35,6 +35,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences:
## Fixes ## Fixes
- `embark-assistant`: fixed bug in soil depth determination for ocean tiles - `embark-assistant`: fixed bug in soil depth determination for ocean tiles
- `orders`: don't crash when importing orders with malformed JSON
# 0.47.04-r5 # 0.47.04-r5

@ -426,29 +426,38 @@ static command_result orders_import_command(color_ostream & out, const std::stri
return CR_WRONG_USAGE; return CR_WRONG_USAGE;
} }
const std::string filename("dfhack-config/orders/" + name + ".json");
Json::Value orders; Json::Value orders;
{ {
std::ifstream file("dfhack-config/orders/" + name + ".json"); std::ifstream file(filename);
if (!file.good()) if (!file.good())
{ {
out << COLOR_LIGHTRED << "Cannot find orders file." << std::endl; out << COLOR_LIGHTRED << "Cannot find orders file: " << filename << std::endl;
return CR_FAILURE; return CR_FAILURE;
} }
file >> orders; try
{
file >> orders;
}
catch (const std::exception & e)
{
out << COLOR_LIGHTRED << "Error reading orders file: " << filename << ": " << e.what() << std::endl;
return CR_FAILURE;
}
if (!file.good()) if (!file.good())
{ {
out << COLOR_LIGHTRED << "Error reading orders file." << std::endl; out << COLOR_LIGHTRED << "Error reading orders file: " << filename << std::endl;
return CR_FAILURE; return CR_FAILURE;
} }
} }
if (orders.type() != Json::arrayValue) if (orders.type() != Json::arrayValue)
{ {
out << COLOR_LIGHTRED << "Invalid orders file: expected array" << std::endl; out << COLOR_LIGHTRED << "Invalid orders file: " << filename << ": expected array" << std::endl;
return CR_FAILURE; return CR_FAILURE;
} }