From f92d6e9da3b3cc6153433c9ead05437476ab62c8 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Sun, 26 Jan 2014 08:30:40 +0100 Subject: [PATCH] trigger: do not allow a name starting with "-" --- src/plugins/trigger/trigger-command.c | 10 +++++++++- src/plugins/trigger/trigger.c | 20 +++++++++++++++++--- src/plugins/trigger/trigger.h | 2 +- 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/plugins/trigger/trigger-command.c b/src/plugins/trigger/trigger-command.c index a38ffcc28..eaa16d1de 100644 --- a/src/plugins/trigger/trigger-command.c +++ b/src/plugins/trigger/trigger-command.c @@ -114,6 +114,13 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc, weechat_prefix ("error"), "trigger"); return WEECHAT_RC_OK; } + if (argv[2][0] == '-') + { + weechat_printf (NULL, + _("%s%s: name can not start with \"-\""), + weechat_prefix ("error"), TRIGGER_PLUGIN_NAME); + return WEECHAT_RC_OK; + } type = trigger_search_hook_type (argv[3]); if (type < 0) { @@ -169,7 +176,8 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc, } if (weechat_strcasecmp (argv[3], "name") == 0) { - trigger_rename (ptr_trigger, argv_eol[4]); + if (!trigger_rename (ptr_trigger, argv_eol[4])) + return WEECHAT_RC_OK; } else { diff --git a/src/plugins/trigger/trigger.c b/src/plugins/trigger/trigger.c index 7efa1ace4..dad9373b3 100644 --- a/src/plugins/trigger/trigger.c +++ b/src/plugins/trigger/trigger.c @@ -656,21 +656,33 @@ trigger_new (const char *name, const char *enabled, const char *hook, /* * Renames a trigger. + * + * Returns: + * 1: OK + * 0: error (trigger not renamed) */ -void +int trigger_rename (struct t_trigger *trigger, const char *name) { int length, i; char *option_name; if (!name || !name[0]) - return; + return 0; + + if (name[0] == '-') + { + weechat_printf (NULL, + _("%s%s: name can not start with \"-\""), + weechat_prefix ("error"), TRIGGER_PLUGIN_NAME); + return 0; + } length = strlen (name) + 64; option_name = malloc (length); if (!option_name) - return; + return 0; for (i = 0; i < TRIGGER_NUM_OPTIONS; i++) { @@ -689,6 +701,8 @@ trigger_rename (struct t_trigger *trigger, const char *name) trigger->name = strdup (name); free (option_name); + + return 1; } /* diff --git a/src/plugins/trigger/trigger.h b/src/plugins/trigger/trigger.h index 5ddc81e8c..8b3cffc51 100644 --- a/src/plugins/trigger/trigger.h +++ b/src/plugins/trigger/trigger.h @@ -122,7 +122,7 @@ extern struct t_trigger *trigger_new (const char *name, const char *replace, const char *command, const char *return_code); -extern void trigger_rename (struct t_trigger *trigger, const char *name); +extern int trigger_rename (struct t_trigger *trigger, const char *name); extern void trigger_free (struct t_trigger *trigger); extern void trigger_free_all ();