Skip to content

Commit cfe4457

Browse files
authored
fix(zigbee_ep): rooling back to use malloc for remote attr reading
1 parent 0763c2a commit cfe4457

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

libraries/Zigbee/src/ZigbeeEP.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ ZigbeeEP::ZigbeeEP(uint8_t endpoint) {
1919
_ep_config.endpoint = 0;
2020
_cluster_list = nullptr;
2121
_on_identify = nullptr;
22-
_read_model[0] = '\0';
23-
_read_manufacturer[0] = '\0';
22+
_read_model = NULL;
23+
_read_manufacturer = NULL;
2424
_time_status = 0;
2525
if (!lock) {
2626
lock = xSemaphoreCreateBinary();
@@ -168,8 +168,11 @@ char *ZigbeeEP::readManufacturer(uint8_t endpoint, uint16_t short_addr, esp_zb_i
168168
read_req.attr_number = ZB_ARRAY_LENTH(attributes);
169169
read_req.attr_field = attributes;
170170

171-
_read_manufacturer[0] = '\0';
172-
171+
if (_read_manufacturer != NULL) {
172+
free(_read_manufacturer);
173+
}
174+
_read_manufacturer = NULL;
175+
173176
esp_zb_lock_acquire(portMAX_DELAY);
174177
esp_zb_zcl_read_attr_cmd_req(&read_req);
175178
esp_zb_lock_release();
@@ -203,7 +206,10 @@ char *ZigbeeEP::readModel(uint8_t endpoint, uint16_t short_addr, esp_zb_ieee_add
203206
read_req.attr_number = ZB_ARRAY_LENTH(attributes);
204207
read_req.attr_field = attributes;
205208

206-
_read_model[0] = '\0';
209+
if (_read_model != NULL) {
210+
free(_read_model);
211+
}
212+
_read_model = NULL;
207213

208214
esp_zb_lock_acquire(portMAX_DELAY);
209215
esp_zb_zcl_read_attr_cmd_req(&read_req);
@@ -244,13 +250,15 @@ void ZigbeeEP::zbReadBasicCluster(const esp_zb_zcl_attribute_t *attribute) {
244250
/* Basic cluster attributes */
245251
if (attribute->id == ESP_ZB_ZCL_ATTR_BASIC_MANUFACTURER_NAME_ID && attribute->data.type == ESP_ZB_ZCL_ATTR_TYPE_CHAR_STRING && attribute->data.value) {
246252
zbstring_t *zbstr = (zbstring_t *)attribute->data.value;
253+
char *_read_manufacturer = (char *) malloc(zbstr->len + 1);
247254
memcpy(_read_manufacturer, zbstr->data, zbstr->len);
248255
_read_manufacturer[zbstr->len] = '\0';
249256
log_i("Peer Manufacturer is \"%s\"", _read_manufacturer);
250257
xSemaphoreGive(lock);
251258
}
252259
if (attribute->id == ESP_ZB_ZCL_ATTR_BASIC_MODEL_IDENTIFIER_ID && attribute->data.type == ESP_ZB_ZCL_ATTR_TYPE_CHAR_STRING && attribute->data.value) {
253260
zbstring_t *zbstr = (zbstring_t *)attribute->data.value;
261+
char *_read_model = (char *) malloc(zbstr->len + 1);
254262
memcpy(_read_model, zbstr->data, zbstr->len);
255263
_read_model[zbstr->len] = '\0';
256264
log_i("Peer Model is \"%s\"", _read_model);

0 commit comments

Comments
 (0)