aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ber.c
diff options
context:
space:
mode:
authorPeter Wu <peter@lekensteyn.nl>2016-02-20 15:06:50 +0100
committerPeter Wu <peter@lekensteyn.nl>2016-02-20 15:06:45 +0000
commit55b5b7caf3ec4856838b0416d5a91d3a3ff67ec8 (patch)
treee58335d1ff0b9a5d49f03f5c04dd57967d1713dd /epan/dissectors/packet-ber.c
parentc31425f9ae15067e26ccc6183c206c34713cb256 (diff)
ber: fix buffer overrun when handling empty sets
When a set is empty, only a terminator (ber_sequence_t with NULL func) is present. In that case, do not try to find more values as that will never succeed. Bug: 12106 Change-Id: I26cd4ba84a9580e92d5921592a27c2af17c0bebf Reviewed-on: https://code.wireshark.org/review/14028 Petri-Dish: Peter Wu <peter@lekensteyn.nl> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Diffstat (limited to 'epan/dissectors/packet-ber.c')
-rw-r--r--epan/dissectors/packet-ber.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/epan/dissectors/packet-ber.c b/epan/dissectors/packet-ber.c
index 9bbf3ffc55..81e4d38feb 100644
--- a/epan/dissectors/packet-ber.c
+++ b/epan/dissectors/packet-ber.c
@@ -2594,6 +2594,10 @@ printf("SET dissect_ber_set(%s) entered\n", name);
cset = set; /* reset to the beginning */
set_idx = 0;
+ /* If the set has no values, there is no point in trying again. */
+ if (!cset->func) {
+ break;
+ }
}
if ((first_pass && ((cset->ber_class == ber_class) && (cset->tag == tag))) ||