From d3bde90f9ec4ef80f7130de0cc9b802c9537a700 Mon Sep 17 00:00:00 2001 From: keis Date: Mon, 24 Jan 2011 19:49:04 +0100 Subject: assert that NAME arguments are valid names --- src/events.c | 7 ++++++- src/uzbl-core.c | 9 +++++++-- src/uzbl-core.h | 1 + 3 files changed, 14 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/events.c b/src/events.c index e8c42a3..174ff75 100644 --- a/src/events.c +++ b/src/events.c @@ -145,6 +145,7 @@ vsend_event(int type, const gchar *custom_event, va_list vargs) { if (type >= LAST_EVENT) return; const gchar *event = custom_event ? custom_event : event_table[type]; + char* str; int next; g_string_printf (event_message, "EVENT [%s] %s", @@ -162,9 +163,13 @@ vsend_event(int type, const gchar *custom_event, va_list vargs) { g_string_append_c (event_message, '\''); break; case TYPE_FORMATTEDSTR: - case TYPE_NAME: g_string_append (event_message, va_arg (vargs, char*)); break; + case TYPE_NAME: + str = va_arg (vargs, char*); + g_assert (valid_name (str)); + g_string_append (event_message, str); + break; case TYPE_FLOAT: // ‘float’ is promoted to ‘double’ when passed through ‘...’ g_string_append_printf (event_message, "%.2f", va_arg (vargs, double)); diff --git a/src/uzbl-core.c b/src/uzbl-core.c index ca936c1..6809441 100644 --- a/src/uzbl-core.c +++ b/src/uzbl-core.c @@ -1216,12 +1216,17 @@ move_statusbar() { return; } +gboolean +valid_name(const gchar* name) { + char *invalid_chars = "\t^°!\"§$%&/()=?'`'+~*'#-:,;@<>| \\{}[]¹²³¼½"; + return strpbrk(name, invalid_chars) == NULL; +} + gboolean set_var_value(const gchar *name, gchar *val) { uzbl_cmdprop *c = NULL; char *endp = NULL; char *buf = NULL; - char *invalid_chars = "\t^°!\"§$%&/()=?'`'+~*'#-:,;@<>| \\{}[]¹²³¼½"; if( (c = g_hash_table_lookup(uzbl.comm.proto_var, name)) ) { if(!c->writeable) return FALSE; @@ -1261,7 +1266,7 @@ set_var_value(const gchar *name, gchar *val) { if(c->func) c->func(); } else { /* check wether name violates our naming scheme */ - if(strpbrk(name, invalid_chars)) { + if(!valid_name(name)) { if (uzbl.state.verbose) printf("Invalid variable name: %s\n", name); return FALSE; diff --git a/src/uzbl-core.h b/src/uzbl-core.h index 9e72511..3240fc6 100644 --- a/src/uzbl-core.h +++ b/src/uzbl-core.h @@ -317,6 +317,7 @@ void handle_authentication (SoupSession *session, void handle_cookies (SoupSession *session, SoupMessage *msg, gpointer user_data); +gboolean valid_name(const gchar* name); void set_var(WebKitWebView *page, GArray *argv, GString *result); void act_dump_config(); void act_dump_config_as_events(); -- cgit v1.2.3