diff options
author | Evan Huus <eapache@gmail.com> | 2013-04-26 19:23:36 +0000 |
---|---|---|
committer | Evan Huus <eapache@gmail.com> | 2013-04-26 19:23:36 +0000 |
commit | 5b8a3df249f8bca8cbb166b88c0dd0c534f90e82 (patch) | |
tree | 594afabdce52037e097d59c7e096bdeb9674413e /epan/dissectors/packet-ber.c | |
parent | 63ef04ec84bc7bee9008be686e2e362058229643 (diff) |
From me: only sign-extend BER integers if the field is actually signed
From Guy: override two fields in the GOOSE ASN.1 dissector to be unsigned
Together these fix
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8250
svn path=/trunk/; revision=49055
Diffstat (limited to 'epan/dissectors/packet-ber.c')
-rw-r--r-- | epan/dissectors/packet-ber.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/epan/dissectors/packet-ber.c b/epan/dissectors/packet-ber.c index cc6c9bab67..6ff7ae3314 100644 --- a/epan/dissectors/packet-ber.c +++ b/epan/dissectors/packet-ber.c @@ -1710,9 +1710,10 @@ printf("INTEGERnew dissect_ber_integer(%s) entered implicit_tag:%d \n", name, im val=0; if (len > 0) { - /* extend sign bit */ - guint8 first = tvb_get_guint8(tvb, offset); - if (first & 0x80) { + /* extend sign bit for signed fields */ + guint8 first = tvb_get_guint8(tvb, offset); + enum ftenum type = proto_registrar_get_ftype(hf_id); + if (first & 0x80 && IS_FT_INT(type)) { val = -1; } if ((len > 1) && decode_warning_leading_zero_bits) { |