return BT_ERROR_NONE;
}
- *in_data = realloc(*in_data, sizeof(char) * (data_len - ad_len));
+ char *new_p;
+ new_p = realloc(*in_data, sizeof(char) * (data_len - ad_len));
+ if (new_p == NULL) {
+ g_free(data);
+ return BT_ERROR_OUT_OF_MEMORY;
+ }
+
if (i + ad_len + 1 == data_len) /* ad data is added in last position */
- memcpy(*in_data, data, data_len - ad_len - 1);
+ memcpy(new_p, data, data_len - ad_len - 1);
else /* ad data is added in first/middle position */
- memcpy(*in_data + i, data + i + ad_len + 1, data_len - i - ad_len - 1);
+ memcpy(new_p + i, data + i + ad_len + 1, data_len - i - ad_len - 1);
*in_len = *in_len - ad_len - 1;
+ *in_data = new_p;
BT_DBG("Removed ad_type(0x%02x) data", ad_type);
+
g_free(data);
return BT_ERROR_NONE;
} else {
if (*len + 2 + name_len > ADV_DATA_LEN_MAX) {
char *new_p;
new_p = realloc(*p, sizeof(char) * ADV_DATA_LEN_MAX);
+ if (new_p == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+
new_p[*len] = ADV_DATA_LEN_MAX - *len - 1;
new_p[*len + 1] = BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME;
memcpy(new_p + *len + 2, name, ADV_DATA_LEN_MAX - *len - 2);
} else {
char *new_p;
new_p = realloc(*p, sizeof(char) * (*len + name_len + 2));
+ if (new_p == NULL)
+ return BT_ERROR_OUT_OF_MEMORY;
+
new_p[*len] = name_len + 1;
new_p[*len + 1] = BT_ADAPTER_LE_ADVERTISING_DATA_LOCAL_NAME;
memcpy(new_p + *len + 2, name, name_len);