| Backported commit from upstream master branch (post 5.50 release), which |
| resolves assertion failures in several unit tests. |
| |
| https://git.kernel.org/pub/scm/bluetooth/bluez.git/patch/?id=0be5246170 |
| |
| Upstream-Status: Backport |
| Signed-off-by: Ross Burton <ross.burton@intel.com> |
| |
| diff --git a/unit/test-avctp.c b/unit/test-avctp.c |
| index 3bc3569..24de663 100644 |
| --- a/unit/test-avctp.c |
| +++ b/unit/test-avctp.c |
| @@ -43,7 +43,7 @@ |
| |
| struct test_pdu { |
| bool valid; |
| - const uint8_t *data; |
| + uint8_t *data; |
| size_t size; |
| }; |
| |
| @@ -66,7 +66,7 @@ struct context { |
| #define raw_pdu(args...) \ |
| { \ |
| .valid = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -91,6 +91,11 @@ static void test_debug(const char *str, void *user_data) |
| static void test_free(gconstpointer user_data) |
| { |
| const struct test_data *data = user_data; |
| + struct test_pdu *pdu; |
| + int i; |
| + |
| + for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++) |
| + g_free(pdu->data); |
| |
| g_free(data->test_name); |
| g_free(data->pdu_list); |
| diff --git a/unit/test-avdtp.c b/unit/test-avdtp.c |
| index dd8aed7..e2c951a 100644 |
| --- a/unit/test-avdtp.c |
| +++ b/unit/test-avdtp.c |
| @@ -47,7 +47,7 @@ |
| struct test_pdu { |
| bool valid; |
| bool fragmented; |
| - const uint8_t *data; |
| + uint8_t *data; |
| size_t size; |
| }; |
| |
| @@ -61,7 +61,7 @@ struct test_data { |
| #define raw_pdu(args...) \ |
| { \ |
| .valid = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -69,7 +69,7 @@ struct test_data { |
| { \ |
| .valid = true, \ |
| .fragmented = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -81,7 +81,7 @@ struct test_data { |
| static struct test_data data; \ |
| data.test_name = g_strdup(name); \ |
| data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ |
| - tester_add(name, &data, NULL, function, NULL); \ |
| + tester_add(name, &data, NULL, function, NULL); \ |
| } while (0) |
| |
| struct context { |
| @@ -109,6 +109,11 @@ static void test_debug(const char *str, void *user_data) |
| static void test_free(gconstpointer user_data) |
| { |
| const struct test_data *data = user_data; |
| + struct test_pdu *pdu; |
| + int i; |
| + |
| + for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++) |
| + g_free(pdu->data); |
| |
| g_free(data->test_name); |
| g_free(data->pdu_list); |
| diff --git a/unit/test-avrcp.c b/unit/test-avrcp.c |
| index 01307e6..f1aa353 100644 |
| --- a/unit/test-avrcp.c |
| +++ b/unit/test-avrcp.c |
| @@ -49,7 +49,7 @@ struct test_pdu { |
| bool fragmented; |
| bool continuing; |
| bool browse; |
| - const uint8_t *data; |
| + uint8_t *data; |
| size_t size; |
| }; |
| |
| @@ -74,7 +74,7 @@ struct context { |
| #define raw_pdu(args...) \ |
| { \ |
| .valid = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -82,7 +82,7 @@ struct context { |
| { \ |
| .valid = true, \ |
| .browse = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -90,7 +90,7 @@ struct context { |
| { \ |
| .valid = true, \ |
| .fragmented = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -98,7 +98,7 @@ struct context { |
| { \ |
| .valid = true, \ |
| .continuing = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -123,6 +123,11 @@ static void test_debug(const char *str, void *user_data) |
| static void test_free(gconstpointer user_data) |
| { |
| const struct test_data *data = user_data; |
| + struct test_pdu *pdu; |
| + int i; |
| + |
| + for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++) |
| + g_free(pdu->data); |
| |
| g_free(data->test_name); |
| g_free(data->pdu_list); |
| diff --git a/unit/test-gatt.c b/unit/test-gatt.c |
| index c7e28f8..d49f7a0 100644 |
| --- a/unit/test-gatt.c |
| +++ b/unit/test-gatt.c |
| @@ -48,7 +48,7 @@ |
| |
| struct test_pdu { |
| bool valid; |
| - const uint8_t *data; |
| + uint8_t *data; |
| size_t size; |
| }; |
| |
| @@ -86,7 +86,7 @@ struct context { |
| #define raw_pdu(args...) \ |
| { \ |
| .valid = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -306,6 +306,11 @@ static bt_uuid_t uuid_char_128 = { |
| static void test_free(gconstpointer user_data) |
| { |
| const struct test_data *data = user_data; |
| + struct test_pdu *pdu; |
| + int i; |
| + |
| + for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++) |
| + g_free(pdu->data); |
| |
| g_free(data->test_name); |
| g_free(data->pdu_list); |
| @@ -1911,6 +1916,8 @@ static void test_server(gconstpointer data) |
| g_assert_cmpint(len, ==, pdu.size); |
| |
| util_hexdump('<', pdu.data, len, test_debug, "GATT: "); |
| + |
| + g_free(pdu.data); |
| } |
| |
| static void test_search_primary(gconstpointer data) |
| diff --git a/unit/test-hfp.c b/unit/test-hfp.c |
| index f2b9622..890eee6 100644 |
| --- a/unit/test-hfp.c |
| +++ b/unit/test-hfp.c |
| @@ -43,7 +43,7 @@ struct context { |
| |
| struct test_pdu { |
| bool valid; |
| - const uint8_t *data; |
| + uint8_t *data; |
| size_t size; |
| enum hfp_gw_cmd_type type; |
| bool fragmented; |
| @@ -63,7 +63,7 @@ struct test_data { |
| #define raw_pdu(args...) \ |
| { \ |
| .valid = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| } |
| |
| @@ -75,7 +75,7 @@ struct test_data { |
| #define type_pdu(cmd_type, args...) \ |
| { \ |
| .valid = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| .type = cmd_type, \ |
| } |
| @@ -83,7 +83,7 @@ struct test_data { |
| #define frg_pdu(args...) \ |
| { \ |
| .valid = true, \ |
| - .data = data(args), \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| .size = sizeof(data(args)), \ |
| .fragmented = true, \ |
| } |
| @@ -119,6 +119,11 @@ struct test_data { |
| static void test_free(gconstpointer user_data) |
| { |
| const struct test_data *data = user_data; |
| + struct test_pdu *pdu; |
| + int i; |
| + |
| + for (i = 0; (pdu = &data->pdu_list[i]) && pdu->valid; i++) |
| + g_free(pdu->data); |
| |
| g_free(data->test_name); |
| g_free(data->pdu_list); |
| diff --git a/unit/test-hog.c b/unit/test-hog.c |
| index d117968..25bdb42 100644 |
| --- a/unit/test-hog.c |
| +++ b/unit/test-hog.c |
| @@ -68,11 +68,11 @@ struct context { |
| |
| #define data(args...) ((const unsigned char[]) { args }) |
| |
| -#define raw_pdu(args...) \ |
| -{ \ |
| - .valid = true, \ |
| - .data = data(args), \ |
| - .size = sizeof(data(args)),\ |
| +#define raw_pdu(args...) \ |
| +{ \ |
| + .valid = true, \ |
| + .data = g_memdup(data(args), sizeof(data(args))), \ |
| + .size = sizeof(data(args)), \ |
| } |
| |
| #define false_pdu() \ |
| diff --git a/unit/test-sdp.c b/unit/test-sdp.c |
| index ac921a9..c71ee1f 100644 |
| --- a/unit/test-sdp.c |
| +++ b/unit/test-sdp.c |
| @@ -59,14 +59,14 @@ struct test_data { |
| #define raw_pdu(args...) \ |
| { \ |
| .valid = true, \ |
| - .raw_data = raw_data(args), \ |
| + .raw_data = g_memdup(raw_data(args), sizeof(raw_data(args))), \ |
| .raw_size = sizeof(raw_data(args)), \ |
| } |
| |
| #define raw_pdu_cont(cont, args...) \ |
| { \ |
| .valid = true, \ |
| - .raw_data = raw_data(args), \ |
| + .raw_data = g_memdup(raw_data(args), sizeof(raw_data(args))), \ |
| .raw_size = sizeof(raw_data(args)), \ |
| .cont_len = cont, \ |
| } |
| @@ -103,7 +103,7 @@ struct test_data_de { |
| #define define_test_de_attr(name, input, exp) \ |
| do { \ |
| static struct test_data_de data; \ |
| - data.input_data = input; \ |
| + data.input_data = g_memdup(input, sizeof(input)); \ |
| data.input_size = sizeof(input); \ |
| data.expected = exp; \ |
| tester_add("/sdp/DE/ATTR/" name, &data, NULL, \ |