aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-bluetooth.c
diff options
context:
space:
mode:
authorPascal Quantin <pascal.quantin@gmail.com>2018-06-08 14:32:18 +0200
committerPascal Quantin <pascal.quantin@gmail.com>2018-06-08 16:38:22 +0000
commitee88dc8196d248ba88e0d8fa6c380d144d9a9b6a (patch)
treeb51743194dedb0291d76823f5b90577a195282d1 /epan/dissectors/packet-bluetooth.c
parent650e37915408cc32e4391f0f03efed040e47b8d3 (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.c28
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;