2198 lines
88 KiB
Diff
2198 lines
88 KiB
Diff
From 5e949867190ab33b36797a2c8a58a7af6f0476af Mon Sep 17 00:00:00 2001
|
|
From: Gerald Combs <gerald@wireshark.org>
|
|
Date: Sun, 31 Dec 2023 15:06:40 -0800
|
|
Subject: [PATCH] asn2wrs: Add recursion checks
|
|
|
|
Origin: https://gitlab.com/wireshark/wireshark/-/merge_requests/13869
|
|
|
|
Add a recursion depth check whenever we have cyclic dependencies.
|
|
Regenerate our dissectors.
|
|
|
|
Fixes #19501
|
|
|
|
(cherry picked from commit 8f797db63ca44875a07d0d8a5d298a79d09b44ec)
|
|
|
|
Conflicts:
|
|
epan/dissectors/asn1/x509sat/packet-x509sat-template.c
|
|
epan/dissectors/packet-cmip.c
|
|
epan/dissectors/packet-cmp.c
|
|
epan/dissectors/packet-dap.c
|
|
epan/dissectors/packet-disp.c
|
|
epan/dissectors/packet-e2ap.c
|
|
epan/dissectors/packet-glow.c
|
|
epan/dissectors/packet-goose.c
|
|
epan/dissectors/packet-h225.c
|
|
epan/dissectors/packet-h245.c
|
|
epan/dissectors/packet-h248.c
|
|
epan/dissectors/packet-ieee1609dot2.c
|
|
epan/dissectors/packet-ldap.c
|
|
epan/dissectors/packet-mms.c
|
|
epan/dissectors/packet-p22.c
|
|
epan/dissectors/packet-p7.c
|
|
epan/dissectors/packet-x509if.c
|
|
epan/dissectors/packet-x509sat.c
|
|
epan/dissectors/packet-z3950.c
|
|
---
|
|
.../asn1/cmip/packet-cmip-template.c | 1 +
|
|
.../dissectors/asn1/cmp/packet-cmp-template.c | 1 +
|
|
.../dissectors/asn1/dap/packet-dap-template.c | 1 +
|
|
.../asn1/disp/packet-disp-template.c | 1 +
|
|
.../asn1/glow/packet-glow-template.c | 1 +
|
|
.../asn1/goose/packet-goose-template.c | 1 +
|
|
.../asn1/h245/packet-h245-template.c | 1 +
|
|
.../asn1/h248/packet-h248-template.c | 1 +
|
|
.../asn1/ldap/packet-ldap-template.c | 1 +
|
|
.../dissectors/asn1/p22/packet-p22-template.c | 1 +
|
|
epan/dissectors/asn1/p7/packet-p7-template.c | 1 +
|
|
.../asn1/x509if/packet-x509if-template.c | 1 +
|
|
.../asn1/x509sat/packet-x509sat-template.c | 1 +
|
|
epan/dissectors/packet-cmip.c | 24 +++++---
|
|
epan/dissectors/packet-cmp.c | 20 +++++--
|
|
epan/dissectors/packet-dap.c | 44 ++++++++++++---
|
|
epan/dissectors/packet-disp.c | 26 +++++++--
|
|
epan/dissectors/packet-glow.c | 30 ++++++++--
|
|
epan/dissectors/packet-goose.c | 18 ++++--
|
|
epan/dissectors/packet-h225.c | 13 +++++
|
|
epan/dissectors/packet-h245.c | 56 +++++++++++++++++--
|
|
epan/dissectors/packet-h248.c | 18 ++++--
|
|
epan/dissectors/packet-ieee1609dot2.c | 7 +++
|
|
epan/dissectors/packet-its.c | 17 ++++--
|
|
epan/dissectors/packet-ldap.c | 20 +++++--
|
|
epan/dissectors/packet-mms.c | 25 +++++++++
|
|
epan/dissectors/packet-p22.c | 40 ++++++++++---
|
|
epan/dissectors/packet-p7.c | 28 ++++++----
|
|
epan/dissectors/packet-sv.c | 10 ++--
|
|
epan/dissectors/packet-x509if.c | 32 +++++++++--
|
|
epan/dissectors/packet-x509sat.c | 22 +++++---
|
|
epan/dissectors/packet-z3950.c | 19 +++++++
|
|
tools/asn2wrs.py | 36 ++++++++++++
|
|
33 files changed, 422 insertions(+), 96 deletions(-)
|
|
|
|
diff --git a/epan/dissectors/asn1/cmip/packet-cmip-template.c b/epan/dissectors/asn1/cmip/packet-cmip-template.c
|
|
index dbac6c6b546..53caeb034eb 100644
|
|
--- a/epan/dissectors/asn1/cmip/packet-cmip-template.c
|
|
+++ b/epan/dissectors/asn1/cmip/packet-cmip-template.c
|
|
@@ -15,6 +15,7 @@
|
|
#include <epan/expert.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
diff --git a/epan/dissectors/asn1/cmp/packet-cmp-template.c b/epan/dissectors/asn1/cmp/packet-cmp-template.c
|
|
index 21e3b27ed44..d9c02452260 100644
|
|
--- a/epan/dissectors/asn1/cmp/packet-cmp-template.c
|
|
+++ b/epan/dissectors/asn1/cmp/packet-cmp-template.c
|
|
@@ -18,6 +18,7 @@
|
|
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include "packet-ber.h"
|
|
#include "packet-cmp.h"
|
|
#include "packet-crmf.h"
|
|
diff --git a/epan/dissectors/asn1/dap/packet-dap-template.c b/epan/dissectors/asn1/dap/packet-dap-template.c
|
|
index c5884becd66..8c14a03ba36 100644
|
|
--- a/epan/dissectors/asn1/dap/packet-dap-template.c
|
|
+++ b/epan/dissectors/asn1/dap/packet-dap-template.c
|
|
@@ -16,6 +16,7 @@
|
|
#include <epan/expert.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
diff --git a/epan/dissectors/asn1/disp/packet-disp-template.c b/epan/dissectors/asn1/disp/packet-disp-template.c
|
|
index a28aa4e8e3d..b76959de22a 100644
|
|
--- a/epan/dissectors/asn1/disp/packet-disp-template.c
|
|
+++ b/epan/dissectors/asn1/disp/packet-disp-template.c
|
|
@@ -16,6 +16,7 @@
|
|
#include <epan/prefs.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
diff --git a/epan/dissectors/asn1/glow/packet-glow-template.c b/epan/dissectors/asn1/glow/packet-glow-template.c
|
|
index af6f16fb209..088d3c53332 100644
|
|
--- a/epan/dissectors/asn1/glow/packet-glow-template.c
|
|
+++ b/epan/dissectors/asn1/glow/packet-glow-template.c
|
|
@@ -13,6 +13,7 @@
|
|
# include "config.h"
|
|
|
|
#include <epan/packet.h>
|
|
+#include <epan/proto_data.h>
|
|
#include "packet-ber.h"
|
|
|
|
#define PNAME "Glow"
|
|
diff --git a/epan/dissectors/asn1/goose/packet-goose-template.c b/epan/dissectors/asn1/goose/packet-goose-template.c
|
|
index 142a272ee02..9a78db4c256 100644
|
|
--- a/epan/dissectors/asn1/goose/packet-goose-template.c
|
|
+++ b/epan/dissectors/asn1/goose/packet-goose-template.c
|
|
@@ -16,6 +16,7 @@
|
|
|
|
#include <epan/packet.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/etypes.h>
|
|
#include <epan/expert.h>
|
|
|
|
diff --git a/epan/dissectors/asn1/h245/packet-h245-template.c b/epan/dissectors/asn1/h245/packet-h245-template.c
|
|
index b71edc7288d..1ee778cf9a0 100644
|
|
--- a/epan/dissectors/asn1/h245/packet-h245-template.c
|
|
+++ b/epan/dissectors/asn1/h245/packet-h245-template.c
|
|
@@ -28,6 +28,7 @@
|
|
#include <epan/t35.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/tap.h>
|
|
#include <wsutil/pint.h>
|
|
#include "packet-tpkt.h"
|
|
diff --git a/epan/dissectors/asn1/h248/packet-h248-template.c b/epan/dissectors/asn1/h248/packet-h248-template.c
|
|
index af1a2ba83cc..514c899396d 100644
|
|
--- a/epan/dissectors/asn1/h248/packet-h248-template.c
|
|
+++ b/epan/dissectors/asn1/h248/packet-h248-template.c
|
|
@@ -18,6 +18,7 @@
|
|
#include <epan/exceptions.h>
|
|
#include <epan/tap.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/prefs.h>
|
|
#include <epan/exported_pdu.h>
|
|
#include <epan/address_types.h>
|
|
diff --git a/epan/dissectors/asn1/ldap/packet-ldap-template.c b/epan/dissectors/asn1/ldap/packet-ldap-template.c
|
|
index b9313819996..0021c5641e0 100644
|
|
--- a/epan/dissectors/asn1/ldap/packet-ldap-template.c
|
|
+++ b/epan/dissectors/asn1/ldap/packet-ldap-template.c
|
|
@@ -80,6 +80,7 @@
|
|
#include <epan/strutil.h>
|
|
#include <epan/show_exception.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/expert.h>
|
|
#include <epan/uat.h>
|
|
#include <wsutil/str_util.h>
|
|
diff --git a/epan/dissectors/asn1/p22/packet-p22-template.c b/epan/dissectors/asn1/p22/packet-p22-template.c
|
|
index f0cf69afbda..fe7d4d2ddee 100644
|
|
--- a/epan/dissectors/asn1/p22/packet-p22-template.c
|
|
+++ b/epan/dissectors/asn1/p22/packet-p22-template.c
|
|
@@ -14,6 +14,7 @@
|
|
#include <epan/packet.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
diff --git a/epan/dissectors/asn1/p7/packet-p7-template.c b/epan/dissectors/asn1/p7/packet-p7-template.c
|
|
index 4df623bac03..621aa9b0392 100644
|
|
--- a/epan/dissectors/asn1/p7/packet-p7-template.c
|
|
+++ b/epan/dissectors/asn1/p7/packet-p7-template.c
|
|
@@ -15,6 +15,7 @@
|
|
#include <epan/prefs.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
diff --git a/epan/dissectors/asn1/x509if/packet-x509if-template.c b/epan/dissectors/asn1/x509if/packet-x509if-template.c
|
|
index cc75f93a7bc..10de0ec8eb3 100644
|
|
--- a/epan/dissectors/asn1/x509if/packet-x509if-template.c
|
|
+++ b/epan/dissectors/asn1/x509if/packet-x509if-template.c
|
|
@@ -14,6 +14,7 @@
|
|
#include <epan/packet.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/strutil.h>
|
|
|
|
#include "packet-ber.h"
|
|
diff --git a/epan/dissectors/asn1/x509sat/packet-x509sat-template.c b/epan/dissectors/asn1/x509sat/packet-x509sat-template.c
|
|
index 1166e33ba48..d2640228a5c 100644
|
|
--- a/epan/dissectors/asn1/x509sat/packet-x509sat-template.c
|
|
+++ b/epan/dissectors/asn1/x509sat/packet-x509sat-template.c
|
|
@@ -14,6 +14,7 @@
|
|
#include <epan/packet.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-p1.h"
|
|
diff --git a/epan/dissectors/packet-cmip.c b/epan/dissectors/packet-cmip.c
|
|
index 56277dc8404..eeb8deeb027 100644
|
|
--- a/epan/dissectors/packet-cmip.c
|
|
+++ b/epan/dissectors/packet-cmip.c
|
|
@@ -23,6 +23,7 @@
|
|
#include <epan/expert.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
@@ -328,7 +329,7 @@ static int hf_cmip_T_daysOfWeek_friday = -1;
|
|
static int hf_cmip_T_daysOfWeek_saturday = -1;
|
|
|
|
/*--- End of included file: packet-cmip-hf.c ---*/
|
|
-#line 43 "./asn1/cmip/packet-cmip-template.c"
|
|
+#line 44 "./asn1/cmip/packet-cmip-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_cmip = -1;
|
|
@@ -458,7 +459,7 @@ static gint ett_cmip_T_modificationList = -1;
|
|
static gint ett_cmip_T_modificationList_item = -1;
|
|
|
|
/*--- End of included file: packet-cmip-ett.c ---*/
|
|
-#line 47 "./asn1/cmip/packet-cmip-template.c"
|
|
+#line 48 "./asn1/cmip/packet-cmip-template.c"
|
|
|
|
static expert_field ei_wrong_spdu_type = EI_INIT;
|
|
|
|
@@ -521,7 +522,7 @@ static const value_string cmip_error_code_vals[] = {
|
|
|
|
|
|
/*--- End of included file: packet-cmip-table.c ---*/
|
|
-#line 58 "./asn1/cmip/packet-cmip-template.c"
|
|
+#line 59 "./asn1/cmip/packet-cmip-template.c"
|
|
|
|
static int opcode_type;
|
|
#define OPCODE_INVOKE 1
|
|
@@ -620,7 +621,7 @@ static const char *object_identifier_id;
|
|
#define noInvokeId NULL
|
|
|
|
/*--- End of included file: packet-cmip-val.h ---*/
|
|
-#line 68 "./asn1/cmip/packet-cmip-template.c"
|
|
+#line 69 "./asn1/cmip/packet-cmip-template.c"
|
|
|
|
/*--- Included file: packet-cmip-fn.c ---*/
|
|
#line 1 "./asn1/cmip/packet-cmip-fn.c"
|
|
@@ -631,6 +632,7 @@ static const char *object_identifier_id;
|
|
static int dissect_cmip_CMISFilter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -1050,10 +1052,16 @@ static const ber_choice_t CMISFilter_choice[] = {
|
|
|
|
static int
|
|
dissect_cmip_CMISFilter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
CMISFilter_choice, hf_index, ett_cmip_CMISFilter,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -4454,7 +4462,7 @@ static int dissect_WeekMask_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto
|
|
|
|
|
|
/*--- End of included file: packet-cmip-fn.c ---*/
|
|
-#line 69 "./asn1/cmip/packet-cmip-template.c"
|
|
+#line 70 "./asn1/cmip/packet-cmip-template.c"
|
|
|
|
|
|
|
|
@@ -5635,7 +5643,7 @@ void proto_register_cmip(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-cmip-hfarr.c ---*/
|
|
-#line 145 "./asn1/cmip/packet-cmip-template.c"
|
|
+#line 146 "./asn1/cmip/packet-cmip-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -5767,7 +5775,7 @@ void proto_register_cmip(void) {
|
|
&ett_cmip_T_modificationList_item,
|
|
|
|
/*--- End of included file: packet-cmip-ettarr.c ---*/
|
|
-#line 151 "./asn1/cmip/packet-cmip-template.c"
|
|
+#line 152 "./asn1/cmip/packet-cmip-template.c"
|
|
};
|
|
|
|
static ei_register_info ei[] = {
|
|
@@ -5862,7 +5870,7 @@ void proto_register_cmip(void) {
|
|
|
|
|
|
/*--- End of included file: packet-cmip-dis-tab.c ---*/
|
|
-#line 170 "./asn1/cmip/packet-cmip-template.c"
|
|
+#line 171 "./asn1/cmip/packet-cmip-template.c"
|
|
oid_add_from_string("discriminatorId(1)","2.9.3.2.7.1");
|
|
|
|
attribute_id_dissector_table = register_dissector_table("cmip.attribute_id", "CMIP Attribute Id", proto_cmip, FT_UINT32, BASE_DEC);
|
|
diff --git a/epan/dissectors/packet-cmp.c b/epan/dissectors/packet-cmp.c
|
|
index 6f6febdaf51..f6b3ac3fb18 100644
|
|
--- a/epan/dissectors/packet-cmp.c
|
|
+++ b/epan/dissectors/packet-cmp.c
|
|
@@ -26,6 +26,7 @@
|
|
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include "packet-ber.h"
|
|
#include "packet-cmp.h"
|
|
#include "packet-crmf.h"
|
|
@@ -224,7 +225,7 @@ static int hf_cmp_PKIFailureInfo_systemFailure = -1;
|
|
static int hf_cmp_PKIFailureInfo_duplicateCertReq = -1;
|
|
|
|
/*--- End of included file: packet-cmp-hf.c ---*/
|
|
-#line 56 "./asn1/cmp/packet-cmp-template.c"
|
|
+#line 57 "./asn1/cmp/packet-cmp-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_cmp = -1;
|
|
@@ -280,7 +281,7 @@ static gint ett_cmp_PollRepContent = -1;
|
|
static gint ett_cmp_PollRepContent_item = -1;
|
|
|
|
/*--- End of included file: packet-cmp-ett.c ---*/
|
|
-#line 60 "./asn1/cmp/packet-cmp-template.c"
|
|
+#line 61 "./asn1/cmp/packet-cmp-template.c"
|
|
|
|
/*--- Included file: packet-cmp-fn.c ---*/
|
|
#line 1 "./asn1/cmp/packet-cmp-fn.c"
|
|
@@ -290,6 +291,7 @@ static gint ett_cmp_PollRepContent_item = -1;
|
|
/*int dissect_cmp_PKIMessage(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);*/
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
static const value_string cmp_CMPCertificate_vals[] = {
|
|
{ 0, "x509v3PKCert" },
|
|
@@ -1106,9 +1108,15 @@ static const ber_sequence_t PKIMessage_sequence[] = {
|
|
|
|
int
|
|
dissect_cmp_PKIMessage(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 5;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
PKIMessage_sequence, hf_index, ett_cmp_PKIMessage);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1463,7 +1471,7 @@ static int dissect_SuppLangTagsValue_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _
|
|
|
|
|
|
/*--- End of included file: packet-cmp-fn.c ---*/
|
|
-#line 61 "./asn1/cmp/packet-cmp-template.c"
|
|
+#line 62 "./asn1/cmp/packet-cmp-template.c"
|
|
|
|
static int
|
|
dissect_cmp_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
|
|
@@ -2342,7 +2350,7 @@ void proto_register_cmp(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-cmp-hfarr.c ---*/
|
|
-#line 303 "./asn1/cmp/packet-cmp-template.c"
|
|
+#line 304 "./asn1/cmp/packet-cmp-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -2400,7 +2408,7 @@ void proto_register_cmp(void) {
|
|
&ett_cmp_PollRepContent_item,
|
|
|
|
/*--- End of included file: packet-cmp-ettarr.c ---*/
|
|
-#line 309 "./asn1/cmp/packet-cmp-template.c"
|
|
+#line 310 "./asn1/cmp/packet-cmp-template.c"
|
|
};
|
|
module_t *cmp_module;
|
|
|
|
@@ -2487,7 +2495,7 @@ void proto_reg_handoff_cmp(void) {
|
|
|
|
|
|
/*--- End of included file: packet-cmp-dis-tab.c ---*/
|
|
-#line 374 "./asn1/cmp/packet-cmp-template.c"
|
|
+#line 375 "./asn1/cmp/packet-cmp-template.c"
|
|
inited = TRUE;
|
|
}
|
|
|
|
diff --git a/epan/dissectors/packet-dap.c b/epan/dissectors/packet-dap.c
|
|
index af21d0f31d3..e2e2ec8c81c 100644
|
|
--- a/epan/dissectors/packet-dap.c
|
|
+++ b/epan/dissectors/packet-dap.c
|
|
@@ -24,6 +24,7 @@
|
|
#include <epan/expert.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
@@ -463,7 +464,7 @@ static int hf_dap_SearchControlOptions_separateFamilyMembers = -1;
|
|
static int hf_dap_SearchControlOptions_searchFamily = -1;
|
|
|
|
/*--- End of included file: packet-dap-hf.c ---*/
|
|
-#line 49 "./asn1/dap/packet-dap-template.c"
|
|
+#line 50 "./asn1/dap/packet-dap-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_dap = -1;
|
|
@@ -642,7 +643,7 @@ static gint ett_dap_UpdateError = -1;
|
|
static gint ett_dap_T_signedUpdateError = -1;
|
|
|
|
/*--- End of included file: packet-dap-ett.c ---*/
|
|
-#line 53 "./asn1/dap/packet-dap-template.c"
|
|
+#line 54 "./asn1/dap/packet-dap-template.c"
|
|
|
|
static expert_field ei_dap_anonymous = EI_INIT;
|
|
|
|
@@ -669,7 +670,7 @@ static expert_field ei_dap_anonymous = EI_INIT;
|
|
#define id_errcode_dsaReferral 9
|
|
|
|
/*--- End of included file: packet-dap-val.h ---*/
|
|
-#line 57 "./asn1/dap/packet-dap-template.c"
|
|
+#line 58 "./asn1/dap/packet-dap-template.c"
|
|
|
|
|
|
/*--- Included file: packet-dap-table.c ---*/
|
|
@@ -707,7 +708,7 @@ static const value_string dap_err_code_string_vals[] = {
|
|
|
|
|
|
/*--- End of included file: packet-dap-table.c ---*/
|
|
-#line 59 "./asn1/dap/packet-dap-template.c"
|
|
+#line 60 "./asn1/dap/packet-dap-template.c"
|
|
|
|
|
|
/*--- Included file: packet-dap-fn.c ---*/
|
|
@@ -730,6 +731,7 @@ static int dissect_dap_ListResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _
|
|
static int dissect_dap_SearchResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
const value_string dap_FamilyGrouping_vals[] = {
|
|
{ 1, "entryOnly" },
|
|
@@ -1294,9 +1296,15 @@ static const ber_sequence_t FamilyEntries_sequence[] = {
|
|
|
|
static int
|
|
dissect_dap_FamilyEntries(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 5;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
FamilyEntries_sequence, hf_index, ett_dap_FamilyEntries);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1492,10 +1500,16 @@ static const ber_choice_t Filter_choice[] = {
|
|
|
|
int
|
|
dissect_dap_Filter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
Filter_choice, hf_index, ett_dap_Filter,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -2948,10 +2962,16 @@ static const ber_choice_t ListResultData_choice[] = {
|
|
|
|
static int
|
|
dissect_dap_ListResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
ListResultData_choice, hf_index, ett_dap_ListResultData,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -3333,10 +3353,16 @@ static const ber_choice_t SearchResultData_choice[] = {
|
|
|
|
static int
|
|
dissect_dap_SearchResultData(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
SearchResultData_choice, hf_index, ett_dap_SearchResultData,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -4754,7 +4780,7 @@ static int dissect_UpdateError_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pr
|
|
|
|
|
|
/*--- End of included file: packet-dap-fn.c ---*/
|
|
-#line 61 "./asn1/dap/packet-dap-template.c"
|
|
+#line 62 "./asn1/dap/packet-dap-template.c"
|
|
|
|
|
|
/*--- Included file: packet-dap-table11.c ---*/
|
|
@@ -4786,7 +4812,7 @@ static const ros_opr_t dap_opr_tab[] = {
|
|
|
|
|
|
/*--- End of included file: packet-dap-table11.c ---*/
|
|
-#line 63 "./asn1/dap/packet-dap-template.c"
|
|
+#line 64 "./asn1/dap/packet-dap-template.c"
|
|
|
|
/*--- Included file: packet-dap-table21.c ---*/
|
|
#line 1 "./asn1/dap/packet-dap-table21.c"
|
|
@@ -4815,7 +4841,7 @@ static const ros_err_t dap_err_tab[] = {
|
|
|
|
|
|
/*--- End of included file: packet-dap-table21.c ---*/
|
|
-#line 64 "./asn1/dap/packet-dap-template.c"
|
|
+#line 65 "./asn1/dap/packet-dap-template.c"
|
|
|
|
static const ros_info_t dap_ros_info = {
|
|
"DAP",
|
|
@@ -6455,7 +6481,7 @@ void proto_register_dap(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-dap-hfarr.c ---*/
|
|
-#line 83 "./asn1/dap/packet-dap-template.c"
|
|
+#line 84 "./asn1/dap/packet-dap-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -6636,7 +6662,7 @@ void proto_register_dap(void) {
|
|
&ett_dap_T_signedUpdateError,
|
|
|
|
/*--- End of included file: packet-dap-ettarr.c ---*/
|
|
-#line 89 "./asn1/dap/packet-dap-template.c"
|
|
+#line 90 "./asn1/dap/packet-dap-template.c"
|
|
};
|
|
|
|
static ei_register_info ei[] = {
|
|
diff --git a/epan/dissectors/packet-disp.c b/epan/dissectors/packet-disp.c
|
|
index 31ace80695f..e3c52719db6 100644
|
|
--- a/epan/dissectors/packet-disp.c
|
|
+++ b/epan/dissectors/packet-disp.c
|
|
@@ -24,6 +24,7 @@
|
|
#include <epan/prefs.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
@@ -165,7 +166,7 @@ static int hf_disp_signedShadowError = -1; /* T_signedShadowError */
|
|
static int hf_disp_shadowError = -1; /* ShadowErrorData */
|
|
|
|
/*--- End of included file: packet-disp-hf.c ---*/
|
|
-#line 49 "./asn1/disp/packet-disp-template.c"
|
|
+#line 50 "./asn1/disp/packet-disp-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_disp = -1;
|
|
@@ -228,7 +229,7 @@ static gint ett_disp_ShadowError = -1;
|
|
static gint ett_disp_T_signedShadowError = -1;
|
|
|
|
/*--- End of included file: packet-disp-ett.c ---*/
|
|
-#line 53 "./asn1/disp/packet-disp-template.c"
|
|
+#line 54 "./asn1/disp/packet-disp-template.c"
|
|
|
|
static expert_field ei_disp_unsupported_opcode = EI_INIT;
|
|
static expert_field ei_disp_unsupported_errcode = EI_INIT;
|
|
@@ -249,6 +250,7 @@ static int dissect_disp_Subtree(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, in
|
|
static int dissect_disp_IncrementalStepRefresh(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -1066,9 +1068,15 @@ static const ber_sequence_t Subtree_sequence[] = {
|
|
|
|
static int
|
|
dissect_disp_Subtree(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
Subtree_sequence, hf_index, ett_disp_Subtree);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1224,9 +1232,15 @@ static const ber_sequence_t IncrementalStepRefresh_sequence[] = {
|
|
|
|
static int
|
|
dissect_disp_IncrementalStepRefresh(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
IncrementalStepRefresh_sequence, hf_index, ett_disp_IncrementalStepRefresh);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1467,7 +1481,7 @@ static int dissect_ShadowingAgreementInfo_PDU(tvbuff_t *tvb _U_, packet_info *pi
|
|
|
|
|
|
/*--- End of included file: packet-disp-fn.c ---*/
|
|
-#line 62 "./asn1/disp/packet-disp-template.c"
|
|
+#line 63 "./asn1/disp/packet-disp-template.c"
|
|
|
|
/*
|
|
* Dissect DISP PDUs inside a ROS PDUs
|
|
@@ -2025,7 +2039,7 @@ void proto_register_disp(void) {
|
|
"ShadowErrorData", HFILL }},
|
|
|
|
/*--- End of included file: packet-disp-hfarr.c ---*/
|
|
-#line 187 "./asn1/disp/packet-disp-template.c"
|
|
+#line 188 "./asn1/disp/packet-disp-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -2090,7 +2104,7 @@ void proto_register_disp(void) {
|
|
&ett_disp_T_signedShadowError,
|
|
|
|
/*--- End of included file: packet-disp-ettarr.c ---*/
|
|
-#line 193 "./asn1/disp/packet-disp-template.c"
|
|
+#line 194 "./asn1/disp/packet-disp-template.c"
|
|
};
|
|
|
|
static ei_register_info ei[] = {
|
|
@@ -2139,7 +2153,7 @@ void proto_reg_handoff_disp(void) {
|
|
|
|
|
|
/*--- End of included file: packet-disp-dis-tab.c ---*/
|
|
-#line 231 "./asn1/disp/packet-disp-template.c"
|
|
+#line 232 "./asn1/disp/packet-disp-template.c"
|
|
|
|
/* APPLICATION CONTEXT */
|
|
|
|
diff --git a/epan/dissectors/packet-glow.c b/epan/dissectors/packet-glow.c
|
|
index 96792b432a9..3adc905fd75 100644
|
|
--- a/epan/dissectors/packet-glow.c
|
|
+++ b/epan/dissectors/packet-glow.c
|
|
@@ -21,6 +21,7 @@
|
|
# include "config.h"
|
|
|
|
#include <epan/packet.h>
|
|
+#include <epan/proto_data.h>
|
|
#include "packet-ber.h"
|
|
|
|
#define PNAME "Glow"
|
|
@@ -131,7 +132,7 @@ static int hf_glow_qualifiedFunction = -1; /* QualifiedFunction */
|
|
static int hf_glow_qualifiedTemplate = -1; /* QualifiedTemplate */
|
|
|
|
/*--- End of included file: packet-glow-hf.c ---*/
|
|
-#line 28 "./asn1/glow/packet-glow-template.c"
|
|
+#line 29 "./asn1/glow/packet-glow-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static int ett_glow = -1;
|
|
@@ -183,7 +184,7 @@ static gint ett_glow_SEQUENCE_OF_RootElement = -1;
|
|
static gint ett_glow_RootElement = -1;
|
|
|
|
/*--- End of included file: packet-glow-ett.c ---*/
|
|
-#line 33 "./asn1/glow/packet-glow-template.c"
|
|
+#line 34 "./asn1/glow/packet-glow-template.c"
|
|
|
|
|
|
/*--- Included file: packet-glow-fn.c ---*/
|
|
@@ -202,6 +203,7 @@ static int dissect_glow_ElementCollection(gboolean implicit_tag _U_, tvbuff_t *t
|
|
static int dissect_glow_Template(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -1102,9 +1104,15 @@ dissect_glow_SEQUENCE_OF_Element(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, i
|
|
|
|
static int
|
|
dissect_glow_ElementCollection(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 6;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
hf_index, BER_CLASS_APP, 4, TRUE, dissect_glow_SEQUENCE_OF_Element);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1128,9 +1136,15 @@ dissect_glow_Parameter_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
|
|
|
|
static int
|
|
dissect_glow_Parameter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 6;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
hf_index, BER_CLASS_APP, 1, TRUE, dissect_glow_Parameter_U);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1180,9 +1194,15 @@ dissect_glow_Template_U(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
|
|
|
|
static int
|
|
dissect_glow_Template(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 9;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_tagged_type(implicit_tag, actx, tree, tvb, offset,
|
|
hf_index, BER_CLASS_APP, 24, TRUE, dissect_glow_Template_U);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1492,7 +1512,7 @@ static int dissect_Root_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tre
|
|
|
|
|
|
/*--- End of included file: packet-glow-fn.c ---*/
|
|
-#line 35 "./asn1/glow/packet-glow-template.c"
|
|
+#line 36 "./asn1/glow/packet-glow-template.c"
|
|
|
|
static int
|
|
dissect_glow(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
|
|
@@ -1898,7 +1918,7 @@ void proto_register_glow(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-glow-hfarr.c ---*/
|
|
-#line 60 "./asn1/glow/packet-glow-template.c"
|
|
+#line 61 "./asn1/glow/packet-glow-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -1951,7 +1971,7 @@ void proto_register_glow(void) {
|
|
&ett_glow_RootElement,
|
|
|
|
/*--- End of included file: packet-glow-ettarr.c ---*/
|
|
-#line 66 "./asn1/glow/packet-glow-template.c"
|
|
+#line 67 "./asn1/glow/packet-glow-template.c"
|
|
};
|
|
|
|
|
|
diff --git a/epan/dissectors/packet-goose.c b/epan/dissectors/packet-goose.c
|
|
index 9937af7314a..43b061e1fdb 100644
|
|
--- a/epan/dissectors/packet-goose.c
|
|
+++ b/epan/dissectors/packet-goose.c
|
|
@@ -24,6 +24,7 @@
|
|
|
|
#include <epan/packet.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/etypes.h>
|
|
#include <epan/expert.h>
|
|
|
|
@@ -158,7 +159,7 @@ static int hf_goose_mMSString = -1; /* MMSString */
|
|
static int hf_goose_utc_time = -1; /* UtcTime */
|
|
|
|
/*--- End of included file: packet-goose-hf.c ---*/
|
|
-#line 90 "./asn1/goose/packet-goose-template.c"
|
|
+#line 91 "./asn1/goose/packet-goose-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static int ett_r_goose = -1;
|
|
@@ -193,7 +194,7 @@ static gint ett_goose_SEQUENCE_OF_Data = -1;
|
|
static gint ett_goose_Data = -1;
|
|
|
|
/*--- End of included file: packet-goose-ett.c ---*/
|
|
-#line 103 "./asn1/goose/packet-goose-template.c"
|
|
+#line 104 "./asn1/goose/packet-goose-template.c"
|
|
|
|
|
|
/*--- Included file: packet-goose-fn.c ---*/
|
|
@@ -204,6 +205,7 @@ static gint ett_goose_Data = -1;
|
|
static int dissect_goose_Data(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -733,10 +735,16 @@ static const ber_choice_t Data_choice[] = {
|
|
|
|
static int
|
|
dissect_goose_Data(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
Data_choice, hf_index, ett_goose_Data,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -783,7 +791,7 @@ dissect_goose_GOOSEpdu(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset
|
|
|
|
|
|
/*--- End of included file: packet-goose-fn.c ---*/
|
|
-#line 105 "./asn1/goose/packet-goose-template.c"
|
|
+#line 106 "./asn1/goose/packet-goose-template.c"
|
|
|
|
static dissector_handle_t goose_handle = NULL;
|
|
static dissector_handle_t ositp_handle = NULL;
|
|
@@ -1485,7 +1493,7 @@ void proto_register_goose(void) {
|
|
"UtcTime", HFILL }},
|
|
|
|
/*--- End of included file: packet-goose-hfarr.c ---*/
|
|
-#line 566 "./asn1/goose/packet-goose-template.c"
|
|
+#line 567 "./asn1/goose/packet-goose-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -1521,7 +1529,7 @@ void proto_register_goose(void) {
|
|
&ett_goose_Data,
|
|
|
|
/*--- End of included file: packet-goose-ettarr.c ---*/
|
|
-#line 580 "./asn1/goose/packet-goose-template.c"
|
|
+#line 581 "./asn1/goose/packet-goose-template.c"
|
|
};
|
|
|
|
static ei_register_info ei[] = {
|
|
diff --git a/epan/dissectors/packet-h225.c b/epan/dissectors/packet-h225.c
|
|
index 222aa4c9ea3..6c74e3d86e1 100644
|
|
--- a/epan/dissectors/packet-h225.c
|
|
+++ b/epan/dissectors/packet-h225.c
|
|
@@ -1275,6 +1275,7 @@ static int dissect_h225_EnumeratedParameter(tvbuff_t *tvb _U_, int offset _U_, a
|
|
/*int dissect_h225_GenericData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);*/
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -4019,6 +4020,11 @@ static const per_sequence_t EnumeratedParameter_sequence[] = {
|
|
|
|
static int
|
|
dissect_h225_EnumeratedParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 864 "./asn1/h225/h225.cnf"
|
|
gef_ctx_t *parent_gefx;
|
|
|
|
@@ -4028,6 +4034,7 @@ dissect_h225_EnumeratedParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *
|
|
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
|
|
ett_h225_EnumeratedParameter, EnumeratedParameter_sequence);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
#line 869 "./asn1/h225/h225.cnf"
|
|
actx->private_data = parent_gefx;
|
|
|
|
@@ -4043,6 +4050,11 @@ static const per_sequence_t GenericData_sequence[] = {
|
|
|
|
int
|
|
dissect_h225_GenericData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 6;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 850 "./asn1/h225/h225.cnf"
|
|
void *priv_data = actx->private_data;
|
|
gef_ctx_t *gefx;
|
|
@@ -4057,6 +4069,7 @@ dissect_h225_GenericData(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_
|
|
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
|
|
ett_h225_GenericData, GenericData_sequence);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
#line 860 "./asn1/h225/h225.cnf"
|
|
actx->private_data = priv_data;
|
|
|
|
diff --git a/epan/dissectors/packet-h245.c b/epan/dissectors/packet-h245.c
|
|
index cb523c2f1d8..2990488283e 100644
|
|
--- a/epan/dissectors/packet-h245.c
|
|
+++ b/epan/dissectors/packet-h245.c
|
|
@@ -36,6 +36,7 @@
|
|
#include <epan/t35.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/tap.h>
|
|
#include <wsutil/pint.h>
|
|
#include "packet-tpkt.h"
|
|
@@ -202,7 +203,7 @@ typedef enum _IndicationMessage_enum {
|
|
} IndicationMessage_enum;
|
|
|
|
/*--- End of included file: packet-h245-val.h ---*/
|
|
-#line 75 "./asn1/h245/packet-h245-template.c"
|
|
+#line 76 "./asn1/h245/packet-h245-template.c"
|
|
|
|
static const value_string h245_RequestMessage_short_vals[] = {
|
|
{ RequestMessage_nonStandard , "NSM" },
|
|
@@ -1909,7 +1910,7 @@ static int hf_h245_encrypted = -1; /* OCTET_STRING */
|
|
static int hf_h245_encryptedAlphanumeric = -1; /* EncryptedAlphanumeric */
|
|
|
|
/*--- End of included file: packet-h245-hf.c ---*/
|
|
-#line 375 "./asn1/h245/packet-h245-template.c"
|
|
+#line 376 "./asn1/h245/packet-h245-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static int ett_h245 = -1;
|
|
@@ -2410,7 +2411,7 @@ static gint ett_h245_FlowControlIndication = -1;
|
|
static gint ett_h245_MobileMultilinkReconfigurationIndication = -1;
|
|
|
|
/*--- End of included file: packet-h245-ett.c ---*/
|
|
-#line 380 "./asn1/h245/packet-h245-template.c"
|
|
+#line 381 "./asn1/h245/packet-h245-template.c"
|
|
|
|
/* Forward declarations */
|
|
static int dissect_h245_MultimediaSystemControlMessage(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
@@ -2449,6 +2450,7 @@ static int dissect_h245_AudioMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t
|
|
static int dissect_h245_ModeElementType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -3921,9 +3923,15 @@ static const per_sequence_t GenericParameter_sequence[] = {
|
|
|
|
static int
|
|
dissect_h245_GenericParameter(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
|
|
ett_h245_GenericParameter, GenericParameter_sequence);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -5738,6 +5746,11 @@ static const per_choice_t VideoCapability_choice[] = {
|
|
|
|
static int
|
|
dissect_h245_VideoCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 457 "./asn1/h245/h245.cnf"
|
|
gint32 value;
|
|
|
|
@@ -5749,6 +5762,7 @@ dissect_h245_VideoCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
|
|
|
|
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -6056,6 +6070,11 @@ static const per_choice_t AudioCapability_choice[] = {
|
|
|
|
static int
|
|
dissect_h245_AudioCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 450 "./asn1/h245/h245.cnf"
|
|
gint32 value;
|
|
|
|
@@ -6066,6 +6085,7 @@ dissect_h245_AudioCapability(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx
|
|
codec_type = val_to_str(value, h245_AudioCapability_short_vals, "<unknown>");
|
|
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -7236,6 +7256,11 @@ static const per_choice_t DataType_choice[] = {
|
|
|
|
static int
|
|
dissect_h245_DataType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 5;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 1007 "./asn1/h245/h245.cnf"
|
|
gint choice_index;
|
|
|
|
@@ -7254,6 +7279,7 @@ if (upcoming_channel){
|
|
|
|
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -9018,6 +9044,11 @@ static const per_sequence_t MultiplexElement_sequence[] = {
|
|
|
|
static int
|
|
dissect_h245_MultiplexElement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 82 "./asn1/h245/h245.cnf"
|
|
/*MultiplexElement*/
|
|
h223_mux_element* me = wmem_new(wmem_file_scope(), h223_mux_element);
|
|
@@ -9028,6 +9059,7 @@ dissect_h245_MultiplexElement(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *act
|
|
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
|
|
ett_h245_MultiplexElement, MultiplexElement_sequence);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -9655,6 +9687,11 @@ static const per_choice_t AudioMode_choice[] = {
|
|
|
|
static int
|
|
dissect_h245_AudioMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 472 "./asn1/h245/h245.cnf"
|
|
gint32 value;
|
|
|
|
@@ -9665,6 +9702,7 @@ dissect_h245_AudioMode(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_,
|
|
codec_type = val_to_str(value, h245_AudioMode_vals, "<unknown>");
|
|
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -10012,10 +10050,16 @@ static const per_choice_t ModeElementType_choice[] = {
|
|
|
|
static int
|
|
dissect_h245_ModeElementType(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 6;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_per_choice(tvb, offset, actx, tree, hf_index,
|
|
ett_h245_ModeElementType, ModeElementType_choice,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -14497,7 +14541,7 @@ static int dissect_OpenLogicalChannel_PDU(tvbuff_t *tvb _U_, packet_info *pinfo
|
|
|
|
|
|
/*--- End of included file: packet-h245-fn.c ---*/
|
|
-#line 389 "./asn1/h245/packet-h245-template.c"
|
|
+#line 390 "./asn1/h245/packet-h245-template.c"
|
|
|
|
static int
|
|
dissect_h245(tvbuff_t *tvb, packet_info *pinfo, proto_tree *parent_tree, void* data _U_)
|
|
@@ -20196,7 +20240,7 @@ void proto_register_h245(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-h245-hfarr.c ---*/
|
|
-#line 475 "./asn1/h245/packet-h245-template.c"
|
|
+#line 476 "./asn1/h245/packet-h245-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -20699,7 +20743,7 @@ void proto_register_h245(void) {
|
|
&ett_h245_MobileMultilinkReconfigurationIndication,
|
|
|
|
/*--- End of included file: packet-h245-ettarr.c ---*/
|
|
-#line 482 "./asn1/h245/packet-h245-template.c"
|
|
+#line 483 "./asn1/h245/packet-h245-template.c"
|
|
};
|
|
module_t *h245_module;
|
|
|
|
diff --git a/epan/dissectors/packet-h248.c b/epan/dissectors/packet-h248.c
|
|
index 32c11e5b4ff..57d33c4c044 100644
|
|
--- a/epan/dissectors/packet-h248.c
|
|
+++ b/epan/dissectors/packet-h248.c
|
|
@@ -26,6 +26,7 @@
|
|
#include <epan/exceptions.h>
|
|
#include <epan/tap.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/prefs.h>
|
|
#include <epan/exported_pdu.h>
|
|
#include <epan/address_types.h>
|
|
@@ -392,7 +393,7 @@ static int hf_h248_NotifyCompletion_otherReason = -1;
|
|
static int hf_h248_NotifyCompletion_onIteration = -1;
|
|
|
|
/*--- End of included file: packet-h248-hf.c ---*/
|
|
-#line 69 "./asn1/h248/packet-h248-template.c"
|
|
+#line 70 "./asn1/h248/packet-h248-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_h248 = -1;
|
|
@@ -560,7 +561,7 @@ static gint ett_h248_EventParameterV1 = -1;
|
|
static gint ett_h248_SigParameterV1 = -1;
|
|
|
|
/*--- End of included file: packet-h248-ett.c ---*/
|
|
-#line 89 "./asn1/h248/packet-h248-template.c"
|
|
+#line 90 "./asn1/h248/packet-h248-template.c"
|
|
|
|
static expert_field ei_h248_errored_command = EI_INIT;
|
|
static expert_field ei_h248_transactionId64 = EI_INIT;
|
|
@@ -2636,6 +2637,7 @@ static int dissect_h248_MtpAddress(gboolean implicit_tag, tvbuff_t *tvb, int off
|
|
static int dissect_h248_SecondEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -4292,9 +4294,15 @@ static const ber_sequence_t SecondEventsDescriptor_sequence[] = {
|
|
|
|
static int
|
|
dissect_h248_SecondEventsDescriptor(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 7;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
SecondEventsDescriptor_sequence, hf_index, ett_h248_SecondEventsDescriptor);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -6078,7 +6086,7 @@ dissect_h248_SigParameterV1(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int of
|
|
|
|
|
|
/*--- End of included file: packet-h248-fn.c ---*/
|
|
-#line 2156 "./asn1/h248/packet-h248-template.c"
|
|
+#line 2157 "./asn1/h248/packet-h248-template.c"
|
|
|
|
static int dissect_h248_tpkt(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) {
|
|
dissect_tpkt_encap(tvb, pinfo, tree, h248_desegment, h248_handle);
|
|
@@ -7503,7 +7511,7 @@ void proto_register_h248(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-h248-hfarr.c ---*/
|
|
-#line 2324 "./asn1/h248/packet-h248-template.c"
|
|
+#line 2325 "./asn1/h248/packet-h248-template.c"
|
|
|
|
GCP_HF_ARR_ELEMS("h248",h248_arrel)
|
|
|
|
@@ -7669,7 +7677,7 @@ void proto_register_h248(void) {
|
|
&ett_h248_SigParameterV1,
|
|
|
|
/*--- End of included file: packet-h248-ettarr.c ---*/
|
|
-#line 2342 "./asn1/h248/packet-h248-template.c"
|
|
+#line 2343 "./asn1/h248/packet-h248-template.c"
|
|
};
|
|
|
|
static ei_register_info ei[] = {
|
|
diff --git a/epan/dissectors/packet-ieee1609dot2.c b/epan/dissectors/packet-ieee1609dot2.c
|
|
index 031bf48bc53..a5d5e7051cb 100644
|
|
--- a/epan/dissectors/packet-ieee1609dot2.c
|
|
+++ b/epan/dissectors/packet-ieee1609dot2.c
|
|
@@ -318,6 +318,7 @@ ieee1609dot2_set_next_default_psid(packet_info *pinfo, guint32 psid)
|
|
static int dissect_ieee1609dot2_SignedDataPayload(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -2086,9 +2087,15 @@ static const oer_sequence_t SignedDataPayload_sequence[] = {
|
|
|
|
static int
|
|
dissect_ieee1609dot2_SignedDataPayload(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 6;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_oer_sequence(tvb, offset, actx, tree, hf_index,
|
|
ett_ieee1609dot2_SignedDataPayload, SignedDataPayload_sequence);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
diff --git a/epan/dissectors/packet-its.c b/epan/dissectors/packet-its.c
|
|
index 0b35d1516ac..de27694fc62 100644
|
|
--- a/epan/dissectors/packet-its.c
|
|
+++ b/epan/dissectors/packet-its.c
|
|
@@ -1925,7 +1925,7 @@ static int hf_cpm_node_Z5 = -1; /* Offset_B14 */
|
|
static int hf_cpm_node_Z6 = -1; /* Offset_B16 */
|
|
|
|
/*--- End of included file: packet-its-hf.c ---*/
|
|
-#line 288 "./asn1/its/packet-its-template.c"
|
|
+#line 289 "./asn1/its/packet-its-template.c"
|
|
|
|
// CauseCode/SubCauseCode management
|
|
static int hf_its_trafficConditionSubCauseCode = -1;
|
|
@@ -2526,7 +2526,7 @@ static gint ett_cpm_OffsetPoint = -1;
|
|
static gint ett_cpm_NodeOffsetPointZ = -1;
|
|
|
|
/*--- End of included file: packet-its-ett.c ---*/
|
|
-#line 318 "./asn1/its/packet-its-template.c"
|
|
+#line 319 "./asn1/its/packet-its-template.c"
|
|
|
|
// Deal with cause/subcause code management
|
|
struct { CauseCodeType_enum cause; int* hf; } cause_to_subcause[] = {
|
|
@@ -11038,6 +11038,7 @@ static int dissect_AddGrpC_SignalStatusPackage_addGrpC_PDU(tvbuff_t *tvb _U_, pa
|
|
static int dissect_gdd_GddStructure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -11962,9 +11963,15 @@ static const per_sequence_t gdd_GddStructure_sequence[] = {
|
|
|
|
static int
|
|
dissect_gdd_GddStructure(tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 9;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_per_sequence(tvb, offset, actx, tree, hf_index,
|
|
ett_gdd_GddStructure, gdd_GddStructure_sequence);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -18561,7 +18568,7 @@ static int dissect_cpm_CollectivePerceptionMessage_PDU(tvbuff_t *tvb _U_, packet
|
|
|
|
|
|
/*--- End of included file: packet-its-fn.c ---*/
|
|
-#line 360 "./asn1/its/packet-its-template.c"
|
|
+#line 361 "./asn1/its/packet-its-template.c"
|
|
|
|
static void
|
|
its_latitude_fmt(gchar *s, guint32 v)
|
|
@@ -25364,7 +25371,7 @@ void proto_register_its(void)
|
|
"Offset_B16", HFILL }},
|
|
|
|
/*--- End of included file: packet-its-hfarr.c ---*/
|
|
-#line 835 "./asn1/its/packet-its-template.c"
|
|
+#line 836 "./asn1/its/packet-its-template.c"
|
|
|
|
{ &hf_its_roadworksSubCauseCode,
|
|
{ "roadworksSubCauseCode", "its.subCauseCode",
|
|
@@ -26138,7 +26145,7 @@ void proto_register_its(void)
|
|
&ett_cpm_NodeOffsetPointZ,
|
|
|
|
/*--- End of included file: packet-its-ettarr.c ---*/
|
|
-#line 1038 "./asn1/its/packet-its-template.c"
|
|
+#line 1039 "./asn1/its/packet-its-template.c"
|
|
};
|
|
|
|
static ei_register_info ei[] = {
|
|
diff --git a/epan/dissectors/packet-ldap.c b/epan/dissectors/packet-ldap.c
|
|
index 33c7a31dba9..c9427e60311 100644
|
|
--- a/epan/dissectors/packet-ldap.c
|
|
+++ b/epan/dissectors/packet-ldap.c
|
|
@@ -88,6 +88,7 @@
|
|
#include <epan/strutil.h>
|
|
#include <epan/show_exception.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/expert.h>
|
|
#include <epan/uat.h>
|
|
#include <wsutil/str_util.h>
|
|
@@ -336,7 +337,7 @@ static int hf_ldap_graceAuthNsRemaining = -1; /* INTEGER_0_maxInt */
|
|
static int hf_ldap_error = -1; /* T_error */
|
|
|
|
/*--- End of included file: packet-ldap-hf.c ---*/
|
|
-#line 186 "./asn1/ldap/packet-ldap-template.c"
|
|
+#line 187 "./asn1/ldap/packet-ldap-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_ldap = -1;
|
|
@@ -408,7 +409,7 @@ static gint ett_ldap_PasswordPolicyResponseValue = -1;
|
|
static gint ett_ldap_T_warning = -1;
|
|
|
|
/*--- End of included file: packet-ldap-ett.c ---*/
|
|
-#line 198 "./asn1/ldap/packet-ldap-template.c"
|
|
+#line 199 "./asn1/ldap/packet-ldap-template.c"
|
|
|
|
static expert_field ei_ldap_exceeded_filter_length = EI_INIT;
|
|
static expert_field ei_ldap_too_many_filter_elements = EI_INIT;
|
|
@@ -1130,6 +1131,7 @@ ldap_match_call_response(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gu
|
|
static int dissect_ldap_Filter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -2246,6 +2248,11 @@ static const ber_choice_t Filter_choice[] = {
|
|
|
|
static int
|
|
dissect_ldap_Filter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 661 "./asn1/ldap/ldap.cnf"
|
|
proto_tree *tr;
|
|
proto_item *it;
|
|
@@ -2273,6 +2280,7 @@ dissect_ldap_Filter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_
|
|
|
|
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -3815,7 +3823,7 @@ static int dissect_PasswordPolicyResponseValue_PDU(tvbuff_t *tvb _U_, packet_inf
|
|
|
|
|
|
/*--- End of included file: packet-ldap-fn.c ---*/
|
|
-#line 909 "./asn1/ldap/packet-ldap-template.c"
|
|
+#line 910 "./asn1/ldap/packet-ldap-template.c"
|
|
static int dissect_LDAPMessage_PDU(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, ldap_conv_info_t *ldap_info) {
|
|
|
|
int offset = 0;
|
|
@@ -5632,7 +5640,7 @@ void proto_register_ldap(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-ldap-hfarr.c ---*/
|
|
-#line 2157 "./asn1/ldap/packet-ldap-template.c"
|
|
+#line 2158 "./asn1/ldap/packet-ldap-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -5706,7 +5714,7 @@ void proto_register_ldap(void) {
|
|
&ett_ldap_T_warning,
|
|
|
|
/*--- End of included file: packet-ldap-ettarr.c ---*/
|
|
-#line 2171 "./asn1/ldap/packet-ldap-template.c"
|
|
+#line 2172 "./asn1/ldap/packet-ldap-template.c"
|
|
};
|
|
/* UAT for header fields */
|
|
static uat_field_t custom_attribute_types_uat_fields[] = {
|
|
@@ -5917,7 +5925,7 @@ proto_reg_handoff_ldap(void)
|
|
|
|
|
|
/*--- End of included file: packet-ldap-dis-tab.c ---*/
|
|
-#line 2365 "./asn1/ldap/packet-ldap-template.c"
|
|
+#line 2366 "./asn1/ldap/packet-ldap-template.c"
|
|
|
|
dissector_add_uint_range_with_preference("tcp.port", TCP_PORT_RANGE_LDAP, ldap_handle);
|
|
|
|
diff --git a/epan/dissectors/packet-mms.c b/epan/dissectors/packet-mms.c
|
|
index 233bbb835c6..e7cbeb7aeae 100644
|
|
--- a/epan/dissectors/packet-mms.c
|
|
+++ b/epan/dissectors/packet-mms.c
|
|
@@ -1057,6 +1057,7 @@ static int dissect_mms_AlternateAccess(gboolean implicit_tag _U_, tvbuff_t *tvb
|
|
static int dissect_mms_Data(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -1578,10 +1579,16 @@ static const ber_choice_t TypeSpecification_choice[] = {
|
|
|
|
static int
|
|
dissect_mms_TypeSpecification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
TypeSpecification_choice, hf_index, ett_mms_TypeSpecification,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1763,9 +1770,15 @@ static const ber_sequence_t AlternateAccess_sequence_of[1] = {
|
|
|
|
static int
|
|
dissect_mms_AlternateAccess(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 5;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
|
|
AlternateAccess_sequence_of, hf_index, ett_mms_AlternateAccess);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1819,10 +1832,16 @@ static const ber_choice_t VariableSpecification_choice[] = {
|
|
|
|
static int
|
|
dissect_mms_VariableSpecification(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
VariableSpecification_choice, hf_index, ett_mms_VariableSpecification,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -2108,10 +2127,16 @@ static const ber_choice_t Data_choice[] = {
|
|
|
|
static int
|
|
dissect_mms_Data(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
Data_choice, hf_index, ett_mms_Data,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
diff --git a/epan/dissectors/packet-p22.c b/epan/dissectors/packet-p22.c
|
|
index f446ab88f4c..fb9aeb29c95 100644
|
|
--- a/epan/dissectors/packet-p22.c
|
|
+++ b/epan/dissectors/packet-p22.c
|
|
@@ -22,6 +22,7 @@
|
|
#include <epan/packet.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
@@ -323,7 +324,7 @@ static const value_string charsetreg_vals [] = {
|
|
#define ub_telephone_number 32
|
|
|
|
/*--- End of included file: packet-p22-val.h ---*/
|
|
-#line 67 "./asn1/p22/packet-p22-template.c"
|
|
+#line 68 "./asn1/p22/packet-p22-template.c"
|
|
|
|
|
|
/*--- Included file: packet-p22-hf.c ---*/
|
|
@@ -708,7 +709,7 @@ static int hf_p22_RecipientSecurityRequest_ipn_non_repudiation = -1;
|
|
static int hf_p22_RecipientSecurityRequest_ipn_proof = -1;
|
|
|
|
/*--- End of included file: packet-p22-hf.c ---*/
|
|
-#line 69 "./asn1/p22/packet-p22-template.c"
|
|
+#line 70 "./asn1/p22/packet-p22-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_p22 = -1;
|
|
@@ -842,7 +843,7 @@ static gint ett_p22_T_body_part_token_choice = -1;
|
|
static gint ett_p22_T_choice = -1;
|
|
|
|
/*--- End of included file: packet-p22-ett.c ---*/
|
|
-#line 73 "./asn1/p22/packet-p22-template.c"
|
|
+#line 74 "./asn1/p22/packet-p22-template.c"
|
|
|
|
|
|
/*--- Included file: packet-p22-fn.c ---*/
|
|
@@ -862,6 +863,7 @@ static int dissect_p22_BodyPartTokens(gboolean implicit_tag _U_, tvbuff_t *tvb _
|
|
static int dissect_p22_ForwardedContentToken(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -1834,6 +1836,11 @@ static const ber_sequence_t IPM_sequence[] = {
|
|
|
|
int
|
|
dissect_p22_IPM(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 7;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
#line 243 "./asn1/p22/p22.cnf"
|
|
|
|
col_append_str(actx->pinfo->cinfo, COL_INFO, " Message");
|
|
@@ -1845,6 +1852,7 @@ dissect_p22_IPM(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, as
|
|
|
|
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -3557,9 +3565,15 @@ static const ber_sequence_t IPMSynopsis_sequence_of[1] = {
|
|
|
|
static int
|
|
dissect_p22_IPMSynopsis(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence_of(implicit_tag, actx, tree, tvb, offset,
|
|
IPMSynopsis_sequence_of, hf_index, ett_p22_IPMSynopsis);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -4017,9 +4031,15 @@ static const ber_sequence_t BodyPartTokens_set_of[1] = {
|
|
|
|
static int
|
|
dissect_p22_BodyPartTokens(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
|
|
BodyPartTokens_set_of, hf_index, ett_p22_BodyPartTokens);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -4067,9 +4087,15 @@ static const ber_sequence_t ForwardedContentToken_set_of[1] = {
|
|
|
|
static int
|
|
dissect_p22_ForwardedContentToken(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_set_of(implicit_tag, actx, tree, tvb, offset,
|
|
ForwardedContentToken_set_of, hf_index, ett_p22_ForwardedContentToken);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -4659,7 +4685,7 @@ static int dissect_ForwardedContentToken_PDU(tvbuff_t *tvb _U_, packet_info *pin
|
|
|
|
|
|
/*--- End of included file: packet-p22-fn.c ---*/
|
|
-#line 75 "./asn1/p22/packet-p22-template.c"
|
|
+#line 76 "./asn1/p22/packet-p22-template.c"
|
|
|
|
/*
|
|
* Dissect P22 PDUs inside a PPDU.
|
|
@@ -6205,7 +6231,7 @@ void proto_register_p22(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-p22-hfarr.c ---*/
|
|
-#line 108 "./asn1/p22/packet-p22-template.c"
|
|
+#line 109 "./asn1/p22/packet-p22-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -6341,7 +6367,7 @@ void proto_register_p22(void) {
|
|
&ett_p22_T_choice,
|
|
|
|
/*--- End of included file: packet-p22-ettarr.c ---*/
|
|
-#line 114 "./asn1/p22/packet-p22-template.c"
|
|
+#line 115 "./asn1/p22/packet-p22-template.c"
|
|
};
|
|
|
|
/* Register protocol */
|
|
@@ -6461,7 +6487,7 @@ void proto_reg_handoff_p22(void) {
|
|
|
|
|
|
/*--- End of included file: packet-p22-dis-tab.c ---*/
|
|
-#line 130 "./asn1/p22/packet-p22-template.c"
|
|
+#line 131 "./asn1/p22/packet-p22-template.c"
|
|
|
|
register_ber_oid_dissector("2.6.1.10.0", dissect_p22, proto_p22, "InterPersonal Message (1984)");
|
|
register_ber_oid_dissector("2.6.1.10.1", dissect_p22, proto_p22, "InterPersonal Message (1988)");
|
|
diff --git a/epan/dissectors/packet-p7.c b/epan/dissectors/packet-p7.c
|
|
index e9c24366e03..64bd635486a 100644
|
|
--- a/epan/dissectors/packet-p7.c
|
|
+++ b/epan/dissectors/packet-p7.c
|
|
@@ -23,6 +23,7 @@
|
|
#include <epan/prefs.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-acse.h"
|
|
@@ -104,7 +105,7 @@ static int proto_p7 = -1;
|
|
#define ub_ua_restrictions 16
|
|
|
|
/*--- End of included file: packet-p7-val.h ---*/
|
|
-#line 41 "./asn1/p7/packet-p7-template.c"
|
|
+#line 42 "./asn1/p7/packet-p7-template.c"
|
|
|
|
|
|
/*--- Included file: packet-p7-hf.c ---*/
|
|
@@ -476,7 +477,7 @@ static int hf_p7_T_entry_class_problem_entry_class_not_subscribed = -1;
|
|
static int hf_p7_T_entry_class_problem_inappropriate_entry_class = -1;
|
|
|
|
/*--- End of included file: packet-p7-hf.c ---*/
|
|
-#line 43 "./asn1/p7/packet-p7-template.c"
|
|
+#line 44 "./asn1/p7/packet-p7-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static gint ett_p7 = -1;
|
|
@@ -618,7 +619,7 @@ static gint ett_p7_RTSE_apdus = -1;
|
|
static gint ett_p7_RTABapdu = -1;
|
|
|
|
/*--- End of included file: packet-p7-ett.c ---*/
|
|
-#line 47 "./asn1/p7/packet-p7-template.c"
|
|
+#line 48 "./asn1/p7/packet-p7-template.c"
|
|
|
|
|
|
/*--- Included file: packet-p7-table.c ---*/
|
|
@@ -661,7 +662,7 @@ static const value_string p7_err_code_string_vals[] = {
|
|
|
|
|
|
/*--- End of included file: packet-p7-table.c ---*/
|
|
-#line 49 "./asn1/p7/packet-p7-template.c"
|
|
+#line 50 "./asn1/p7/packet-p7-template.c"
|
|
|
|
|
|
/*--- Included file: packet-p7-fn.c ---*/
|
|
@@ -673,6 +674,7 @@ static const value_string p7_err_code_string_vals[] = {
|
|
static int dissect_p7_Filter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -1587,10 +1589,16 @@ static const ber_choice_t Filter_choice[] = {
|
|
|
|
static int
|
|
dissect_p7_Filter(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
Filter_choice, hf_index, ett_p7_Filter,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -4106,7 +4114,7 @@ static int dissect_RTSE_apdus_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pro
|
|
|
|
|
|
/*--- End of included file: packet-p7-fn.c ---*/
|
|
-#line 51 "./asn1/p7/packet-p7-template.c"
|
|
+#line 52 "./asn1/p7/packet-p7-template.c"
|
|
|
|
|
|
/*--- Included file: packet-p7-table11.c ---*/
|
|
@@ -4138,7 +4146,7 @@ static const ros_opr_t p7_opr_tab[] = {
|
|
|
|
|
|
/*--- End of included file: packet-p7-table11.c ---*/
|
|
-#line 53 "./asn1/p7/packet-p7-template.c"
|
|
+#line 54 "./asn1/p7/packet-p7-template.c"
|
|
|
|
/*--- Included file: packet-p7-table21.c ---*/
|
|
#line 1 "./asn1/p7/packet-p7-table21.c"
|
|
@@ -4177,7 +4185,7 @@ static const ros_err_t p7_err_tab[] = {
|
|
|
|
|
|
/*--- End of included file: packet-p7-table21.c ---*/
|
|
-#line 54 "./asn1/p7/packet-p7-template.c"
|
|
+#line 55 "./asn1/p7/packet-p7-template.c"
|
|
|
|
static const ros_info_t p7_ros_info = {
|
|
"P7",
|
|
@@ -5657,7 +5665,7 @@ void proto_register_p7(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-p7-hfarr.c ---*/
|
|
-#line 73 "./asn1/p7/packet-p7-template.c"
|
|
+#line 74 "./asn1/p7/packet-p7-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -5801,7 +5809,7 @@ void proto_register_p7(void) {
|
|
&ett_p7_RTABapdu,
|
|
|
|
/*--- End of included file: packet-p7-ettarr.c ---*/
|
|
-#line 79 "./asn1/p7/packet-p7-template.c"
|
|
+#line 80 "./asn1/p7/packet-p7-template.c"
|
|
};
|
|
module_t *p7_module;
|
|
|
|
@@ -5860,7 +5868,7 @@ void proto_reg_handoff_p7(void) {
|
|
|
|
|
|
/*--- End of included file: packet-p7-dis-tab.c ---*/
|
|
-#line 105 "./asn1/p7/packet-p7-template.c"
|
|
+#line 106 "./asn1/p7/packet-p7-template.c"
|
|
|
|
/* APPLICATION CONTEXT */
|
|
|
|
diff --git a/epan/dissectors/packet-sv.c b/epan/dissectors/packet-sv.c
|
|
index 88caa0fbc62..ab5e8b30b5a 100644
|
|
--- a/epan/dissectors/packet-sv.c
|
|
+++ b/epan/dissectors/packet-sv.c
|
|
@@ -118,7 +118,7 @@ static int hf_sv_smpMod = -1; /* T_smpMod */
|
|
static int hf_sv_gmidData = -1; /* GmidData */
|
|
|
|
/*--- End of included file: packet-sv-hf.c ---*/
|
|
-#line 94 "./asn1/sv/packet-sv-template.c"
|
|
+#line 95 "./asn1/sv/packet-sv-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
static int ett_sv = -1;
|
|
@@ -137,7 +137,7 @@ static gint ett_sv_SEQUENCE_OF_ASDU = -1;
|
|
static gint ett_sv_ASDU = -1;
|
|
|
|
/*--- End of included file: packet-sv-ett.c ---*/
|
|
-#line 104 "./asn1/sv/packet-sv-template.c"
|
|
+#line 105 "./asn1/sv/packet-sv-template.c"
|
|
|
|
static expert_field ei_sv_mal_utctime = EI_INIT;
|
|
static expert_field ei_sv_zero_pdu = EI_INIT;
|
|
@@ -491,7 +491,7 @@ dissect_sv_SampledValues(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offse
|
|
|
|
|
|
/*--- End of included file: packet-sv-fn.c ---*/
|
|
-#line 187 "./asn1/sv/packet-sv-template.c"
|
|
+#line 199 "./asn1/sv/packet-sv-template.c"
|
|
|
|
/*
|
|
* Dissect SV PDUs inside a PPDU.
|
|
@@ -684,7 +684,7 @@ void proto_register_sv(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-sv-hfarr.c ---*/
|
|
-#line 319 "./asn1/sv/packet-sv-template.c"
|
|
+#line 331 "./asn1/sv/packet-sv-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -703,7 +703,7 @@ void proto_register_sv(void) {
|
|
&ett_sv_ASDU,
|
|
|
|
/*--- End of included file: packet-sv-ettarr.c ---*/
|
|
-#line 329 "./asn1/sv/packet-sv-template.c"
|
|
+#line 341 "./asn1/sv/packet-sv-template.c"
|
|
};
|
|
|
|
static ei_register_info ei[] = {
|
|
diff --git a/epan/dissectors/packet-x509if.c b/epan/dissectors/packet-x509if.c
|
|
index 50320220a0e..65c3c1ac7e6 100644
|
|
--- a/epan/dissectors/packet-x509if.c
|
|
+++ b/epan/dissectors/packet-x509if.c
|
|
@@ -22,6 +22,7 @@
|
|
#include <epan/packet.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
#include <epan/strutil.h>
|
|
|
|
#include "packet-ber.h"
|
|
@@ -201,7 +202,7 @@ static int hf_x509if_AllowedSubset_oneLevel = -1;
|
|
static int hf_x509if_AllowedSubset_wholeSubtree = -1;
|
|
|
|
/*--- End of included file: packet-x509if-hf.c ---*/
|
|
-#line 37 "./asn1/x509if/packet-x509if-template.c"
|
|
+#line 38 "./asn1/x509if/packet-x509if-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
|
|
@@ -282,7 +283,7 @@ static gint ett_x509if_SEQUENCE_SIZE_1_MAX_OF_AttributeType = -1;
|
|
static gint ett_x509if_SET_SIZE_1_MAX_OF_DirectoryString = -1;
|
|
|
|
/*--- End of included file: packet-x509if-ett.c ---*/
|
|
-#line 40 "./asn1/x509if/packet-x509if-template.c"
|
|
+#line 41 "./asn1/x509if/packet-x509if-template.c"
|
|
|
|
static proto_tree *top_of_dn = NULL;
|
|
static proto_tree *top_of_rdn = NULL;
|
|
@@ -336,6 +337,7 @@ x509if_frame_end(void)
|
|
/*int dissect_x509if_AttributeCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);*/
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -1096,10 +1098,16 @@ static const ber_choice_t Refinement_choice[] = {
|
|
|
|
int
|
|
dissect_x509if_Refinement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
Refinement_choice, hf_index, ett_x509if_Refinement,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1541,10 +1549,16 @@ static const ber_choice_t ContextCombination_choice[] = {
|
|
|
|
int
|
|
dissect_x509if_ContextCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
ContextCombination_choice, hf_index, ett_x509if_ContextCombination,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1662,10 +1676,16 @@ static const ber_choice_t AttributeCombination_choice[] = {
|
|
|
|
int
|
|
dissect_x509if_AttributeCombination(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
AttributeCombination_choice, hf_index, ett_x509if_AttributeCombination,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -2090,7 +2110,7 @@ static int dissect_HierarchyBelow_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_,
|
|
|
|
|
|
/*--- End of included file: packet-x509if-fn.c ---*/
|
|
-#line 76 "./asn1/x509if/packet-x509if-template.c"
|
|
+#line 77 "./asn1/x509if/packet-x509if-template.c"
|
|
|
|
const char * x509if_get_last_dn(void)
|
|
{
|
|
@@ -2756,7 +2776,7 @@ void proto_register_x509if(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-x509if-hfarr.c ---*/
|
|
-#line 121 "./asn1/x509if/packet-x509if-template.c"
|
|
+#line 122 "./asn1/x509if/packet-x509if-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -2839,7 +2859,7 @@ void proto_register_x509if(void) {
|
|
&ett_x509if_SET_SIZE_1_MAX_OF_DirectoryString,
|
|
|
|
/*--- End of included file: packet-x509if-ettarr.c ---*/
|
|
-#line 126 "./asn1/x509if/packet-x509if-template.c"
|
|
+#line 127 "./asn1/x509if/packet-x509if-template.c"
|
|
};
|
|
|
|
/* Register protocol */
|
|
@@ -2897,6 +2917,6 @@ void proto_reg_handoff_x509if(void) {
|
|
|
|
|
|
/*--- End of included file: packet-x509if-dis-tab.c ---*/
|
|
-#line 145 "./asn1/x509if/packet-x509if-template.c"
|
|
+#line 146 "./asn1/x509if/packet-x509if-template.c"
|
|
}
|
|
|
|
diff --git a/epan/dissectors/packet-x509sat.c b/epan/dissectors/packet-x509sat.c
|
|
index 876b9831ca3..8c533081847 100644
|
|
--- a/epan/dissectors/packet-x509sat.c
|
|
+++ b/epan/dissectors/packet-x509sat.c
|
|
@@ -22,6 +22,7 @@
|
|
#include <epan/packet.h>
|
|
#include <epan/oids.h>
|
|
#include <epan/asn1.h>
|
|
+#include <epan/proto_data.h>
|
|
|
|
#include "packet-ber.h"
|
|
#include "packet-p1.h"
|
|
@@ -207,7 +208,7 @@ static int hf_x509sat_T_bitNamedDays_friday = -1;
|
|
static int hf_x509sat_T_bitNamedDays_saturday = -1;
|
|
|
|
/*--- End of included file: packet-x509sat-hf.c ---*/
|
|
-#line 33 "./asn1/x509sat/packet-x509sat-template.c"
|
|
+#line 34 "./asn1/x509sat/packet-x509sat-template.c"
|
|
|
|
/* Initialize the subtree pointers */
|
|
|
|
@@ -262,7 +263,7 @@ static gint ett_x509sat_T_between = -1;
|
|
static gint ett_x509sat_LocaleContextSyntax = -1;
|
|
|
|
/*--- End of included file: packet-x509sat-ett.c ---*/
|
|
-#line 36 "./asn1/x509sat/packet-x509sat-template.c"
|
|
+#line 37 "./asn1/x509sat/packet-x509sat-template.c"
|
|
|
|
|
|
/*--- Included file: packet-x509sat-fn.c ---*/
|
|
@@ -274,6 +275,7 @@ static gint ett_x509sat_LocaleContextSyntax = -1;
|
|
/*int dissect_x509sat_Criteria(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);*/
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -448,10 +450,16 @@ static const ber_choice_t Criteria_choice[] = {
|
|
|
|
int
|
|
dissect_x509sat_Criteria(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
Criteria_choice, hf_index, ett_x509sat_Criteria,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -1906,7 +1914,7 @@ static int dissect_GUID_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, proto_tre
|
|
|
|
|
|
/*--- End of included file: packet-x509sat-fn.c ---*/
|
|
-#line 38 "./asn1/x509sat/packet-x509sat-template.c"
|
|
+#line 39 "./asn1/x509sat/packet-x509sat-template.c"
|
|
|
|
|
|
/*--- proto_register_x509sat ----------------------------------------------*/
|
|
@@ -2575,7 +2583,7 @@ void proto_register_x509sat(void) {
|
|
NULL, HFILL }},
|
|
|
|
/*--- End of included file: packet-x509sat-hfarr.c ---*/
|
|
-#line 46 "./asn1/x509sat/packet-x509sat-template.c"
|
|
+#line 47 "./asn1/x509sat/packet-x509sat-template.c"
|
|
};
|
|
|
|
/* List of subtrees */
|
|
@@ -2632,7 +2640,7 @@ void proto_register_x509sat(void) {
|
|
&ett_x509sat_LocaleContextSyntax,
|
|
|
|
/*--- End of included file: packet-x509sat-ettarr.c ---*/
|
|
-#line 51 "./asn1/x509sat/packet-x509sat-template.c"
|
|
+#line 52 "./asn1/x509sat/packet-x509sat-template.c"
|
|
};
|
|
|
|
/* Register protocol */
|
|
@@ -2685,7 +2693,7 @@ void proto_register_x509sat(void) {
|
|
register_ber_syntax_dissector("X121Address", proto_x509sat, dissect_X121Address_PDU);
|
|
|
|
/*--- End of included file: packet-x509sat-syn-reg.c ---*/
|
|
-#line 61 "./asn1/x509sat/packet-x509sat-template.c"
|
|
+#line 62 "./asn1/x509sat/packet-x509sat-template.c"
|
|
|
|
}
|
|
|
|
@@ -2878,7 +2886,7 @@ void proto_reg_handoff_x509sat(void) {
|
|
|
|
|
|
/*--- End of included file: packet-x509sat-dis-tab.c ---*/
|
|
-#line 68 "./asn1/x509sat/packet-x509sat-template.c"
|
|
+#line 69 "./asn1/x509sat/packet-x509sat-template.c"
|
|
|
|
/* OBJECT CLASSES */
|
|
|
|
diff --git a/epan/dissectors/packet-z3950.c b/epan/dissectors/packet-z3950.c
|
|
index 3ad54b0ee10..e25a2e7c1e8 100644
|
|
--- a/epan/dissectors/packet-z3950.c
|
|
+++ b/epan/dissectors/packet-z3950.c
|
|
@@ -2088,6 +2088,7 @@ static int dissect_z3950_ElementInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U
|
|
static int dissect_z3950_TaggedElement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_);
|
|
|
|
|
|
+#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.
|
|
|
|
|
|
static int
|
|
@@ -3067,10 +3068,16 @@ static const ber_choice_t RPNStructure_choice[] = {
|
|
|
|
static int
|
|
dissect_z3950_RPNStructure(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 3;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_choice(actx, tree, tvb, offset,
|
|
RPNStructure_choice, hf_index, ett_z3950_RPNStructure,
|
|
NULL);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -6584,9 +6591,15 @@ static const ber_sequence_t ElementInfo_sequence[] = {
|
|
|
|
static int
|
|
dissect_z3950_ElementInfo(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
ElementInfo_sequence, hf_index, ett_z3950_ElementInfo);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
@@ -8059,9 +8072,15 @@ static const ber_sequence_t TaggedElement_sequence[] = {
|
|
|
|
static int
|
|
dissect_z3950_TaggedElement(gboolean implicit_tag _U_, tvbuff_t *tvb _U_, int offset _U_, asn1_ctx_t *actx _U_, proto_tree *tree _U_, int hf_index _U_) {
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = 4;
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
offset = dissect_ber_sequence(implicit_tag, actx, tree, tvb, offset,
|
|
TaggedElement_sequence, hf_index, ett_z3950_TaggedElement);
|
|
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
return offset;
|
|
}
|
|
|
|
diff --git a/tools/asn2wrs.py b/tools/asn2wrs.py
|
|
index db199b6a253..9f50738a3b4 100755
|
|
--- a/tools/asn2wrs.py
|
|
+++ b/tools/asn2wrs.py
|
|
@@ -1548,6 +1548,23 @@ class EthCtx:
|
|
if self.conform.check_item('PDU', tname):
|
|
out += self.output_proto_root()
|
|
|
|
+ cycle_size = 0
|
|
+ if self.eth_dep_cycle:
|
|
+ for cur_cycle in self.eth_dep_cycle:
|
|
+ t = self.type[cur_cycle[0]]['ethname']
|
|
+ if t == tname:
|
|
+ cycle_size = len(cur_cycle)
|
|
+ break
|
|
+
|
|
+ if cycle_size > 0:
|
|
+ out += f'''\
|
|
+ const int proto_id = GPOINTER_TO_INT(wmem_list_frame_data(wmem_list_tail(actx->pinfo->layers)));
|
|
+ const unsigned cycle_size = {cycle_size};
|
|
+ unsigned recursion_depth = p_get_proto_depth(actx->pinfo, proto_id);
|
|
+ DISSECTOR_ASSERT(recursion_depth <= MAX_RECURSION_DEPTH);
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth + cycle_size);
|
|
+'''
|
|
+
|
|
if self.conform.get_fn_presence(self.eth_type[tname]['ref'][0]):
|
|
out += self.conform.get_fn_text(self.eth_type[tname]['ref'][0], 'FN_HDR')
|
|
return out
|
|
@@ -1558,6 +1575,20 @@ class EthCtx:
|
|
#if self.conform.get_fn_presence(tname):
|
|
# out += self.conform.get_fn_text(tname, 'FN_FTR')
|
|
#el
|
|
+
|
|
+ add_recursion_check = False
|
|
+ if self.eth_dep_cycle:
|
|
+ for cur_cycle in self.eth_dep_cycle:
|
|
+ t = self.type[cur_cycle[0]]['ethname']
|
|
+ if t == tname:
|
|
+ add_recursion_check = True
|
|
+ break
|
|
+
|
|
+ if add_recursion_check:
|
|
+ out += '''\
|
|
+ p_set_proto_depth(actx->pinfo, proto_id, recursion_depth - cycle_size);
|
|
+'''
|
|
+
|
|
if self.conform.get_fn_presence(self.eth_type[tname]['ref'][0]):
|
|
out += self.conform.get_fn_text(self.eth_type[tname]['ref'][0], 'FN_FTR')
|
|
out += " return offset;\n"
|
|
@@ -1825,12 +1856,15 @@ class EthCtx:
|
|
fx.write(self.eth_out_pdu_decl(f))
|
|
if not first_decl:
|
|
fx.write('\n')
|
|
+
|
|
+ add_depth_define = False
|
|
if self.eth_dep_cycle:
|
|
fx.write('/*--- Cyclic dependencies ---*/\n\n')
|
|
i = 0
|
|
while i < len(self.eth_dep_cycle):
|
|
t = self.type[self.eth_dep_cycle[i][0]]['ethname']
|
|
if self.dep_cycle_eth_type[t][0] != i: i += 1; continue
|
|
+ add_depth_define = True
|
|
fx.write(''.join(['/* %s */\n' % ' -> '.join(self.eth_dep_cycle[i]) for i in self.dep_cycle_eth_type[t]]))
|
|
if not self.eth_type[t]['export'] & EF_TYPE:
|
|
fx.write(self.eth_type_fn_h(t))
|
|
@@ -1839,6 +1873,8 @@ class EthCtx:
|
|
fx.write('\n')
|
|
i += 1
|
|
fx.write('\n')
|
|
+ if add_depth_define:
|
|
+ fx.write('#define MAX_RECURSION_DEPTH 100 // Arbitrarily chosen.\n')
|
|
for t in self.eth_type_ord1:
|
|
if self.eth_type[t]['import']:
|
|
continue
|
|
--
|
|
GitLab
|
|
|