diff options
Diffstat (limited to 'epan/dissectors/asn1/snmp')
-rw-r--r-- | epan/dissectors/asn1/snmp/packet-snmp-template.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/epan/dissectors/asn1/snmp/packet-snmp-template.c b/epan/dissectors/asn1/snmp/packet-snmp-template.c index 8a9ecfd38b..acdb2acd9b 100644 --- a/epan/dissectors/asn1/snmp/packet-snmp-template.c +++ b/epan/dissectors/asn1/snmp/packet-snmp-template.c @@ -1116,7 +1116,8 @@ dissect_snmp_engineid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int o { proto_item *item = NULL; guint8 conformance, format; - guint32 enterpriseid, seconds; + guint32 enterpriseid; + time_t seconds; nstime_t ts; int len_remain = len; @@ -1201,13 +1202,17 @@ dissect_snmp_engineid(proto_tree *tree, packet_info *pinfo, tvbuff_t *tvb, int o /* most common enterprise-specific format: (ucd|net)-snmp random */ if ((enterpriseid==2021)||(enterpriseid==8072)) { proto_item_append_text(item, (enterpriseid==2021) ? ": UCD-SNMP Random" : ": Net-SNMP Random"); - /* demystify: 4B/8B random, 4B epoch seconds */ + /* demystify: 4B random, 4B/8B epoch seconds */ if ((len_remain==8) || (len_remain==12)) { - proto_tree_add_item(tree, hf_snmp_engineid_data, tvb, offset, len_remain - 4, ENC_NA); - seconds = tvb_get_letohl(tvb, offset + (len_remain - 4)); + proto_tree_add_item(tree, hf_snmp_engineid_data, tvb, offset, 4, ENC_NA); + if (len_remain==8) { + seconds = (time_t)tvb_get_letohl(tvb, offset + 4); + } else { + seconds = (time_t)tvb_get_letohi64(tvb, offset + 4); + } ts.secs = seconds; ts.nsecs = 0; - proto_tree_add_time_format_value(tree, hf_snmp_engineid_time, tvb, offset + (len_remain - 4), 4, + proto_tree_add_time_format_value(tree, hf_snmp_engineid_time, tvb, offset + 4, len_remain - 4, &ts, "%s", abs_time_secs_to_str(wmem_packet_scope(), seconds, ABSOLUTE_TIME_LOCAL, TRUE)); offset+=len_remain; |