From 5ca712fc606b1839de5bcbe80833fa9d3a17332d Mon Sep 17 00:00:00 2001 From: sabetts Date: Fri, 1 Feb 2002 09:17:35 +0000 Subject: * src/actions.c (command): bail out if alias recursion gets too deep. * src/conf.h (MAX_ALIAS_RECURSIVE_DEPTH): new define * src/bar.c (bar_x): update to work with all X11 gravity values. (bar_y): likewise * src/actions.c (cmd_defbargravity): Rename from cmd_defbarloc. Dependant code updated. (cmd_defbargravity): accept all gravity arguments. --- src/actions.c | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) (limited to 'src/actions.c') diff --git a/src/actions.c b/src/actions.c index e0d4188..bbb50b9 100644 --- a/src/actions.c +++ b/src/actions.c @@ -85,7 +85,7 @@ static user_command user_commands[] = /*@end (tag required for genrpbindings) */ /* Commands to set default behavior. */ - {"defbarloc", cmd_defbarloc, arg_STRING}, + {"defbargravity", cmd_defbargravity, arg_STRING}, {"msgwait", cmd_msgwait, arg_STRING}, {"defborder", cmd_defborder, arg_STRING}, {"deffont", cmd_deffont, arg_STRING}, @@ -840,6 +840,8 @@ cmd_version (int interactive, void *data) char * command (int interactive, char *data) { + /* This static counter is used to exit from recursive alias calls. */ + static int alias_recursive_depth = 0; char *result = NULL; char *cmd, *rest; char *input; @@ -894,7 +896,12 @@ command (int interactive, char *data) if (rest != NULL) sbuf_printf_concat (s, " %s", rest); - result = command (interactive, sbuf_get (s)); + alias_recursive_depth++; + if (alias_recursive_depth >= MAX_ALIAS_RECURSIVE_DEPTH) + message (" command: alias recursion has exceeded maximum depth "); + else + result = command (interactive, sbuf_get (s)); + alias_recursive_depth--; sbuf_free (s); goto done; @@ -1695,37 +1702,27 @@ cmd_msgwait (int interactive, void *data) } char * -cmd_defbarloc (int interactive, void *data) +cmd_defbargravity (int interactive, void *data) { - int loc; + int gravity; if (data == NULL && !interactive) return xstrdup (wingravity_to_string (defaults.bar_location)); if (data == NULL) { - message (" defbarloc: One argument required "); + message (" defbargravity: One argument required "); return NULL; } - if ((loc = parse_wingravity (data)) < 0) + if ((gravity = parse_wingravity (data)) < 0) { - message (" defbarloc: Bad location "); + message (" defbargravity: Bad location "); return NULL; } - - switch (loc) + else { - case NorthWestGravity: - case NorthEastGravity: - case SouthWestGravity: - case SouthEastGravity: - defaults.bar_location = loc; - break; - - default: - message (" defbarloc: Bad location "); - break; + defaults.bar_location = gravity; } return NULL; -- cgit v1.2.3