from Luis Ontanon:
calculate the value of a ber integer by hand instead of just using proto_tree_add_item(). https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3230 svn path=/trunk/; revision=32113
This commit is contained in:
parent
2f8830b4d0
commit
130d309444
|
@ -750,10 +750,31 @@ indexing_done:
|
|||
} else {
|
||||
switch(ber_class|(tag<<4)) {
|
||||
case BER_CLASS_UNI|(BER_UNI_TAG_INTEGER<<4):
|
||||
max_len = 4; min_len = 1;
|
||||
if (value_len > (guint)max_len && value_len < (guint)min_len) format_error = BER_WRONG_LENGTH;
|
||||
hfid = hf_snmp_integer32_value;
|
||||
break;
|
||||
{
|
||||
gint64 val=0;
|
||||
unsigned offset = value_offset;
|
||||
unsigned i;
|
||||
|
||||
max_len = 5; min_len = 1;
|
||||
if (value_len > (guint)max_len && value_len < (guint)min_len) {
|
||||
format_error = BER_WRONG_LENGTH;
|
||||
break;
|
||||
}
|
||||
|
||||
if(value_len > 0) {
|
||||
/* extend sign bit */
|
||||
if(tvb_get_guint8(tvb, offset)&0x80){
|
||||
val=-1;
|
||||
}
|
||||
for(i=0;i<value_len;i++){
|
||||
val=(val<<8)|tvb_get_guint8(tvb, offset);
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
proto_tree_add_int64(pt_varbind, hf_snmp_integer32_value, tvb,value_offset,value_len, val);
|
||||
|
||||
goto already_added;
|
||||
}
|
||||
case BER_CLASS_UNI|(BER_UNI_TAG_OCTETSTRING<<4):
|
||||
hfid = hf_snmp_octetstring_value;
|
||||
break;
|
||||
|
@ -804,6 +825,8 @@ indexing_done:
|
|||
pi_value = proto_tree_add_item(pt_varbind,hfid,tvb,value_offset,value_len,FALSE);
|
||||
expert_add_info_format(actx->pinfo, pi_value, PI_UNDECODED, PI_NOTE, "Unresolved value, Missing MIB");
|
||||
}
|
||||
|
||||
already_added:
|
||||
oid_info_is_ok = FALSE;
|
||||
}
|
||||
|
||||
|
|
|
@ -852,10 +852,31 @@ indexing_done:
|
|||
} else {
|
||||
switch(ber_class|(tag<<4)) {
|
||||
case BER_CLASS_UNI|(BER_UNI_TAG_INTEGER<<4):
|
||||
max_len = 4; min_len = 1;
|
||||
if (value_len > (guint)max_len && value_len < (guint)min_len) format_error = BER_WRONG_LENGTH;
|
||||
hfid = hf_snmp_integer32_value;
|
||||
break;
|
||||
{
|
||||
gint64 val=0;
|
||||
unsigned offset = value_offset;
|
||||
unsigned i;
|
||||
|
||||
max_len = 5; min_len = 1;
|
||||
if (value_len > (guint)max_len && value_len < (guint)min_len) {
|
||||
format_error = BER_WRONG_LENGTH;
|
||||
break;
|
||||
}
|
||||
|
||||
if(value_len > 0) {
|
||||
/* extend sign bit */
|
||||
if(tvb_get_guint8(tvb, offset)&0x80){
|
||||
val=-1;
|
||||
}
|
||||
for(i=0;i<value_len;i++){
|
||||
val=(val<<8)|tvb_get_guint8(tvb, offset);
|
||||
offset++;
|
||||
}
|
||||
}
|
||||
proto_tree_add_int64(pt_varbind, hf_snmp_integer32_value, tvb,value_offset,value_len, val);
|
||||
|
||||
goto already_added;
|
||||
}
|
||||
case BER_CLASS_UNI|(BER_UNI_TAG_OCTETSTRING<<4):
|
||||
hfid = hf_snmp_octetstring_value;
|
||||
break;
|
||||
|
@ -906,6 +927,8 @@ indexing_done:
|
|||
pi_value = proto_tree_add_item(pt_varbind,hfid,tvb,value_offset,value_len,FALSE);
|
||||
expert_add_info_format(actx->pinfo, pi_value, PI_UNDECODED, PI_NOTE, "Unresolved value, Missing MIB");
|
||||
}
|
||||
|
||||
already_added:
|
||||
oid_info_is_ok = FALSE;
|
||||
}
|
||||
|
||||
|
@ -2663,7 +2686,7 @@ static void dissect_SMUX_PDUs_PDU(tvbuff_t *tvb _U_, packet_info *pinfo _U_, pro
|
|||
|
||||
|
||||
/*--- End of included file: packet-snmp-fn.c ---*/
|
||||
#line 1443 "packet-snmp-template.c"
|
||||
#line 1466 "packet-snmp-template.c"
|
||||
|
||||
|
||||
guint
|
||||
|
@ -3511,7 +3534,7 @@ void proto_register_snmp(void) {
|
|||
"snmp.T_operation", HFILL }},
|
||||
|
||||
/*--- End of included file: packet-snmp-hfarr.c ---*/
|
||||
#line 2026 "packet-snmp-template.c"
|
||||
#line 2049 "packet-snmp-template.c"
|
||||
};
|
||||
|
||||
/* List of subtrees */
|
||||
|
@ -3551,7 +3574,7 @@ void proto_register_snmp(void) {
|
|||
&ett_snmp_RReqPDU_U,
|
||||
|
||||
/*--- End of included file: packet-snmp-ettarr.c ---*/
|
||||
#line 2042 "packet-snmp-template.c"
|
||||
#line 2065 "packet-snmp-template.c"
|
||||
};
|
||||
module_t *snmp_module;
|
||||
|
||||
|
|
Loading…
Reference in New Issue