From 5413953d300b13ed032b618222d95162f2d965e9 Mon Sep 17 00:00:00 2001 From: nicm Date: Fri, 27 Feb 2026 08:25:12 +0000 Subject: [PATCH] Validate -O flags, from Dane Jensen in GitHub issue 4889. --- cmd-choose-tree.c | 7 +++++++ cmd-list-buffers.c | 4 ++++ cmd-list-clients.c | 4 ++++ cmd-list-keys.c | 4 ++++ cmd-list-panes.c | 7 +++++++ cmd-list-sessions.c | 4 ++++ cmd-list-windows.c | 4 ++++ cmd-switch-client.c | 4 ++++ 8 files changed, 38 insertions(+) diff --git a/cmd-choose-tree.c b/cmd-choose-tree.c index a1167af8..186672f4 100644 --- a/cmd-choose-tree.c +++ b/cmd-choose-tree.c @@ -98,6 +98,13 @@ cmd_choose_tree_exec(struct cmd *self, struct cmdq_item *item) struct cmd_find_state *target = cmdq_get_target(item); struct window_pane *wp = target->wp; const struct window_mode *mode; + enum sort_order order; + + order = sort_order_from_string(args_get(args, 'O')); + if (order == SORT_END && args_has(args, 'O')) { + cmdq_error(item, "invalid sort order"); + return (CMD_RETURN_ERROR); + } if (cmd_get_entry(self) == &cmd_choose_buffer_entry) { if (paste_is_empty()) diff --git a/cmd-list-buffers.c b/cmd-list-buffers.c index 6e37a980..347c6934 100644 --- a/cmd-list-buffers.c +++ b/cmd-list-buffers.c @@ -60,6 +60,10 @@ cmd_list_buffers_exec(struct cmd *self, struct cmdq_item *item) filter = args_get(args, 'f'); sort_crit.order = sort_order_from_string(args_get(args, 'O')); + if (sort_crit.order == SORT_END && args_has(args, 'O')) { + cmdq_error(item, "invalid sort order"); + return (CMD_RETURN_ERROR); + } sort_crit.reversed = args_has(args, 'r'); l = sort_get_buffers(&n, &sort_crit); diff --git a/cmd-list-clients.c b/cmd-list-clients.c index 68cf043c..ae235d83 100644 --- a/cmd-list-clients.c +++ b/cmd-list-clients.c @@ -74,6 +74,10 @@ cmd_list_clients_exec(struct cmd *self, struct cmdq_item *item) filter = args_get(args, 'f'); sort_crit.order = sort_order_from_string(args_get(args, 'O')); + if (sort_crit.order == SORT_END && args_has(args, 'O')) { + cmdq_error(item, "invalid sort order"); + return (CMD_RETURN_ERROR); + } sort_crit.reversed = args_has(args, 'r'); l = sort_get_clients(&n, &sort_crit); diff --git a/cmd-list-keys.c b/cmd-list-keys.c index 93d4df7c..6c0fec67 100644 --- a/cmd-list-keys.c +++ b/cmd-list-keys.c @@ -189,6 +189,10 @@ cmd_list_keys_exec(struct cmd *self, struct cmdq_item *item) } sort_crit.order = sort_order_from_string(args_get(args, 'O')); + if (sort_crit.order == SORT_END && args_has(args, 'O')) { + cmdq_error(item, "invalid sort order"); + return (CMD_RETURN_ERROR); + } sort_crit.reversed = args_has(args, 'r'); prefix = cmd_list_keys_get_prefix(args); diff --git a/cmd-list-panes.c b/cmd-list-panes.c index fe7e1a4f..6a670b29 100644 --- a/cmd-list-panes.c +++ b/cmd-list-panes.c @@ -55,6 +55,13 @@ cmd_list_panes_exec(struct cmd *self, struct cmdq_item *item) struct cmd_find_state *target = cmdq_get_target(item); struct session *s = target->s; struct winlink *wl = target->wl; + enum sort_order order; + + order = sort_order_from_string(args_get(args, 'O')); + if (order == SORT_END && args_has(args, 'O')) { + cmdq_error(item, "invalid sort order"); + return (CMD_RETURN_ERROR); + } if (args_has(args, 'a')) cmd_list_panes_server(self, item); diff --git a/cmd-list-sessions.c b/cmd-list-sessions.c index 89fefb5c..79a1ab62 100644 --- a/cmd-list-sessions.c +++ b/cmd-list-sessions.c @@ -66,6 +66,10 @@ cmd_list_sessions_exec(struct cmd *self, struct cmdq_item *item) filter = args_get(args, 'f'); sort_crit.order = sort_order_from_string(args_get(args, 'O')); + if (sort_crit.order == SORT_END && args_has(args, 'O')) { + cmdq_error(item, "invalid sort order"); + return (CMD_RETURN_ERROR); + } sort_crit.reversed = args_has(args, 'r'); l = sort_get_sessions(&n, &sort_crit); diff --git a/cmd-list-windows.c b/cmd-list-windows.c index a7438de0..92797639 100644 --- a/cmd-list-windows.c +++ b/cmd-list-windows.c @@ -73,6 +73,10 @@ cmd_list_windows_exec(struct cmd *self, struct cmdq_item *item) filter = args_get(args, 'f'); sort_crit.order = sort_order_from_string(args_get(args, 'O')); + if (sort_crit.order == SORT_END && args_has(args, 'O')) { + cmdq_error(item, "invalid sort order"); + return (CMD_RETURN_ERROR); + } sort_crit.reversed = args_has(args, 'r'); if (args_has(args, 'a')) { diff --git a/cmd-switch-client.c b/cmd-switch-client.c index 9317d4f3..b0a0d928 100644 --- a/cmd-switch-client.c +++ b/cmd-switch-client.c @@ -97,6 +97,10 @@ cmd_switch_client_exec(struct cmd *self, struct cmdq_item *item) } sort_crit.order = sort_order_from_string(args_get(args, 'O')); + if (sort_crit.order == SORT_END && args_has(args, 'O')) { + cmdq_error(item, "invalid sort order"); + return (CMD_RETURN_ERROR); + } sort_crit.reversed = args_has(args, 'r'); if (args_has(args, 'n')) {