diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2011-06-25 15:21:17 +0000 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2011-06-25 15:21:17 +0000 |
commit | 08c7a1d0f11e84f71a1b5a826ee2b1675fc11c7d (patch) | |
tree | 3ca314b1224402773de7ab4c9f9d8f5445a0a583 /epan/range.c | |
parent | 7491b68a3a5544c6ed9f67d7e59af5e7559dec32 (diff) |
From Tony Trinh via bug 5895:
Add sanity checks in range.c
svn path=/trunk/; revision=37784
Diffstat (limited to 'epan/range.c')
-rw-r--r-- | epan/range.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/epan/range.c b/epan/range.c index ffa1ab11f8..37bc77f284 100644 --- a/epan/range.c +++ b/epan/range.c @@ -107,6 +107,9 @@ range_convert_str_work(range_t **rangep, const gchar *es, guint32 max_value, guint32 tmp; unsigned long val; + if ( (rangep == NULL) || (es == NULL) ) + return CVT_SYNTAX_ERROR; + /* Allocate a range; this has room for one subrange. */ range = g_malloc(RANGE_HDR_SIZE + sizeof (range_admin_t)); range->nranges = 0; @@ -289,6 +292,9 @@ ranges_are_equal(range_t *a, range_t *b) { guint i; + if ( (a == NULL) || (b == NULL) ) + return FALSE; + if (a->nranges != b->nranges) return FALSE; @@ -311,10 +317,12 @@ void range_foreach(range_t *range, void (*callback)(guint32 val)) { guint32 i, j; - - for (i=0; i < range->nranges; i++) { - for (j = range->ranges[i].low; j <= range->ranges[i].high; j++) - callback(j); + + if (range && callback) { + for (i=0; i < range->nranges; i++) { + for (j = range->ranges[i].low; j <= range->ranges[i].high; j++) + callback(j); + } } } @@ -328,15 +336,16 @@ range_convert_range(range_t *range) strbuf=ep_strbuf_new(NULL); - for (i=0; i < range->nranges; i++) { - if (range->ranges[i].low == range->ranges[i].high) { - ep_strbuf_append_printf(strbuf, "%s%u", prepend_comma?",":"", range->ranges[i].low); - } else { - ep_strbuf_append_printf(strbuf, "%s%u-%u", prepend_comma?",":"", range->ranges[i].low, range->ranges[i].high); + if (range) { + for (i=0; i < range->nranges; i++) { + if (range->ranges[i].low == range->ranges[i].high) { + ep_strbuf_append_printf(strbuf, "%s%u", prepend_comma?",":"", range->ranges[i].low); + } else { + ep_strbuf_append_printf(strbuf, "%s%u-%u", prepend_comma?",":"", range->ranges[i].low, range->ranges[i].high); + } + prepend_comma = TRUE; } - prepend_comma = TRUE; } - return strbuf->str; } @@ -347,6 +356,9 @@ range_copy(range_t *src) range_t *dst; size_t range_size; + if (src == NULL) + return NULL; + range_size = RANGE_HDR_SIZE + src->nranges*sizeof (range_admin_t); dst = g_malloc(range_size); memcpy(dst, src, range_size); @@ -358,7 +370,6 @@ range_copy(range_t *src) static void value_is_in_range_check(range_t *range, guint32 val) { - /* Print the result for a given value */ printf("Function : value_is_in_range_check Number %u\t",val); |