diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2016-05-30 09:51:13 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2016-05-30 11:00:55 +0000 |
commit | 7884c5ec7b018fd8b250be8fb068a28c4b60a7d3 (patch) | |
tree | 2c8af42a0cd05fbe2bc3a8c400ac668dbf73d62c /epan | |
parent | 4e932e70ebf9dca2ae5a12042eaae07b0cd6101c (diff) |
ISUP: change back code to gc04ee3e and replace proto_item_append_string by proto_item_append_text
This keeps decoding consistent with the previous code while getting rid of the unwanted function
Change-Id: Icaec269588c97a797beecfa678caceda4561b548
Reviewed-on: https://code.wireshark.org/review/15613
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-isup.c | 60 |
1 files changed, 30 insertions, 30 deletions
diff --git a/epan/dissectors/packet-isup.c b/epan/dissectors/packet-isup.c index be4f8328c3..7703eac663 100644 --- a/epan/dissectors/packet-isup.c +++ b/epan/dissectors/packet-isup.c @@ -3349,13 +3349,14 @@ dissect_isup_digits_common(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, p const char *param_name, gint hf_number, gint hf_odd_digit, gint hf_even_digit, gboolean even_indicator, e164_number_type_t number_type, guint nature_of_address) { + gint i = 0; gint length; proto_item *digits_item; proto_tree *digits_tree; guint8 digit_pair = 0; wmem_strbuf_t *strbuf_number; + char *number; e164_info_t e164_info; - gint start_offset = offset; length = tvb_reported_length_remaining(tvb, offset); if (length == 0) { @@ -3364,14 +3365,26 @@ dissect_isup_digits_common(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, p return NULL; } - strbuf_number = wmem_strbuf_new(wmem_packet_scope(), ""); + strbuf_number = wmem_strbuf_sized_new(wmem_packet_scope(), MAXDIGITS+1, 0); + + digits_item = proto_tree_add_string(tree, hf_number, tvb, offset, -1, ""); + digits_tree = proto_item_add_subtree(digits_item, ett_isup_address_digits); - /* Make the digit string */ while (length > 0) { + if (++i > MAXDIGITS) { + expert_add_info(pinfo, digits_item, &ei_isup_too_many_digits); + break; + } digit_pair = tvb_get_guint8(tvb, offset); + proto_tree_add_uint(digits_tree, hf_odd_digit, tvb, offset, 1, digit_pair); wmem_strbuf_append_c(strbuf_number, number_to_char(digit_pair & ISUP_ODD_ADDRESS_SIGNAL_DIGIT_MASK)); if ((length - 1) > 0) { + if (++i > MAXDIGITS) { + expert_add_info(pinfo, digits_item, &ei_isup_too_many_digits); + break; + } + proto_tree_add_uint(digits_tree, hf_even_digit, tvb, offset, 1, digit_pair); wmem_strbuf_append_c(strbuf_number, number_to_char((digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10)); } @@ -3380,45 +3393,32 @@ dissect_isup_digits_common(tvbuff_t *tvb, gint offset, packet_info *pinfo _U_, p } if (even_indicator && (tvb_reported_length(tvb) > 0)) { - wmem_strbuf_append_c(strbuf_number, number_to_char((digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10)); - } - - /* Now make the tree */ - offset = start_offset; - digits_item = proto_tree_add_string(tree, hf_number, tvb, offset, -1, wmem_strbuf_get_str(strbuf_number)); - digits_tree = proto_item_add_subtree(digits_item, ett_isup_address_digits); - - while (length > 0) { - proto_tree_add_item(digits_tree, hf_odd_digit, tvb, offset, 1, ENC_NA); - - if ((length - 1) > 0) { - proto_tree_add_item(digits_tree, hf_even_digit, tvb, offset, 1, ENC_NA); + if (++i < MAXDIGITS) { + /* Even Indicator set -> last (even) digit is valid and has be displayed */ + proto_tree_add_uint(digits_tree, hf_isup_calling_party_even_address_signal_digit, + tvb, offset - 1, 1, digit_pair); + wmem_strbuf_append_c(strbuf_number, number_to_char((digit_pair & ISUP_EVEN_ADDRESS_SIGNAL_DIGIT_MASK) / 0x10)); + } else { + expert_add_info(pinfo, digits_item, &ei_isup_too_many_digits); } - - offset += 1; - length = tvb_reported_length_remaining(tvb, offset); } - if (even_indicator && (tvb_reported_length(tvb) > 0)) { - /* Even Indicator set -> last (even) digit is valid and has be displayed */ - proto_tree_add_item(digits_tree, hf_isup_calling_party_even_address_signal_digit, - tvb, offset - 1, 1, ENC_NA); - } + number = wmem_strbuf_finalize(strbuf_number); - if (wmem_strbuf_get_len(strbuf_number) > MAXDIGITS) - expert_add_info(pinfo, digits_item, &ei_isup_too_many_digits); + /* Now that we have all the digits decoded, add them to the parameter field */ + proto_item_append_text(digits_item, "%s", number); if (number_type != NONE) { e164_info.e164_number_type = number_type; e164_info.nature_of_address = nature_of_address; - e164_info.E164_number_str = wmem_strbuf_get_str(strbuf_number); - e164_info.E164_number_length = (guint) wmem_strbuf_get_len(strbuf_number) - 1; + e164_info.E164_number_str = number; + e164_info.E164_number_length = i - 1; dissect_e164_number(tvb, digits_tree, 2, (offset - 2), e164_info); } - proto_item_set_text(item, "%s: %s", param_name, wmem_strbuf_get_str(strbuf_number)); + proto_item_set_text(item, "%s: %s", param_name, number); - return wmem_strbuf_finalize(strbuf_number); + return number; } /* ------------------------------------------------------------------ |