aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-per.c
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2010-10-17 11:59:10 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2010-10-17 11:59:10 +0000
commit38ba5119cd39c2a576e35e0ecae944aaffa12260 (patch)
tree511ae67ce0280ec60b273234f7ab0f26564faf86 /epan/dissectors/packet-per.c
parent9d253d77ada9c903ba18b8933a83f5c7439648b6 (diff)
downloadwireshark-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.c14
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);