fix memleaks
avoid memleak if memory is full fix "memleak" at the end of mbus_parse_hex
This commit is contained in:
parent
3935b4013e
commit
ee209023b8
@ -1319,10 +1319,16 @@ mbus_data_variable_xml_normalized(mbus_data_variable *data)
|
|||||||
if ((buff_size - len) < 1024)
|
if ((buff_size - len) < 1024)
|
||||||
{
|
{
|
||||||
buff_size *= 2;
|
buff_size *= 2;
|
||||||
buff = (char*) realloc(buff,buff_size);
|
new_buff = (char*) realloc(buff,buff_size);
|
||||||
|
|
||||||
if (buff == NULL)
|
if (new_buff == NULL)
|
||||||
|
{
|
||||||
|
mbus_record_free(norm_record);
|
||||||
|
free(buff);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
buff = new_buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
len += snprintf(&buff[len], buff_size - len, " <DataRecord id=\"%zd\">\n", i);
|
len += snprintf(&buff[len], buff_size - len, " <DataRecord id=\"%zd\">\n", i);
|
||||||
|
@ -2658,7 +2658,7 @@ mbus_data_fixed_parse(mbus_frame *frame, mbus_data_fixed *data)
|
|||||||
int
|
int
|
||||||
mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data)
|
mbus_data_variable_parse(mbus_frame *frame, mbus_data_variable *data)
|
||||||
{
|
{
|
||||||
mbus_data_record *record;
|
mbus_data_record *record = NULL;
|
||||||
size_t i, j;
|
size_t i, j;
|
||||||
|
|
||||||
if (frame && data)
|
if (frame && data)
|
||||||
@ -3520,7 +3520,7 @@ char *
|
|||||||
mbus_data_variable_xml(mbus_data_variable *data)
|
mbus_data_variable_xml(mbus_data_variable *data)
|
||||||
{
|
{
|
||||||
mbus_data_record *record;
|
mbus_data_record *record;
|
||||||
char *buff = NULL;
|
char *buff = NULL, *new_buff;
|
||||||
size_t len = 0, buff_size = 8192;
|
size_t len = 0, buff_size = 8192;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -3541,10 +3541,15 @@ mbus_data_variable_xml(mbus_data_variable *data)
|
|||||||
if ((buff_size - len) < 1024)
|
if ((buff_size - len) < 1024)
|
||||||
{
|
{
|
||||||
buff_size *= 2;
|
buff_size *= 2;
|
||||||
buff = (char*) realloc(buff,buff_size);
|
new_buff = (char*) realloc(buff,buff_size);
|
||||||
|
|
||||||
if (buff == NULL)
|
if (new_buff == NULL)
|
||||||
|
{
|
||||||
|
free(buff);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
buff = new_buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
len += snprintf(&buff[len], buff_size - len, "%s",
|
len += snprintf(&buff[len], buff_size - len, "%s",
|
||||||
@ -3696,7 +3701,7 @@ mbus_frame_xml(mbus_frame *frame)
|
|||||||
mbus_frame *iter;
|
mbus_frame *iter;
|
||||||
|
|
||||||
mbus_data_record *record;
|
mbus_data_record *record;
|
||||||
char *buff = NULL;
|
char *buff = NULL, *new_buff;
|
||||||
|
|
||||||
size_t len = 0, buff_size = 8192;
|
size_t len = 0, buff_size = 8192;
|
||||||
int record_cnt = 0, frame_cnt;
|
int record_cnt = 0, frame_cnt;
|
||||||
@ -3736,7 +3741,10 @@ mbus_frame_xml(mbus_frame *frame)
|
|||||||
buff = (char*) malloc(buff_size);
|
buff = (char*) malloc(buff_size);
|
||||||
|
|
||||||
if (buff == NULL)
|
if (buff == NULL)
|
||||||
|
{
|
||||||
|
mbus_data_record_free(frame_data.data_var.record);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
// include frame counter in XML output if more than one frame
|
// include frame counter in XML output if more than one frame
|
||||||
// is available (frame_cnt = -1 => not included in output)
|
// is available (frame_cnt = -1 => not included in output)
|
||||||
@ -3757,10 +3765,16 @@ mbus_frame_xml(mbus_frame *frame)
|
|||||||
if ((buff_size - len) < 1024)
|
if ((buff_size - len) < 1024)
|
||||||
{
|
{
|
||||||
buff_size *= 2;
|
buff_size *= 2;
|
||||||
buff = (char*) realloc(buff,buff_size);
|
new_buff = (char*) realloc(buff,buff_size);
|
||||||
|
|
||||||
if (buff == NULL)
|
if (new_buff == NULL)
|
||||||
|
{
|
||||||
|
free(buff);
|
||||||
|
mbus_data_record_free(frame_data.data_var.record);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
buff = new_buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
len += snprintf(&buff[len], buff_size - len, "%s",
|
len += snprintf(&buff[len], buff_size - len, "%s",
|
||||||
@ -3790,10 +3804,14 @@ mbus_frame_xml(mbus_frame *frame)
|
|||||||
if ((buff_size - len) < 1024)
|
if ((buff_size - len) < 1024)
|
||||||
{
|
{
|
||||||
buff_size *= 2;
|
buff_size *= 2;
|
||||||
buff = (char*) realloc(buff,buff_size);
|
if (new_buff == NULL)
|
||||||
|
{
|
||||||
if (buff == NULL)
|
free(buff);
|
||||||
|
mbus_data_record_free(frame_data.data_var.record);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
buff = new_buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
len += snprintf(&buff[len], buff_size - len, "%s",
|
len += snprintf(&buff[len], buff_size - len, "%s",
|
||||||
|
@ -80,7 +80,7 @@ main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
printf("%s", xml_result);
|
printf("%s", xml_result);
|
||||||
free(xml_result);
|
free(xml_result);
|
||||||
|
mbus_data_record_free(frame_data.data_var.record);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user