From a083a7f67031504758fac53127b41989fa2db3ce Mon Sep 17 00:00:00 2001 From: lethosor Date: Mon, 6 Sep 2021 22:32:19 -0400 Subject: [PATCH] tailor: fix operator precedence in command parsing && has a higher precendence than ||, so this could have resulted in a crash in some cases. It also produced unintentional behavior where e.g. `tailor 1 foo` would enable the plugin, unlike `tailor enable foo`. From #1920 --- docs/changelog.txt | 3 +++ plugins/tailor.cpp | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index cce97e5d6..82236cf16 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -33,6 +33,9 @@ changelog.txt uses a syntax similar to RST, with a few special sequences: # Future +## Fixes +- `tailor`: fixed some inconsistencies (and possible crashes) when parsing certain subcommands, e.g. ``tailor help`` + # 0.47.05-r3 ## New Plugins diff --git a/plugins/tailor.cpp b/plugins/tailor.cpp index a85ab5bed..a48bea2c6 100644 --- a/plugins/tailor.cpp +++ b/plugins/tailor.cpp @@ -571,15 +571,15 @@ DFhackCExport command_result plugin_onupdate(color_ostream& out) static command_result tailor_cmd(color_ostream& out, vector & parameters) { bool desired = enabled; - if (parameters.size() == 1 && parameters[0] == "enable" || parameters[0] == "on" || parameters[0] == "1") + if (parameters.size() == 1 && (parameters[0] == "enable" || parameters[0] == "on" || parameters[0] == "1")) { desired = true; } - else if (parameters.size() == 1 && parameters[0] == "disable" || parameters[0] == "off" || parameters[0] == "0") + else if (parameters.size() == 1 && (parameters[0] == "disable" || parameters[0] == "off" || parameters[0] == "0")) { desired = false; } - else if (parameters.size() == 1 && parameters[0] == "usage" || parameters[0] == "help" || parameters[0] == "?") + else if (parameters.size() == 1 && (parameters[0] == "usage" || parameters[0] == "help" || parameters[0] == "?")) { out.print("%s: %s\nUsage:\n%s", plugin_name, tagline, usage); return CR_OK;