diff options
author | Erika Szelleova <szelleerika@gmail.com> | 2018-06-16 11:20:12 +0200 |
---|---|---|
committer | Guy Harris <guy@alum.mit.edu> | 2018-06-17 21:16:13 +0000 |
commit | df9cd64550616283b10a5a9b6a84a7f525171c05 (patch) | |
tree | c5d26c50f237fead12a77b3915501c61255597c8 /epan/ftypes | |
parent | 21a02e29dee37f25646befd482912cb4be9ed64c (diff) |
character constant in dfilter now must fit into one byte
The value of a string in single quotes in dfilter must fit into one
byte. The parser correctly parsed the beginning of the string,
however it didn't check whether there are more characters to parse.
Bug: 14084
Change-Id: Ifa2d7a31052b2c1020d84c42637b9b7afc57d8c0
Reviewed-on: https://code.wireshark.org/review/28298
Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'epan/ftypes')
-rw-r--r-- | epan/ftypes/ftype-integer.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/epan/ftypes/ftype-integer.c b/epan/ftypes/ftype-integer.c index 48edda2d5f..9c2255eecd 100644 --- a/epan/ftypes/ftype-integer.c +++ b/epan/ftypes/ftype-integer.c @@ -48,7 +48,6 @@ get_sinteger(fvalue_t *fv) return fv->value.sinteger; } - static gboolean parse_charconst(const char *s, unsigned long *valuep, gchar **err_msg) { @@ -176,13 +175,19 @@ parse_charconst(const char *s, unsigned long *valuep, gchar **err_msg) } } else { value = *cp; - cp++; if (!g_ascii_isprint(value)) { if (err_msg != NULL) *err_msg = g_strdup_printf("Non-printable character '\\x%02lx' in character constant.", value); return FALSE; } } + cp++; + if ((*cp != '\'') || (*(cp + 1) != '\0')){ + if (err_msg != NULL) + *err_msg = g_strdup_printf("\"%s\" is too long to be a valid character constant.", s); + return FALSE; + } + *valuep = value; return TRUE; } |