Bluetooth: BAP: Scan del: Overwrite metadata if len == 0

If the metadata length is 0 in the mod source operation,
we set the length to 0 and memset the stored value.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
This commit is contained in:
Emil Gydesen 2024-06-27 15:37:07 +02:00 committed by Alberto Escolar
parent 1f0c22eb01
commit fa447948d2

View File

@ -835,22 +835,26 @@ static int scan_delegator_mod_src(struct bt_conn *conn,
}
for (int i = 0; i < num_subgroups; i++) {
/* If the metadata len is 0, we shall not overwrite the existing metadata */
if (subgroups[i].metadata_len == 0) {
continue;
}
const bool metadata_len_changed =
subgroups[i].metadata_len != state->subgroups[i].metadata_len;
if (subgroups[i].metadata_len != state->subgroups[i].metadata_len) {
if (metadata_len_changed) {
state->subgroups[i].metadata_len = subgroups[i].metadata_len;
state_changed = true;
}
if (memcmp(subgroups[i].metadata, state->subgroups[i].metadata,
if (metadata_len_changed ||
memcmp(subgroups[i].metadata, state->subgroups[i].metadata,
sizeof(subgroups[i].metadata)) != 0) {
(void)memcpy(state->subgroups[i].metadata,
subgroups[i].metadata,
state->subgroups[i].metadata_len);
state->subgroups[i].metadata_len = subgroups[i].metadata_len;
if (state->subgroups[i].metadata_len == 0U) {
memset(state->subgroups[i].metadata, 0,
state->subgroups[i].metadata_len);
} else {
(void)memcpy(state->subgroups[i].metadata, subgroups[i].metadata,
state->subgroups[i].metadata_len);
}
state_changed = true;
}
}