aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorJeff Morriss <jeff.morriss@ulticom.com>2012-03-27 01:43:20 +0000
committerJeff Morriss <jeff.morriss@ulticom.com>2012-03-27 01:43:20 +0000
commitc13c14429b3eef3967bed814a853345cd30326df (patch)
tree2fc5962d96b88976b30dabc9ce3bb24a2207bbff /epan
parentad5af7cf85140bae71a48f4d6b316b0c4aa7383e (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.c30
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 *