diff options
author | Jeff Morriss <jeff.morriss@ulticom.com> | 2012-03-27 01:43:20 +0000 |
---|---|---|
committer | Jeff Morriss <jeff.morriss@ulticom.com> | 2012-03-27 01:43:20 +0000 |
commit | c13c14429b3eef3967bed814a853345cd30326df (patch) | |
tree | 2fc5962d96b88976b30dabc9ce3bb24a2207bbff /epan | |
parent | ad5af7cf85140bae71a48f4d6b316b0c4aa7383e (diff) |
Fix https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=6982 :
Check the user-provided custom header string for invalid characters before
trying to register it in an hf; registering invalid characters in an hf will
lead to an assertion.
svn path=/trunk/; revision=41787
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-http.c | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/epan/dissectors/packet-http.c b/epan/dissectors/packet-http.c index 40d6288b41..dea23230f7 100644 --- a/epan/dissectors/packet-http.c +++ b/epan/dissectors/packet-http.c @@ -131,20 +131,32 @@ static guint num_header_fields = 0; static GHashTable* header_fields_hash = NULL; static void -header_fields_update_cb(void* r, const char** err) +header_fields_update_cb(void *r, const char **err) { - header_field_t* rec = r; + header_field_t *rec = r; + char c; if (rec->header_name == NULL) { *err = ep_strdup_printf("Header name can't be empty"); - } else { - g_strstrip(rec->header_name); - if (rec->header_name[0] != 0) { - *err = NULL; - } else { - *err = ep_strdup_printf("Header name can't be empty"); - } + return; } + + g_strstrip(rec->header_name); + if (rec->header_name[0] == 0) { + *err = ep_strdup_printf("Header name can't be empty"); + return; + } + + /* Check for invalid characters (to avoid asserting out when + * registering the field). + */ + c = proto_check_field_name(rec->header_name); + if (c) { + *err = ep_strdup_printf("Header name can't contain '%c'", c); + return; + } + + *err = NULL; } static void * |