forked from osmocom/wireshark
Fix PER normally small non-negative whole number dissection when it is greater than or equal to 64 svn path=/trunk/; revision=50969
This commit is contained in:
parent
eddc421d85
commit
23d40bcfcf
|
@ -63,6 +63,7 @@ static int hf_per_open_type_length = -1;
|
||||||
static int hf_per_real_length = -1;
|
static int hf_per_real_length = -1;
|
||||||
static int hf_per_octet_string_length = -1;
|
static int hf_per_octet_string_length = -1;
|
||||||
static int hf_per_bit_string_length = -1;
|
static int hf_per_bit_string_length = -1;
|
||||||
|
static int hf_per_normally_small_nonnegative_whole_number_length = -1;
|
||||||
static int hf_per_const_int_len = -1;
|
static int hf_per_const_int_len = -1;
|
||||||
static int hf_per_direct_reference = -1; /* T_direct_reference */
|
static int hf_per_direct_reference = -1; /* T_direct_reference */
|
||||||
static int hf_per_indirect_reference = -1; /* T_indirect_reference */
|
static int hf_per_indirect_reference = -1; /* T_indirect_reference */
|
||||||
|
@ -410,7 +411,7 @@ static guint32
|
||||||
dissect_per_normally_small_nonnegative_whole_number(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, guint32 *length)
|
dissect_per_normally_small_nonnegative_whole_number(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tree *tree, int hf_index, guint32 *length)
|
||||||
{
|
{
|
||||||
gboolean small_number, length_bit;
|
gboolean small_number, length_bit;
|
||||||
guint32 len;
|
guint32 len, length_determinant;
|
||||||
proto_item *pi;
|
proto_item *pi;
|
||||||
|
|
||||||
DEBUG_ENTRY("dissect_per_normally_small_nonnegative_whole_number");
|
DEBUG_ENTRY("dissect_per_normally_small_nonnegative_whole_number");
|
||||||
|
@ -439,7 +440,37 @@ DEBUG_ENTRY("dissect_per_normally_small_nonnegative_whole_number");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 10.6.2 */
|
/* 10.6.2 */
|
||||||
offset=dissect_per_length_determinant(tvb, offset, actx, tree, hf_index, length);
|
offset=dissect_per_length_determinant(tvb, offset, actx, tree, hf_per_normally_small_nonnegative_whole_number_length, &length_determinant);
|
||||||
|
switch (length_determinant) {
|
||||||
|
case 0:
|
||||||
|
*length = 0;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
*length = tvb_get_bits8(tvb, offset, 8);
|
||||||
|
offset += 8;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
*length = tvb_get_bits16(tvb, offset, 16, ENC_BIG_ENDIAN);
|
||||||
|
offset += 16;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
*length = tvb_get_bits32(tvb, offset, 24, ENC_BIG_ENDIAN);
|
||||||
|
offset += 24;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
*length = tvb_get_bits32(tvb, offset, 32, ENC_BIG_ENDIAN);
|
||||||
|
offset += 32;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
PER_NOT_DECODED_YET("too long integer(per_normally_small_nonnegative_whole_number)");
|
||||||
|
offset += 8*length_determinant;
|
||||||
|
*length = 0;
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
if(hf_index!=-1){
|
||||||
|
pi = proto_tree_add_uint(tree, hf_index, tvb, (offset-(8*length_determinant))>>3, length_determinant, *length);
|
||||||
|
if (!display_internal_per_fields) PROTO_ITEM_SET_HIDDEN(pi);
|
||||||
|
}
|
||||||
|
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
@ -1079,7 +1110,7 @@ dissect_per_integer64b(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tr
|
||||||
/* gassert here? */
|
/* gassert here? */
|
||||||
if(length>8){
|
if(length>8){
|
||||||
PER_NOT_DECODED_YET("too long integer (64b)");
|
PER_NOT_DECODED_YET("too long integer (64b)");
|
||||||
length=4;
|
length=8;
|
||||||
}
|
}
|
||||||
|
|
||||||
val=0;
|
val=0;
|
||||||
|
@ -2526,6 +2557,9 @@ proto_register_per(void)
|
||||||
{ &hf_per_bit_string_length,
|
{ &hf_per_bit_string_length,
|
||||||
{ "Bit String Length", "per.bit_string_length", FT_UINT32, BASE_DEC,
|
{ "Bit String Length", "per.bit_string_length", FT_UINT32, BASE_DEC,
|
||||||
NULL, 0, "Number of bits in the Bit String", HFILL }},
|
NULL, 0, "Number of bits in the Bit String", HFILL }},
|
||||||
|
{ &hf_per_normally_small_nonnegative_whole_number_length,
|
||||||
|
{ "Normally Small Non-negative Whole Number Length", "per.normally_small_nonnegative_whole_number_length", FT_UINT32, BASE_DEC,
|
||||||
|
NULL, 0, "Number of bytes in the Normally Small Non-negative Whole Number", HFILL }},
|
||||||
{ &hf_per_const_int_len,
|
{ &hf_per_const_int_len,
|
||||||
{ "Constrained Integer Length", "per.const_int_len", FT_UINT32, BASE_DEC,
|
{ "Constrained Integer Length", "per.const_int_len", FT_UINT32, BASE_DEC,
|
||||||
NULL, 0, "Number of bytes in the Constrained Integer", HFILL }},
|
NULL, 0, "Number of bytes in the Constrained Integer", HFILL }},
|
||||||
|
|
Loading…
Reference in New Issue