diff --git a/0002-Use-g_memdup2-everywhere.patch b/0002-Use-g_memdup2-everywhere.patch new file mode 100644 index 0000000..60b711c --- /dev/null +++ b/0002-Use-g_memdup2-everywhere.patch @@ -0,0 +1,997 @@ +From 393a58bbe5174123ee9d52c03a75b08219642024 Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Mon, 3 May 2021 15:06:36 +0200 +Subject: [PATCH] Use g_memdup2 everywhere + +--- + android/a2dp.c | 8 ++--- + android/avctp.c | 4 +-- + android/avrcp-lib.c | 2 +- + android/gatt.c | 4 +-- + android/hidhost.c | 2 +- + android/tester-main.c | 70 +++++++++++++++++++------------------- + attrib/gatt.c | 6 ++-- + client/gatt.c | 2 +- + gobex/gobex-header.c | 4 +-- + gobex/gobex-packet.c | 2 +- + obexd/src/obex.c | 2 +- + plugins/neard.c | 6 ++-- + plugins/policy.c | 4 +-- + profiles/audio/avctp.c | 4 +-- + profiles/audio/avrcp.c | 6 ++-- + profiles/battery/bas.c | 2 +- + profiles/battery/battery.c | 2 +- + profiles/deviceinfo/dis.c | 2 +- + profiles/input/hog-lib.c | 6 ++-- + profiles/scanparam/scpp.c | 2 +- + src/attrib-server.c | 2 +- + src/eir.c | 4 +-- + tools/gatt-service.c | 6 ++-- + tools/mesh-gatt/gatt.c | 2 +- + unit/test-avctp.c | 4 +-- + unit/test-avdtp.c | 6 ++-- + unit/test-avrcp.c | 10 +++--- + unit/test-gatt.c | 4 +-- + unit/test-hfp.c | 10 +++--- + unit/test-hog.c | 4 +-- + unit/test-sdp.c | 8 ++--- + unit/test-uhid.c | 2 +- + 32 files changed, 101 insertions(+), 101 deletions(-) + +diff --git a/android/a2dp.c b/android/a2dp.c +index e24f793..1d9538a 100644 +--- a/android/a2dp.c ++++ b/android/a2dp.c +@@ -428,7 +428,7 @@ static struct a2dp_preset *sbc_select_range(void *caps, uint8_t caps_len, + + p = g_new0(struct a2dp_preset, 1); + p->len = conf_len; +- p->data = g_memdup(conf, p->len); ++ p->data = g_memdup2(conf, p->len); + + return p; + } +@@ -448,7 +448,7 @@ static struct a2dp_preset *aac_select_range(void *caps, uint8_t caps_len, + + p = g_new0(struct a2dp_preset, 1); + p->len = conf_len; +- p->data = g_memdup(conf, p->len); ++ p->data = g_memdup2(conf, p->len); + + return p; + } +@@ -1036,7 +1036,7 @@ static gboolean sep_setconf_ind(struct avdtp *session, + + preset = g_new0(struct a2dp_preset, 1); + preset->len = cap->length - sizeof(*codec); +- preset->data = g_memdup(codec->data, preset->len); ++ preset->data = g_memdup2(codec->data, preset->len); + + if (check_config(endpoint, preset) < 0) { + preset_free(preset); +@@ -1365,7 +1365,7 @@ static GSList *parse_presets(const struct audio_preset *p, uint8_t count, + + preset = g_new0(struct a2dp_preset, 1); + preset->len = p->len; +- preset->data = g_memdup(p->data, preset->len); ++ preset->data = g_memdup2(p->data, preset->len); + l = g_slist_append(l, preset); + + len -= preset->len; +diff --git a/android/avctp.c b/android/avctp.c +index c2ea5f4..d1b8fe3 100644 +--- a/android/avctp.c ++++ b/android/avctp.c +@@ -1179,7 +1179,7 @@ static int avctp_send_req(struct avctp *session, uint8_t code, uint8_t subunit, + + for (i = 0; i < iov_cnt; i++) { + pdu[i].iov_len = iov[i].iov_len; +- pdu[i].iov_base = g_memdup(iov[i].iov_base, iov[i].iov_len); ++ pdu[i].iov_base = g_memdup2(iov[i].iov_base, iov[i].iov_len); + } + + req = g_new0(struct avctp_control_req, 1); +@@ -1220,7 +1220,7 @@ int avctp_send_browsing_req(struct avctp *session, + + for (i = 0; i < iov_cnt; i++) { + pdu[i].iov_len = iov[i].iov_len; +- pdu[i].iov_base = g_memdup(iov[i].iov_base, iov[i].iov_len); ++ pdu[i].iov_base = g_memdup2(iov[i].iov_base, iov[i].iov_len); + } + + req = g_new0(struct avctp_browsing_req, 1); +diff --git a/android/avrcp-lib.c b/android/avrcp-lib.c +index 2007d09..ededdcf 100644 +--- a/android/avrcp-lib.c ++++ b/android/avrcp-lib.c +@@ -2620,7 +2620,7 @@ static char *parse_folder_list(uint8_t *params, uint16_t params_len, + return NULL; + } + +- folders[count] = g_memdup(¶ms[i], len); ++ folders[count] = g_memdup2(¶ms[i], len); + i += len; + } + +diff --git a/android/gatt.c b/android/gatt.c +index a8a0c48..6e8c431 100644 +--- a/android/gatt.c ++++ b/android/gatt.c +@@ -1338,7 +1338,7 @@ static void discover_primary_cb(uint8_t status, GSList *services, + } + + bt_uuid_to_uuid128(&uuid, &u128); +- new_uuid = g_memdup(&u128.value.u128, sizeof(u128.value.u128)); ++ new_uuid = g_memdup2(&u128.value.u128, sizeof(u128.value.u128)); + + uuids = g_slist_prepend(uuids, new_uuid); + } +@@ -6633,7 +6633,7 @@ static uint8_t write_prep_request(const uint8_t *cmd, uint16_t cmd_len, + + queue_push_tail(dev->pending_requests, data); + +- data->value = g_memdup(value, vlen); ++ data->value = g_memdup2(value, vlen); + data->length = vlen; + + if (!gatt_db_attribute_write(attrib, offset, value, vlen, cmd[0], +diff --git a/android/hidhost.c b/android/hidhost.c +index 016382e..6f0ec85 100644 +--- a/android/hidhost.c ++++ b/android/hidhost.c +@@ -689,7 +689,7 @@ static void hid_sdp_search_cb(sdp_list_t *recs, int err, gpointer data) + goto fail; + + dev->rd_size = data->unitSize; +- dev->rd_data = g_memdup(data->val.str, data->unitSize); ++ dev->rd_data = g_memdup2(data->val.str, data->unitSize); + } + } + +diff --git a/android/tester-main.c b/android/tester-main.c +index 2bfa770..c09bc0a 100644 +--- a/android/tester-main.c ++++ b/android/tester-main.c +@@ -1253,7 +1253,7 @@ static bt_property_t *copy_properties(int num_properties, + for (i = 0; i < num_properties; i++) { + props[i].type = properties[i].type; + props[i].len = properties[i].len; +- props[i].val = g_memdup(properties[i].val, properties[i].len); ++ props[i].val = g_memdup2(properties[i].val, properties[i].len); + } + + return props; +@@ -1268,7 +1268,7 @@ static bt_property_t *repack_properties(int num_properties, + for (i = 0; i < num_properties; i++) { + props[i].type = properties[i]->type; + props[i].len = properties[i]->len; +- props[i].val = g_memdup(properties[i]->val, properties[i]->len); ++ props[i].val = g_memdup2(properties[i]->val, properties[i]->len); + } + + return props; +@@ -1281,7 +1281,7 @@ static bt_property_t *create_property(bt_property_type_t type, void *val, + + prop->type = type; + prop->len = len; +- prop->val = g_memdup(val, len); ++ prop->val = g_memdup2(val, len); + + return prop; + } +@@ -1615,7 +1615,7 @@ static void gattc_search_result_cb(int conn_id, btgatt_srvc_id_t *srvc_id) + + step->callback = CB_GATTC_SEARCH_RESULT; + step->callback_result.conn_id = conn_id; +- step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id)); ++ step->callback_result.service = g_memdup2(srvc_id, sizeof(*srvc_id)); + + schedule_callback_verification(step); + } +@@ -1639,8 +1639,8 @@ static void gattc_get_characteristic_cb(int conn_id, int status, + step->callback = CB_GATTC_GET_CHARACTERISTIC; + step->callback_result.status = status; + step->callback_result.conn_id = conn_id; +- step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id)); +- step->callback_result.characteristic = g_memdup(char_id, ++ step->callback_result.service = g_memdup2(srvc_id, sizeof(*srvc_id)); ++ step->callback_result.characteristic = g_memdup2(char_id, + sizeof(*char_id)); + step->callback_result.char_prop = char_prop; + +@@ -1656,10 +1656,10 @@ static void gattc_get_descriptor_cb(int conn_id, int status, + step->callback = CB_GATTC_GET_DESCRIPTOR; + step->callback_result.status = status; + step->callback_result.conn_id = conn_id; +- step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id)); +- step->callback_result.characteristic = g_memdup(char_id, ++ step->callback_result.service = g_memdup2(srvc_id, sizeof(*srvc_id)); ++ step->callback_result.characteristic = g_memdup2(char_id, + sizeof(*char_id)); +- step->callback_result.descriptor = g_memdup(descr_id, ++ step->callback_result.descriptor = g_memdup2(descr_id, + sizeof(*descr_id)); + + schedule_callback_verification(step); +@@ -1673,8 +1673,8 @@ static void gattc_get_included_service_cb(int conn_id, int status, + step->callback = CB_GATTC_GET_INCLUDED_SERVICE; + step->callback_result.status = status; + step->callback_result.conn_id = conn_id; +- step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id)); +- step->callback_result.included = g_memdup(incl_srvc_id, ++ step->callback_result.service = g_memdup2(srvc_id, sizeof(*srvc_id)); ++ step->callback_result.included = g_memdup2(incl_srvc_id, + sizeof(*srvc_id)); + + schedule_callback_verification(step); +@@ -1688,7 +1688,7 @@ static void gattc_read_characteristic_cb(int conn_id, int status, + step->callback = CB_GATTC_READ_CHARACTERISTIC; + step->callback_result.status = status; + step->callback_result.conn_id = conn_id; +- step->callback_result.read_params = g_memdup(p_data, sizeof(*p_data)); ++ step->callback_result.read_params = g_memdup2(p_data, sizeof(*p_data)); + + schedule_callback_verification(step); + } +@@ -1701,7 +1701,7 @@ static void gattc_read_descriptor_cb(int conn_id, int status, + step->callback = CB_GATTC_READ_DESCRIPTOR; + step->callback_result.status = status; + step->callback_result.conn_id = conn_id; +- step->callback_result.read_params = g_memdup(p_data, sizeof(*p_data)); ++ step->callback_result.read_params = g_memdup2(p_data, sizeof(*p_data)); + + schedule_callback_verification(step); + } +@@ -1714,7 +1714,7 @@ static void gattc_write_characteristic_cb(int conn_id, int status, + step->callback = CB_GATTC_WRITE_CHARACTERISTIC; + step->callback_result.status = status; + step->callback_result.conn_id = conn_id; +- step->callback_result.write_params = g_memdup(p_data, sizeof(*p_data)); ++ step->callback_result.write_params = g_memdup2(p_data, sizeof(*p_data)); + + schedule_callback_verification(step); + } +@@ -1727,7 +1727,7 @@ static void gattc_write_descriptor_cb(int conn_id, int status, + step->callback = CB_GATTC_WRITE_DESCRIPTOR; + step->callback_result.status = status; + step->callback_result.conn_id = conn_id; +- step->callback_result.write_params = g_memdup(p_data, sizeof(*p_data)); ++ step->callback_result.write_params = g_memdup2(p_data, sizeof(*p_data)); + + schedule_callback_verification(step); + } +@@ -1742,8 +1742,8 @@ static void gattc_register_for_notification_cb(int conn_id, int registered, + step->callback = CB_GATTC_REGISTER_FOR_NOTIFICATION; + step->callback_result.status = status; + step->callback_result.conn_id = conn_id; +- step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id)); +- step->callback_result.characteristic = g_memdup(char_id, ++ step->callback_result.service = g_memdup2(srvc_id, sizeof(*srvc_id)); ++ step->callback_result.characteristic = g_memdup2(char_id, + sizeof(*char_id)); + step->callback_result.notification_registered = registered; + +@@ -1756,7 +1756,7 @@ static void gattc_notif_cb(int conn_id, btgatt_notify_params_t *p_data) + + step->callback = CB_GATTC_NOTIFY; + step->callback_result.conn_id = conn_id; +- step->callback_result.notify_params = g_memdup(p_data, sizeof(*p_data)); ++ step->callback_result.notify_params = g_memdup2(p_data, sizeof(*p_data)); + + schedule_callback_verification(step); + } +@@ -1827,8 +1827,8 @@ static void gatts_service_added_cb(int status, int server_if, + + step->callback_result.status = status; + step->callback_result.gatt_app_id = server_if; +- step->callback_result.service = g_memdup(srvc_id, sizeof(*srvc_id)); +- step->callback_result.srvc_handle = g_memdup(&srvc_handle, ++ step->callback_result.service = g_memdup2(srvc_id, sizeof(*srvc_id)); ++ step->callback_result.srvc_handle = g_memdup2(&srvc_handle, + sizeof(srvc_handle)); + + schedule_callback_verification(step); +@@ -1844,9 +1844,9 @@ static void gatts_included_service_added_cb(int status, int server_if, + + step->callback_result.status = status; + step->callback_result.gatt_app_id = server_if; +- step->callback_result.srvc_handle = g_memdup(&srvc_handle, ++ step->callback_result.srvc_handle = g_memdup2(&srvc_handle, + sizeof(srvc_handle)); +- step->callback_result.inc_srvc_handle = g_memdup(&inc_srvc_handle, ++ step->callback_result.inc_srvc_handle = g_memdup2(&inc_srvc_handle, + sizeof(inc_srvc_handle)); + + schedule_callback_verification(step); +@@ -1863,10 +1863,10 @@ static void gatts_characteristic_added_cb(int status, int server_if, + + step->callback_result.status = status; + step->callback_result.gatt_app_id = server_if; +- step->callback_result.srvc_handle = g_memdup(&srvc_handle, ++ step->callback_result.srvc_handle = g_memdup2(&srvc_handle, + sizeof(srvc_handle)); +- step->callback_result.uuid = g_memdup(uuid, sizeof(*uuid)); +- step->callback_result.char_handle = g_memdup(&char_handle, ++ step->callback_result.uuid = g_memdup2(uuid, sizeof(*uuid)); ++ step->callback_result.char_handle = g_memdup2(&char_handle, + sizeof(char_handle)); + + schedule_callback_verification(step); +@@ -1883,10 +1883,10 @@ static void gatts_descriptor_added_cb(int status, int server_if, + + step->callback_result.status = status; + step->callback_result.gatt_app_id = server_if; +- step->callback_result.srvc_handle = g_memdup(&srvc_handle, ++ step->callback_result.srvc_handle = g_memdup2(&srvc_handle, + sizeof(srvc_handle)); +- step->callback_result.uuid = g_memdup(uuid, sizeof(*uuid)); +- step->callback_result.desc_handle = g_memdup(&desc_handle, ++ step->callback_result.uuid = g_memdup2(uuid, sizeof(*uuid)); ++ step->callback_result.desc_handle = g_memdup2(&desc_handle, + sizeof(desc_handle)); + + schedule_callback_verification(step); +@@ -1900,7 +1900,7 @@ static void gatts_service_started_cb(int status, int server_if, int srvc_handle) + + step->callback_result.status = status; + step->callback_result.gatt_app_id = server_if; +- step->callback_result.srvc_handle = g_memdup(&srvc_handle, ++ step->callback_result.srvc_handle = g_memdup2(&srvc_handle, + sizeof(srvc_handle)); + + schedule_callback_verification(step); +@@ -1914,7 +1914,7 @@ static void gatts_service_stopped_cb(int status, int server_if, int srvc_handle) + + step->callback_result.status = status; + step->callback_result.gatt_app_id = server_if; +- step->callback_result.srvc_handle = g_memdup(&srvc_handle, ++ step->callback_result.srvc_handle = g_memdup2(&srvc_handle, + sizeof(srvc_handle)); + + schedule_callback_verification(step); +@@ -1928,7 +1928,7 @@ static void gatts_service_deleted_cb(int status, int server_if, int srvc_handle) + + step->callback_result.status = status; + step->callback_result.gatt_app_id = server_if; +- step->callback_result.srvc_handle = g_memdup(&srvc_handle, ++ step->callback_result.srvc_handle = g_memdup2(&srvc_handle, + sizeof(srvc_handle)); + + schedule_callback_verification(step); +@@ -1945,7 +1945,7 @@ static void gatts_request_read_cb(int conn_id, int trans_id, bt_bdaddr_t *bda, + + step->callback_result.conn_id = conn_id; + step->callback_result.trans_id = trans_id; +- step->callback_result.attr_handle = g_memdup(&attr_handle, ++ step->callback_result.attr_handle = g_memdup2(&attr_handle, + sizeof(attr_handle)); + step->callback_result.offset = offset; + step->callback_result.is_long = is_long; +@@ -1974,13 +1974,13 @@ static void gatts_request_write_cb(int conn_id, int trans_id, bt_bdaddr_t *bda, + + step->callback_result.conn_id = conn_id; + step->callback_result.trans_id = trans_id; +- step->callback_result.attr_handle = g_memdup(&attr_handle, ++ step->callback_result.attr_handle = g_memdup2(&attr_handle, + sizeof(attr_handle)); + step->callback_result.offset = offset; + step->callback_result.length = length; + step->callback_result.need_rsp = need_rsp; + step->callback_result.is_prep = is_prep; +- step->callback_result.value = g_memdup(&value, length); ++ step->callback_result.value = g_memdup2(&value, length); + + /* Utilize property verification mechanism for bdaddr */ + props[0] = create_property(BT_PROPERTY_BDADDR, bda, sizeof(*bda)); +@@ -2169,7 +2169,7 @@ static btmce_mas_instance_t *copy_mas_instances(int num_instances, + inst[i].id = instances[i].id; + inst[i].scn = instances[i].scn; + inst[i].msg_types = instances[i].msg_types; +- inst[i].p_name = g_memdup(instances[i].p_name, ++ inst[i].p_name = g_memdup2(instances[i].p_name, + strlen(instances[i].p_name)); + } + +diff --git a/attrib/gatt.c b/attrib/gatt.c +index 46b2ca3..1f30764 100644 +--- a/attrib/gatt.c ++++ b/attrib/gatt.c +@@ -696,7 +696,7 @@ guint gatt_discover_char(GAttrib *attrib, uint16_t start, uint16_t end, + dc->user_data = user_data; + dc->end = end; + dc->start = start; +- dc->uuid = g_memdup(uuid, sizeof(bt_uuid_t)); ++ dc->uuid = g_memdup2(uuid, sizeof(bt_uuid_t)); + + dc->id = g_attrib_send(attrib, 0, buf, plen, char_discovered_cb, + discover_char_ref(dc), discover_char_unref); +@@ -964,7 +964,7 @@ guint gatt_write_char(GAttrib *attrib, uint16_t handle, const uint8_t *value, + long_write->func = func; + long_write->user_data = user_data; + long_write->handle = handle; +- long_write->value = g_memdup(value, vlen); ++ long_write->value = g_memdup2(value, vlen); + long_write->vlen = vlen; + + return prepare_write(long_write); +@@ -1130,7 +1130,7 @@ guint gatt_discover_desc(GAttrib *attrib, uint16_t start, uint16_t end, + dd->user_data = user_data; + dd->start = start; + dd->end = end; +- dd->uuid = g_memdup(uuid, sizeof(bt_uuid_t)); ++ dd->uuid = g_memdup2(uuid, sizeof(bt_uuid_t)); + + dd->id = g_attrib_send(attrib, 0, buf, plen, desc_discovered_cb, + discover_desc_ref(dd), discover_desc_unref); +diff --git a/client/gatt.c b/client/gatt.c +index 21fd38e..d302183 100644 +--- a/client/gatt.c ++++ b/client/gatt.c +@@ -790,7 +790,7 @@ static uint8_t *str2bytearray(char *arg, size_t *val_len) + + *val_len = i; + +- return g_memdup(value, i); ++ return g_memdup2(value, i); + } + + void gatt_write_attribute(GDBusProxy *proxy, int argc, char *argv[]) +diff --git a/gobex/gobex-header.c b/gobex/gobex-header.c +index 011d33d..c56be2f 100644 +--- a/gobex/gobex-header.c ++++ b/gobex/gobex-header.c +@@ -222,7 +222,7 @@ GObexHeader *g_obex_header_decode(const void *data, gsize len, + + switch (data_policy) { + case G_OBEX_DATA_COPY: +- header->v.data = g_memdup(ptr, header->vlen); ++ header->v.data = g_memdup2(ptr, header->vlen); + break; + case G_OBEX_DATA_REF: + header->extdata = TRUE; +@@ -410,7 +410,7 @@ GObexHeader *g_obex_header_new_bytes(guint8 id, const void *data, gsize len) + header->id = id; + header->vlen = len; + header->hlen = len + 3; +- header->v.data = g_memdup(data, len); ++ header->v.data = g_memdup2(data, len); + + return header; + } +diff --git a/gobex/gobex-packet.c b/gobex/gobex-packet.c +index 11937a5..18da6ea 100644 +--- a/gobex/gobex-packet.c ++++ b/gobex/gobex-packet.c +@@ -201,7 +201,7 @@ gboolean g_obex_packet_set_data(GObexPacket *pkt, const void *data, gsize len, + + switch (data_policy) { + case G_OBEX_DATA_COPY: +- pkt->data.buf = g_memdup(data, len); ++ pkt->data.buf = g_memdup2(data, len); + break; + case G_OBEX_DATA_REF: + pkt->data.buf_ref = data; +diff --git a/obexd/src/obex.c b/obexd/src/obex.c +index 9f992ec..151d956 100644 +--- a/obexd/src/obex.c ++++ b/obexd/src/obex.c +@@ -594,7 +594,7 @@ static void parse_apparam(struct obex_session *os, GObexPacket *req) + if (!g_obex_header_get_bytes(hdr, &apparam, &len)) + return; + +- os->apparam = g_memdup(apparam, len); ++ os->apparam = g_memdup2(apparam, len); + os->apparam_len = len; + DBG("APPARAM"); + } +diff --git a/plugins/neard.c b/plugins/neard.c +index e07b511..a806bb7 100644 +--- a/plugins/neard.c ++++ b/plugins/neard.c +@@ -407,10 +407,10 @@ static int process_nokia_long (void *data, size_t size, uint8_t marker, + remote->name = g_strndup((char *)n->name, n->name_len); + + if (marker == 0x01) { +- remote->pin = g_memdup(n->authentication, 4); ++ remote->pin = g_memdup2(n->authentication, 4); + remote->pin_len = 4; + } else if (marker == 0x02) { +- remote->pin = g_memdup(n->authentication, 16); ++ remote->pin = g_memdup2(n->authentication, 16); + remote->pin_len = 16; + } + +@@ -439,7 +439,7 @@ static int process_nokia_short (void *data, size_t size, + if (n->name_len > 0) + remote->name = g_strndup((char *)n->name, n->name_len); + +- remote->pin = g_memdup(n->authentication, 4); ++ remote->pin = g_memdup2(n->authentication, 4); + remote->pin_len = 4; + + return 0; +diff --git a/plugins/policy.c b/plugins/policy.c +index bf93df0..79943fc 100644 +--- a/plugins/policy.c ++++ b/plugins/policy.c +@@ -855,7 +855,7 @@ static int policy_init(void) + reconnect_attempts = default_attempts; + reconnect_intervals_len = sizeof(default_intervals) / + sizeof(*reconnect_intervals); +- reconnect_intervals = g_memdup(default_intervals, ++ reconnect_intervals = g_memdup2(default_intervals, + sizeof(default_intervals)); + goto done; + } +@@ -886,7 +886,7 @@ static int policy_init(void) + g_clear_error(&gerr); + reconnect_intervals_len = sizeof(default_intervals) / + sizeof(*reconnect_intervals); +- reconnect_intervals = g_memdup(default_intervals, ++ reconnect_intervals = g_memdup2(default_intervals, + sizeof(default_intervals)); + } + +diff --git a/profiles/audio/avctp.c b/profiles/audio/avctp.c +index 50de336..2733a76 100644 +--- a/profiles/audio/avctp.c ++++ b/profiles/audio/avctp.c +@@ -1731,7 +1731,7 @@ static int avctp_send_req(struct avctp *session, uint8_t code, + req->subunit = subunit; + req->op = opcode; + req->func = func; +- req->operands = g_memdup(operands, operand_count); ++ req->operands = g_memdup2(operands, operand_count); + req->operand_count = operand_count; + req->user_data = user_data; + +@@ -1769,7 +1769,7 @@ int avctp_send_browsing_req(struct avctp *session, + + req = g_new0(struct avctp_browsing_req, 1); + req->func = func; +- req->operands = g_memdup(operands, operand_count); ++ req->operands = g_memdup2(operands, operand_count); + req->operand_count = operand_count; + req->user_data = user_data; + +diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c +index 05dd791..e23228d 100644 +--- a/profiles/audio/avrcp.c ++++ b/profiles/audio/avrcp.c +@@ -1297,7 +1297,7 @@ static uint8_t avrcp_handle_get_current_player_value(struct avrcp *session, + * Save a copy of requested settings because we can override them + * while responding + */ +- settings = g_memdup(&pdu->params[1], pdu->params[0]); ++ settings = g_memdup2(&pdu->params[1], pdu->params[0]); + len = 0; + + /* +@@ -2786,7 +2786,7 @@ static gboolean avrcp_set_browsed_player_rsp(struct avctp *conn, + break; + } + +- folders[count] = g_memdup(&pdu->params[i], len); ++ folders[count] = g_memdup2(&pdu->params[i], len); + i += len; + } + +@@ -2873,7 +2873,7 @@ static void avrcp_player_parse_features(struct avrcp_player *player, + { + struct media_player *mp = player->user_data; + +- player->features = g_memdup(features, 16); ++ player->features = g_memdup2(features, 16); + + if (features[7] & 0x08) { + media_player_set_browsable(mp, true); +diff --git a/profiles/battery/bas.c b/profiles/battery/bas.c +index 3c6173b..b223fbe 100644 +--- a/profiles/battery/bas.c ++++ b/profiles/battery/bas.c +@@ -75,7 +75,7 @@ struct bt_bas *bt_bas_new(void *primary) + bas->gatt_op = queue_new(); + + if (primary) +- bas->primary = g_memdup(primary, sizeof(*bas->primary)); ++ bas->primary = g_memdup2(primary, sizeof(*bas->primary)); + + return bt_bas_ref(bas); + } +diff --git a/profiles/battery/battery.c b/profiles/battery/battery.c +index 176d127..3b5aa5c 100644 +--- a/profiles/battery/battery.c ++++ b/profiles/battery/battery.c +@@ -159,7 +159,7 @@ static void read_initial_battery_level_cb(bool success, + if (!length) + return; + +- batt->initial_value = g_memdup(value, length); ++ batt->initial_value = g_memdup2(value, length); + + /* request notify */ + batt->batt_level_cb_id = +diff --git a/profiles/deviceinfo/dis.c b/profiles/deviceinfo/dis.c +index 87fa633..79d98c3 100644 +--- a/profiles/deviceinfo/dis.c ++++ b/profiles/deviceinfo/dis.c +@@ -143,7 +143,7 @@ struct bt_dis *bt_dis_new_primary(void *primary) + dis->gatt_op = queue_new(); + + if (primary) +- dis->primary = g_memdup(primary, sizeof(*dis->primary)); ++ dis->primary = g_memdup2(primary, sizeof(*dis->primary)); + + return bt_dis_ref(dis); + } +diff --git a/profiles/input/hog-lib.c b/profiles/input/hog-lib.c +index e5e3d3e..3652bdf 100644 +--- a/profiles/input/hog-lib.c ++++ b/profiles/input/hog-lib.c +@@ -514,7 +514,7 @@ static void report_read_cb(guint8 status, const guint8 *pdu, guint16 len, + if (report->value) + g_free(report->value); + +- report->value = g_memdup(pdu, len); ++ report->value = g_memdup2(pdu, len); + report->len = len; + } + +@@ -1595,7 +1595,7 @@ static void hog_attach_hog(struct bt_hog *hog, struct gatt_primary *primary) + struct bt_hog *instance; + + if (!hog->primary) { +- hog->primary = g_memdup(primary, sizeof(*primary)); ++ hog->primary = g_memdup2(primary, sizeof(*primary)); + discover_char(hog, hog->attrib, primary->range.start, + primary->range.end, NULL, + char_discovered_cb, hog); +@@ -1609,7 +1609,7 @@ static void hog_attach_hog(struct bt_hog *hog, struct gatt_primary *primary) + if (!instance) + return; + +- instance->primary = g_memdup(primary, sizeof(*primary)); ++ instance->primary = g_memdup2(primary, sizeof(*primary)); + find_included(instance, hog->attrib, primary->range.start, + primary->range.end, find_included_cb, instance); + +diff --git a/profiles/scanparam/scpp.c b/profiles/scanparam/scpp.c +index da38a6a..1134360 100644 +--- a/profiles/scanparam/scpp.c ++++ b/profiles/scanparam/scpp.c +@@ -110,7 +110,7 @@ struct bt_scpp *bt_scpp_new(void *primary) + scan->gatt_op = queue_new(); + + if (primary) +- scan->primary = g_memdup(primary, sizeof(*scan->primary)); ++ scan->primary = g_memdup2(primary, sizeof(*scan->primary)); + + return bt_scpp_ref(scan); + } +diff --git a/src/attrib-server.c b/src/attrib-server.c +index 5a178f9..ce412c3 100644 +--- a/src/attrib-server.c ++++ b/src/attrib-server.c +@@ -339,7 +339,7 @@ static struct attribute *attrib_db_add_new(struct gatt_server *server, + + a = g_new0(struct attribute, 1); + a->len = len; +- a->data = g_memdup(value, len); ++ a->data = g_memdup2(value, len); + a->handle = handle; + a->uuid = *uuid; + a->read_req = read_req; +diff --git a/src/eir.c b/src/eir.c +index 0f5d14f..ceeb5f7 100644 +--- a/src/eir.c ++++ b/src/eir.c +@@ -323,13 +323,13 @@ void eir_parse(struct eir_data *eir, const uint8_t *eir_data, uint8_t eir_len) + case EIR_SSP_HASH: + if (data_len < 16) + break; +- eir->hash = g_memdup(data, 16); ++ eir->hash = g_memdup2(data, 16); + break; + + case EIR_SSP_RANDOMIZER: + if (data_len < 16) + break; +- eir->randomizer = g_memdup(data, 16); ++ eir->randomizer = g_memdup2(data, 16); + break; + + case EIR_DEVICE_ID: +diff --git a/tools/gatt-service.c b/tools/gatt-service.c +index 631c4f2..1e272a5 100644 +--- a/tools/gatt-service.c ++++ b/tools/gatt-service.c +@@ -127,7 +127,7 @@ static gboolean desc_get_value(const GDBusPropertyTable *property, + static void desc_write(struct descriptor *desc, const uint8_t *value, int len) + { + g_free(desc->value); +- desc->value = g_memdup(value, len); ++ desc->value = g_memdup2(value, len); + desc->vlen = len; + + g_dbus_emit_property_changed(connection, desc->path, +@@ -265,7 +265,7 @@ static gboolean chr_get_props(const GDBusPropertyTable *property, + static void chr_write(struct characteristic *chr, const uint8_t *value, int len) + { + g_free(chr->value); +- chr->value = g_memdup(value, len); ++ chr->value = g_memdup2(value, len); + chr->vlen = len; + + g_dbus_emit_property_changed(connection, chr->path, GATT_CHR_IFACE, +@@ -592,7 +592,7 @@ static gboolean register_characteristic(const char *chr_uuid, + + chr = g_new0(struct characteristic, 1); + chr->uuid = g_strdup(chr_uuid); +- chr->value = g_memdup(value, vlen); ++ chr->value = g_memdup2(value, vlen); + chr->vlen = vlen; + chr->props = props; + chr->service = g_strdup(service_path); +diff --git a/tools/mesh-gatt/gatt.c b/tools/mesh-gatt/gatt.c +index b99234f..d7685f0 100644 +--- a/tools/mesh-gatt/gatt.c ++++ b/tools/mesh-gatt/gatt.c +@@ -338,7 +338,7 @@ bool mesh_gatt_write(GDBusProxy *proxy, uint8_t *buf, uint16_t len, + /* TODO: should keep in queue in case we need to cancel write? */ + + data->gatt_len = len; +- data->gatt_data = g_memdup(buf, len); ++ data->gatt_data = g_memdup2(buf, len); + data->gatt_data[0] &= GATT_TYPE_MASK; + data->iov.iov_base = data->gatt_data; + data->iov.iov_len = len; +diff --git a/unit/test-avctp.c b/unit/test-avctp.c +index fa7db59..0bd138e 100644 +--- a/unit/test-avctp.c ++++ b/unit/test-avctp.c +@@ -53,7 +53,7 @@ struct context { + #define raw_pdu(args...) \ + { \ + .valid = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -64,7 +64,7 @@ struct context { + }; \ + static struct test_data data; \ + data.test_name = g_strdup(name); \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + tester_add(name, &data, NULL, function, NULL); \ + } while (0) + +diff --git a/unit/test-avdtp.c b/unit/test-avdtp.c +index f5340d6..d6fdd3d 100644 +--- a/unit/test-avdtp.c ++++ b/unit/test-avdtp.c +@@ -48,7 +48,7 @@ struct test_data { + #define raw_pdu(args...) \ + { \ + .valid = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -56,7 +56,7 @@ struct test_data { + { \ + .valid = true, \ + .fragmented = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -67,7 +67,7 @@ struct test_data { + }; \ + static struct test_data data; \ + data.test_name = g_strdup(name); \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + tester_add(name, &data, NULL, function, NULL); \ + } while (0) + +diff --git a/unit/test-avrcp.c b/unit/test-avrcp.c +index 34a7037..0c860e3 100644 +--- a/unit/test-avrcp.c ++++ b/unit/test-avrcp.c +@@ -61,7 +61,7 @@ struct context { + #define raw_pdu(args...) \ + { \ + .valid = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -69,7 +69,7 @@ struct context { + { \ + .valid = true, \ + .browse = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -77,7 +77,7 @@ struct context { + { \ + .valid = true, \ + .fragmented = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -85,7 +85,7 @@ struct context { + { \ + .valid = true, \ + .continuing = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -96,7 +96,7 @@ struct context { + }; \ + static struct test_data data; \ + data.test_name = g_strdup(name); \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + tester_add(name, &data, NULL, function, NULL); \ + } while (0) + +diff --git a/unit/test-gatt.c b/unit/test-gatt.c +index 4aa87d0..ab16818 100644 +--- a/unit/test-gatt.c ++++ b/unit/test-gatt.c +@@ -73,7 +73,7 @@ struct context { + #define raw_pdu(args...) \ + { \ + .valid = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -94,7 +94,7 @@ struct context { + data.uuid = bt_uuid; \ + data.step = test_step; \ + data.source_db = db; \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + tester_add(name, &data, NULL, function, NULL); \ + } while (0) + +diff --git a/unit/test-hfp.c b/unit/test-hfp.c +index f504724..6afc145 100644 +--- a/unit/test-hfp.c ++++ b/unit/test-hfp.c +@@ -50,7 +50,7 @@ struct test_data { + #define raw_pdu(args...) \ + { \ + .valid = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -62,7 +62,7 @@ struct test_data { + #define type_pdu(cmd_type, args...) \ + { \ + .valid = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + .type = cmd_type, \ + } +@@ -70,7 +70,7 @@ struct test_data { + #define frg_pdu(args...) \ + { \ + .valid = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + .fragmented = true, \ + } +@@ -82,7 +82,7 @@ struct test_data { + }; \ + static struct test_data data; \ + data.test_name = g_strdup(name); \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + data.result_func = result_function; \ + tester_add(name, &data, NULL, function, NULL); \ + data.test_handler = test_handler; \ +@@ -96,7 +96,7 @@ struct test_data { + }; \ + static struct test_data data; \ + data.test_name = g_strdup(name); \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + data.hf_result_func = result_func; \ + data.response_func = response_function; \ + tester_add(name, &data, NULL, function, NULL); \ +diff --git a/unit/test-hog.c b/unit/test-hog.c +index e6d4aff..edf0633 100644 +--- a/unit/test-hog.c ++++ b/unit/test-hog.c +@@ -59,7 +59,7 @@ struct context { + #define raw_pdu(args...) \ + { \ + .valid = true, \ +- .data = g_memdup(data(args), sizeof(data(args))), \ ++ .data = g_memdup2(data(args), sizeof(data(args))), \ + .size = sizeof(data(args)), \ + } + +@@ -75,7 +75,7 @@ struct context { + }; \ + static struct test_data data; \ + data.test_name = g_strdup(name); \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + tester_add(name, &data, NULL, function, NULL); \ + } while (0) + +diff --git a/unit/test-sdp.c b/unit/test-sdp.c +index d3a885f..3a003ff 100644 +--- a/unit/test-sdp.c ++++ b/unit/test-sdp.c +@@ -47,14 +47,14 @@ struct test_data { + #define raw_pdu(args...) \ + { \ + .valid = true, \ +- .raw_data = g_memdup(raw_data(args), sizeof(raw_data(args))), \ ++ .raw_data = g_memdup2(raw_data(args), sizeof(raw_data(args))), \ + .raw_size = sizeof(raw_data(args)), \ + } + + #define raw_pdu_cont(cont, args...) \ + { \ + .valid = true, \ +- .raw_data = g_memdup(raw_data(args), sizeof(raw_data(args))), \ ++ .raw_data = g_memdup2(raw_data(args), sizeof(raw_data(args))), \ + .raw_size = sizeof(raw_data(args)), \ + .cont_len = cont, \ + } +@@ -66,7 +66,7 @@ struct test_data { + }; \ + static struct test_data data; \ + data.mtu = _mtu; \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + tester_add(name, &data, NULL, test_sdp, NULL); \ + } while (0) + +@@ -92,7 +92,7 @@ struct test_data_de { + #define define_test_de_attr(name, input, exp) \ + do { \ + static struct test_data_de data; \ +- data.input_data = g_memdup(input, sizeof(input)); \ ++ data.input_data = g_memdup2(input, sizeof(input)); \ + data.input_size = sizeof(input); \ + data.expected = exp; \ + tester_add("/sdp/DE/ATTR/" name, &data, NULL, \ +diff --git a/unit/test-uhid.c b/unit/test-uhid.c +index 001d39a..bfe8369 100644 +--- a/unit/test-uhid.c ++++ b/unit/test-uhid.c +@@ -61,7 +61,7 @@ struct context { + }; \ + static struct test_data data; \ + data.test_name = g_strdup(name); \ +- data.pdu_list = g_memdup(pdus, sizeof(pdus)); \ ++ data.pdu_list = g_memdup2(pdus, sizeof(pdus)); \ + tester_add(name, &data, NULL, function, NULL); \ + } while (0) + +-- +2.31.1 + diff --git a/0005-media-rename-local-function-conflicting-with-pause-2.patch b/0005-media-rename-local-function-conflicting-with-pause-2.patch new file mode 100644 index 0000000..80b491d --- /dev/null +++ b/0005-media-rename-local-function-conflicting-with-pause-2.patch @@ -0,0 +1,42 @@ +From 124dee151746b4a8a2e8a7194af78f2c82f75d79 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 3 Mar 2021 08:57:36 +0100 +Subject: [PATCH] media: rename local function conflicting with pause(2) + +profiles/audio/media.c:1284:13: error: conflicting types for 'pause'; have '_Bool(void *)' + 1284 | static bool pause(void *user_data) + | ^~~~~ +In file included from /usr/include/bits/sigstksz.h:24, + from /usr/include/signal.h:315, + from /usr/include/glib-2.0/glib/gbacktrace.h:36, + from /usr/include/glib-2.0/glib.h:34, + from profiles/audio/media.c:21: +/usr/include/unistd.h:478:12: note: previous declaration of 'pause' with type 'int(void)' + 478 | extern int pause (void); + | ^~~~~ +--- + profiles/audio/media.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/profiles/audio/media.c b/profiles/audio/media.c +index c84bbe22dc..3d8c4b69c3 100644 +--- a/profiles/audio/media.c ++++ b/profiles/audio/media.c +@@ -1281,7 +1281,7 @@ static bool stop(void *user_data) + return media_player_send(mp, "Stop"); + } + +-static bool pause(void *user_data) ++static bool pause_play(void *user_data) + { + struct media_player *mp = user_data; + +@@ -1331,7 +1331,7 @@ static struct avrcp_player_cb player_cb = { + .set_volume = set_volume, + .play = play, + .stop = stop, +- .pause = pause, ++ .pause = pause_play, + .next = next, + .previous = previous, + }; diff --git a/bluez.changes b/bluez.changes index bc8503a..562f3e5 100644 --- a/bluez.changes +++ b/bluez.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Tue Aug 10 09:49:45 UTC 2021 - Stefan Seyfried + +- add fedora's patches 0002-Use-g_memdup2-everywhere.patch and + 0005-media-rename-local-function-conflicting-with-pause-2.patch + to fix compatibility problems with newer glib and glibc + ------------------------------------------------------------------- Mon Aug 2 18:27:38 UTC 2021 - Stefan Seyfried diff --git a/bluez.spec b/bluez.spec index b23f13f..0d2e063 100644 --- a/bluez.spec +++ b/bluez.spec @@ -45,6 +45,11 @@ Patch3: bluez-cups-libexec.patch Patch4: bluez-disable-broken-tests.diff # get rid of python2. WARNING: this is autogenerated by 2to3 and might not work Patch5: bluez-test-2to3.diff +# +# patches boorrowed from fedora's package, for compatibility with newer glib and glibc +Patch6: 0002-Use-g_memdup2-everywhere.patch +Patch7: 0005-media-rename-local-function-conflicting-with-pause-2.patch +# # Move 43xx firmware path for RPi3 bluetooth support bsc#1140688 Patch10: RPi-Move-the-43xx-firmware-into-lib-firmware.patch # Upstream suggests to use btmon instead of hcidump and does not want those patches