fix(console): confirmed destructive commands now run; gate z_exportmnemonic
Two gaps in the destructive-command confirm: - Regression: a command confirmed via the command-reference dialog's "Run" was replayed through submitConsoleCommand, which re-armed the destructive gate and silently did nothing until the user retyped it. The dialog now pre-arms the exact-line confirm so the replay executes. - z_exportmnemonic (full-node seed-phrase reveal) wasn't in the reference catalog, so a pasted z_exportmnemonic ran instantly. Added a small secret-revealing fallback set (z_exportmnemonic, z_exportviewingkey) to the destructive check. Command execution is otherwise unchanged. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1552,6 +1552,12 @@ bool IsDestructiveConsoleCommand(const std::string& firstLower, bool fullNode)
|
|||||||
if (n == firstLower) return cat.commands[i].destructive;
|
if (n == firstLower) return cat.commands[i].destructive;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// Secret-revealing full-node commands that aren't in the reference catalog still deserve the gate
|
||||||
|
// (e.g. z_exportmnemonic dumps the seed phrase; the lite "seed" equivalent is already flagged).
|
||||||
|
if (fullNode) {
|
||||||
|
static const char* kSecretReveal[] = { "z_exportmnemonic", "z_exportviewingkey" };
|
||||||
|
for (const char* s : kSecretReveal) if (firstLower == s) return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} // namespace
|
} // namespace
|
||||||
@@ -1882,6 +1888,9 @@ void ConsoleTab::renderCommandDetail(const ConsoleCommandEntry& cmd, const char*
|
|||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
if (material::TactileButton(TR("console_ref_run"), ImVec2(cbw, 0))) {
|
if (material::TactileButton(TR("console_ref_run"), ImVec2(cbw, 0))) {
|
||||||
pending_submit_ = built;
|
pending_submit_ = built;
|
||||||
|
// The reference dialog already confirmed this run, so pre-arm the destructive gate to an exact
|
||||||
|
// match — otherwise the replayed submit re-arms it and silently does nothing until retyped.
|
||||||
|
destructive_confirm_cmd_ = built;
|
||||||
command_search_[0] = '\0';
|
command_search_[0] = '\0';
|
||||||
run_confirm_cmd_ = nullptr;
|
run_confirm_cmd_ = nullptr;
|
||||||
show_commands_popup_ = false;
|
show_commands_popup_ = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user