aboutsummaryrefslogtreecommitdiffstats
path: root/epan
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2016-05-30 09:51:13 +0200
committerAnders Broman <a.broman58@gmail.com>2016-05-30 11:00:55 +0000
commit7884c5ec7b018fd8b250be8fb068a28c4b60a7d3 (patch)
tree2c8af42a0cd05fbe2bc3a8c400ac668dbf73d62c /epan
parent4e932e70ebf9dca2ae5a12042eaae07b0cd6101c (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.c60
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;
}
/* ------------------------------------------------------------------