aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorStig Bjørlykke <stig@bjorlykke.org>2007-11-23 12:22:22 +0000
committerStig Bjørlykke <stig@bjorlykke.org>2007-11-23 12:22:22 +0000
commit5e1ffde52007119e6b19a4de1ae7b91fd76d7e90 (patch)
tree673285219fa0a3c6396e649cc19d723222d9f9d9 /epan
parent54e08d8e3d0ff1850d6c56a3624ed363b4de3a0b (diff)
Moved check for empty choice to make it work correctly.
svn path=/trunk/; revision=23548
Diffstat (limited to 'epan')
-rw-r--r--epan/dissectors/packet-ber.c28
1 files changed, 14 insertions, 14 deletions
diff --git a/epan/dissectors/packet-ber.c b/epan/dissectors/packet-ber.c
index cb68106b60..120534cabd 100644
--- a/epan/dissectors/packet-ber.c
+++ b/epan/dissectors/packet-ber.c
@@ -2560,6 +2560,13 @@ printf("CHOICE dissect_ber_choice(%s) entered len:%d\n",name,tvb_length_remainin
#endif
start_offset=offset;
+ if(tvb_length_remaining(tvb,offset) == 0) {
+ item = proto_tree_add_text(parent_tree, tvb, offset, 0, "BER Error: Empty choice was found");
+ proto_item_set_expert_flags(item, PI_MALFORMED, PI_WARN);
+ expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_WARN, "BER Error: Empty choice was found");
+ return offset;
+ }
+
/* read header and len for choice field */
offset=get_ber_identifier(tvb, offset, &class, &pc, &tag);
offset=get_ber_length(tvb, offset, &len, &ind);
@@ -2637,13 +2644,6 @@ printf("CHOICE testing potential subdissector class[%p]:%d:(expected)%d tag:%d:
}
}
- if(length == 0) {
- item = proto_tree_add_text(tree, tvb, hoffset, 0, "BER Error: Empty choice field was found");
- proto_item_set_expert_flags(item, PI_MALFORMED, PI_WARN);
- expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_WARN, "BER Error: Empty choice field was found");
- return hoffset;
- }
-
length_remaining=tvb_length_remaining(tvb, hoffset);
if(length_remaining>length)
length_remaining=length;
@@ -2794,6 +2794,13 @@ printf("CHOICE dissect_ber_old_choice(%s) entered len:%d\n",name,tvb_length_rema
#endif
start_offset=offset;
+ if(tvb_length_remaining(tvb,offset) == 0) {
+ item = proto_tree_add_text(parent_tree, tvb, offset, 0, "BER Error: Empty choice was found");
+ proto_item_set_expert_flags(item, PI_MALFORMED, PI_WARN);
+ expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_WARN, "BER Error: Empty choice was found");
+ return offset;
+ }
+
/* read header and len for choice field */
offset=get_ber_identifier(tvb, offset, &class, &pc, &tag);
offset=get_ber_length(tvb, offset, &len, &ind);
@@ -2871,13 +2878,6 @@ printf("CHOICE testing potential subdissector class[%p]:%d:(expected)%d tag:%d:
}
}
- if(length == 0) {
- item = proto_tree_add_text(tree, tvb, hoffset, 0, "BER Error: Empty choice field was found");
- proto_item_set_expert_flags(item, PI_MALFORMED, PI_WARN);
- expert_add_info_format(actx->pinfo, item, PI_MALFORMED, PI_WARN, "BER Error: Empty choice field was found");
- return hoffset;
- }
-
length_remaining=tvb_length_remaining(tvb, hoffset);
if(length_remaining>length)
length_remaining=length;