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_octet_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_direct_reference = -1; /* T_direct_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)
|
||||
{
|
||||
gboolean small_number, length_bit;
|
||||
guint32 len;
|
||||
guint32 len, length_determinant;
|
||||
proto_item *pi;
|
||||
|
||||
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 */
|
||||
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;
|
||||
}
|
||||
|
@ -1079,7 +1110,7 @@ dissect_per_integer64b(tvbuff_t *tvb, guint32 offset, asn1_ctx_t *actx, proto_tr
|
|||
/* gassert here? */
|
||||
if(length>8){
|
||||
PER_NOT_DECODED_YET("too long integer (64b)");
|
||||
length=4;
|
||||
length=8;
|
||||
}
|
||||
|
||||
val=0;
|
||||
|
@ -2526,6 +2557,9 @@ proto_register_per(void)
|
|||
{ &hf_per_bit_string_length,
|
||||
{ "Bit String Length", "per.bit_string_length", FT_UINT32, BASE_DEC,
|
||||
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,
|
||||
{ "Constrained Integer Length", "per.const_int_len", FT_UINT32, BASE_DEC,
|
||||
NULL, 0, "Number of bytes in the Constrained Integer", HFILL }},
|
||||
|
|
Loading…
Reference in New Issue