diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2018-06-08 14:32:18 +0200 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2018-06-08 16:38:22 +0000 |
commit | ee88dc8196d248ba88e0d8fa6c380d144d9a9b6a (patch) | |
tree | b51743194dedb0291d76823f5b90577a195282d1 /epan/dissectors/packet-bluetooth.c | |
parent | 650e37915408cc32e4391f0f03efed040e47b8d3 (diff) |
BT Common: fix dissection of 32 bits and 128 bits UUID
They are in little endian, not big endian.
Bug: 14843
Change-Id: I1680e84bfce9a03eaeeda9e38c84b471fda2bd8e
Reviewed-on: https://code.wireshark.org/review/28116
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Diffstat (limited to 'epan/dissectors/packet-bluetooth.c')
-rw-r--r-- | epan/dissectors/packet-bluetooth.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/epan/dissectors/packet-bluetooth.c b/epan/dissectors/packet-bluetooth.c index 838fbdd9b9..bf75368f3e 100644 --- a/epan/dissectors/packet-bluetooth.c +++ b/epan/dissectors/packet-bluetooth.c @@ -2726,7 +2726,7 @@ get_uuid(tvbuff_t *tvb, gint offset, gint size) memset(&uuid, 0, sizeof(uuid)); - if (size != 2 && size != 16) { + if (size != 2 && size != 4 && size != 16) { return uuid; } @@ -2734,7 +2734,17 @@ get_uuid(tvbuff_t *tvb, gint offset, gint size) if (size == 2) { uuid.data[0] = tvb_get_guint8(tvb, offset + 1); uuid.data[1] = tvb_get_guint8(tvb, offset); - } else if (size == 16) { + + uuid.bt_uuid = uuid.data[1] | uuid.data[0] << 8; + } else if (size == 4) { + uuid.data[0] = tvb_get_guint8(tvb, offset + 3); + uuid.data[1] = tvb_get_guint8(tvb, offset + 2); + uuid.data[2] = tvb_get_guint8(tvb, offset + 1); + uuid.data[3] = tvb_get_guint8(tvb, offset); + + if (uuid.data[0] == 0x00 && uuid.data[1] == 0x00) + uuid.bt_uuid = uuid.data[2] | uuid.data[3] << 8; + } else { uuid.data[0] = tvb_get_guint8(tvb, offset + 15); uuid.data[1] = tvb_get_guint8(tvb, offset + 14); uuid.data[2] = tvb_get_guint8(tvb, offset + 13); @@ -2751,17 +2761,13 @@ get_uuid(tvbuff_t *tvb, gint offset, gint size) uuid.data[13] = tvb_get_guint8(tvb, offset + 2); uuid.data[14] = tvb_get_guint8(tvb, offset + 1); uuid.data[15] = tvb_get_guint8(tvb, offset); - } - if (size == 2) { - uuid.bt_uuid = uuid.data[1] | uuid.data[0] << 8; - } else { if (uuid.data[0] == 0x00 && uuid.data[1] == 0x00 && - uuid.data[4] == 0x00 && uuid.data[5] == 0x00 && uuid.data[6] == 0x10 && - uuid.data[7] == 0x00 && uuid.data[8] == 0x80 && uuid.data[9] == 0x00 && - uuid.data[10] == 0x00 && uuid.data[11] == 0x80 && uuid.data[12] == 0x5F && - uuid.data[13] == 0x9B && uuid.data[14] == 0x34 && uuid.data[15] == 0xFB) - uuid.bt_uuid = uuid.data[2] | uuid.data[3] << 8; + uuid.data[4] == 0x00 && uuid.data[5] == 0x00 && uuid.data[6] == 0x10 && + uuid.data[7] == 0x00 && uuid.data[8] == 0x80 && uuid.data[9] == 0x00 && + uuid.data[10] == 0x00 && uuid.data[11] == 0x80 && uuid.data[12] == 0x5F && + uuid.data[13] == 0x9B && uuid.data[14] == 0x34 && uuid.data[15] == 0xFB) + uuid.bt_uuid = uuid.data[2] | uuid.data[3] << 8; } return uuid; |