aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-ber.c
diff options
context:
space:
mode:
authorEvan Huus <eapache@gmail.com>2013-04-26 19:23:36 +0000
committerEvan Huus <eapache@gmail.com>2013-04-26 19:23:36 +0000
commit5b8a3df249f8bca8cbb166b88c0dd0c534f90e82 (patch)
tree594afabdce52037e097d59c7e096bdeb9674413e /epan/dissectors/packet-ber.c
parent63ef04ec84bc7bee9008be686e2e362058229643 (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.c7
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) {