diff options
author | Stig Bjørlykke <stig@bjorlykke.org> | 2010-10-17 11:59:10 +0000 |
---|---|---|
committer | Stig Bjørlykke <stig@bjorlykke.org> | 2010-10-17 11:59:10 +0000 |
commit | 38ba5119cd39c2a576e35e0ecae944aaffa12260 (patch) | |
tree | 511ae67ce0280ec60b273234f7ab0f26564faf86 /epan/dissectors/packet-per.c | |
parent | 9d253d77ada9c903ba18b8933a83f5c7439648b6 (diff) | |
download | wireshark-38ba5119cd39c2a576e35e0ecae944aaffa12260.tar.gz wireshark-38ba5119cd39c2a576e35e0ecae944aaffa12260.tar.bz2 wireshark-38ba5119cd39c2a576e35e0ecae944aaffa12260.zip |
From Pascal Quantin via bug 5301:
Add expert info when ASN.1 PER constrained integer does not match range.
svn path=/trunk/; revision=34531
Diffstat (limited to 'epan/dissectors/packet-per.c')
-rw-r--r-- | epan/dissectors/packet-per.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/epan/dissectors/packet-per.c b/epan/dissectors/packet-per.c index 08b9781a61..2b05c111db 100644 --- a/epan/dissectors/packet-per.c +++ b/epan/dissectors/packet-per.c @@ -1384,8 +1384,14 @@ DEBUG_ENTRY("dissect_per_constrained_integer"); timeval.secs = val; if (IS_FT_UINT(hfi->type)) { it = proto_tree_add_uint(tree, hf_index, tvb, val_start, val_length, val); + if (val > max) { + expert_add_info_format(actx->pinfo, it, PI_MALFORMED, PI_ERROR, "Constrained integer value %u is out of [%u..%u] range", val, min, max); + } } else if (IS_FT_INT(hfi->type)) { it = proto_tree_add_int(tree, hf_index, tvb, val_start, val_length, val); + if ((gint32)val > (gint32)max) { + expert_add_info_format(actx->pinfo, it, PI_MALFORMED, PI_ERROR, "Constrained integer value %d is out of [%d..%d] range", (gint32)val, (gint32)min, (gint32)max); + } } else if (IS_FT_TIME(hfi->type)) { it = proto_tree_add_time(tree, hf_index, tvb, val_start, val_length, &timeval); } else { @@ -1585,8 +1591,16 @@ DEBUG_ENTRY("dissect_per_constrained_integer_64b"); if (IS_FT_UINT(hfi->type)) { it = proto_tree_add_uint64(tree, hf_index, tvb, val_start, val_length, val); + if (val > max) { + expert_add_info_format(actx->pinfo, it, PI_MALFORMED, PI_ERROR, "Constrained integer value %" G_GINT64_MODIFIER + "u is out of [%" G_GINT64_MODIFIER "u..%" G_GINT64_MODIFIER "u] range", val, min, max); + } } else if (IS_FT_INT(hfi->type)) { it = proto_tree_add_int64(tree, hf_index, tvb, val_start, val_length, val); + if ((gint64)val > (gint64)max) { + expert_add_info_format(actx->pinfo, it, PI_MALFORMED, PI_ERROR, "Constrained integer value %" G_GINT64_MODIFIER + "d is out of [%" G_GINT64_MODIFIER "d..%" G_GINT64_MODIFIER "d] range", (gint64)val, (gint64)min, (gint64)max); + } } else if (IS_FT_TIME(hfi->type)) { timeval.secs = (guint32)val; it = proto_tree_add_time(tree, hf_index, tvb, val_start, val_length, &timeval); |