aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/asn1/rrc
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2017-11-30 09:31:43 +0100
committerAnders Broman <a.broman58@gmail.com>2017-11-30 12:17:48 +0000
commita6d0ffca86662357893c2ba6986964cb341a73d1 (patch)
tree53efb9c4cb560b58180eefa9e7ca028d07828f3b /epan/dissectors/asn1/rrc
parent6a00fa767fec78020203e1f53062c6a2e5a117c6 (diff)
RRC: reset strbuf pointer after its use
While we are at it, let's add a partial dissection of PLMN-IdentityWithOptionalMCC-r6 IE. Bug: 14248 Change-Id: I20b76bc74c248914db21629f8ce77799fccb1612 Reviewed-on: https://code.wireshark.org/review/24661 Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com> Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com> Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan/dissectors/asn1/rrc')
-rw-r--r--epan/dissectors/asn1/rrc/rrc.cnf48
1 files changed, 41 insertions, 7 deletions
diff --git a/epan/dissectors/asn1/rrc/rrc.cnf b/epan/dissectors/asn1/rrc/rrc.cnf
index 213c2bd0aa..4837a7c887 100644
--- a/epan/dissectors/asn1/rrc/rrc.cnf
+++ b/epan/dissectors/asn1/rrc/rrc.cnf
@@ -780,21 +780,21 @@ HandoverFromUTRANCommand-GSM-r6-IEs/gsm-message/single-GSM-Message single-GSM-Me
tvbuff_t* mcc_mnc_tvb;
/* Reset the digits string in the private data struct */
- /* Maximal length: 6 = 3 digits MCC + 3 digits MNC + trailing '\0'*/
+ /* Maximal length: 7 = 3 digits MCC + 3 digits MNC + trailing '\0' */
mcc_mnc_strbuf = wmem_strbuf_sized_new(actx->pinfo->pool,7,7);
private_data_set_digits_strbuf(actx, mcc_mnc_strbuf);
/* Reset parsing failure flag*/
private_data_set_digits_strbuf_parsing_failed_flag(actx, FALSE);
%(DEFAULT_BODY)s
+ private_data_set_digits_strbuf(actx, NULL);
/* Check for parsing errors */
if(private_data_get_digits_strbuf_parsing_failed_flag(actx)) {
return offset;
}
- /* Extracing the string collected in the strbuf */
+ /* Extracting the string collected in the strbuf */
string_len = (guint32)wmem_strbuf_get_len(mcc_mnc_strbuf);
- mcc_mnc_string = wmem_strdup(actx->pinfo->pool, wmem_strbuf_get_str(mcc_mnc_strbuf));
- wmem_strbuf_truncate(mcc_mnc_strbuf, 0);
+ mcc_mnc_string = wmem_strbuf_finalize(mcc_mnc_strbuf);
/* Creating TVB from extracted string*/
mcc_mnc_tvb = tvb_new_child_real_data(tvb, (guint8*)mcc_mnc_string, string_len, string_len);
@@ -803,6 +803,40 @@ HandoverFromUTRANCommand-GSM-r6-IEs/gsm-message/single-GSM-Message single-GSM-Me
/* Calling E.212 */
dissect_e212_mcc_mnc_in_utf8_address(mcc_mnc_tvb, actx->pinfo, tree, 0);
+#.FN_BODY PLMN-IdentityWithOptionalMCC-r6
+ wmem_strbuf_t* mcc_mnc_strbuf;
+ guint32 string_len;
+ gchar* mcc_mnc_string;
+ tvbuff_t* mcc_mnc_tvb;
+
+ /* Reset the digits string in the private data struct */
+ /* Maximal length: 7 = 3 digits MCC + 3 digits MNC + trailing '\0' */
+ mcc_mnc_strbuf = wmem_strbuf_sized_new(actx->pinfo->pool,7,7);
+ private_data_set_digits_strbuf(actx, mcc_mnc_strbuf);
+ /* Reset parsing failure flag*/
+ private_data_set_digits_strbuf_parsing_failed_flag(actx, FALSE);
+%(DEFAULT_BODY)s
+ private_data_set_digits_strbuf(actx, NULL);
+ /* Check for parsing errors */
+ if(private_data_get_digits_strbuf_parsing_failed_flag(actx)) {
+ return offset;
+ }
+
+ /* Extracting the string collected in the strbuf */
+ string_len = (guint32)wmem_strbuf_get_len(mcc_mnc_strbuf);
+ if (string_len >= 5) {
+ /* optional MCC was present, we can call E.212 dissector */
+ /* if not present, we could apply the algorithm in 25.331 chapter 8.1.1.5 */
+ mcc_mnc_string = wmem_strbuf_finalize(mcc_mnc_strbuf);
+
+ /* Creating TVB from extracted string*/
+ mcc_mnc_tvb = tvb_new_child_real_data(tvb, (guint8*)mcc_mnc_string, string_len, string_len);
+ add_new_data_source(actx->pinfo, mcc_mnc_tvb, "MCC-MNC");
+
+ /* Calling E.212 */
+ dissect_e212_mcc_mnc_in_utf8_address(mcc_mnc_tvb, actx->pinfo, tree, 0);
+ }
+
#.FN_BODY IMSI-GSM-MAP
wmem_strbuf_t* imsi_strbuf;
guint32 string_len;
@@ -815,15 +849,15 @@ HandoverFromUTRANCommand-GSM-r6-IEs/gsm-message/single-GSM-Message single-GSM-Me
/* Reset parsing failure flag*/
private_data_set_digits_strbuf_parsing_failed_flag(actx, FALSE);
%(DEFAULT_BODY)s
+ private_data_set_digits_strbuf(actx, NULL);
/* Check for parsing errors */
if(private_data_get_digits_strbuf_parsing_failed_flag(actx)) {
return offset;
}
- /* Extracing the string collected in the strbuf */
+ /* Extracting the string collected in the strbuf */
string_len = (guint32)wmem_strbuf_get_len(imsi_strbuf);
- imsi_string = wmem_strdup(actx->pinfo->pool, wmem_strbuf_get_str(imsi_strbuf));
- wmem_strbuf_truncate(imsi_strbuf, 0);
+ imsi_string = wmem_strbuf_finalize(imsi_strbuf);
/* Creating TVB from extracted string*/
imsi_tvb = tvb_new_child_real_data(tvb, (guint8*)imsi_string, string_len, string_len);