fixed freeing memory after large size VarValue

This commit is contained in:
Bogdan Pilyugin 2023-08-15 10:36:10 +02:00
parent e600cdd5f1
commit dd0cb3bdad
3 changed files with 27 additions and 15 deletions

View File

@ -32,7 +32,7 @@
#define EXPECTED_MAX_DATA_RESPONSE_SIZE (4096)
#define VAR_MAX_NAME_LENGTH MAX_DYNVAR_NAME_LENGTH
#define VAR_MAX_VALUE_LENGTH MAX_DYNVAR_LENGTH
#define VAR_MAX_VALUE_LENGTH (2048)
typedef enum
{

View File

@ -35,7 +35,8 @@ extern SYS_CONFIG SysConfig;
static void PrintInterfaceState(char *argres, int rw, esp_netif_t *netif)
{
snprintf(argres, MAX_DYNVAR_LENGTH, (netif != NULL && esp_netif_is_netif_up(netif))?"\"CONNECTED\"":"\"DISCONNECTED\"");
snprintf(argres, MAX_DYNVAR_LENGTH,
(netif != NULL && esp_netif_is_netif_up(netif)) ? "\"CONNECTED\"" : "\"DISCONNECTED\"");
}
static void funct_wifi_stat(char *argres, int rw)
@ -60,7 +61,6 @@ static void funct_gsm_stat(char *argres, int rw)
}
#endif
static void funct_mqtt_1_stat(char *argres, int rw)
{
snprintf(argres, MAX_DYNVAR_LENGTH, (GetMQTT1Connected()) ? "\"CONNECTED\"" : "\"DISCONNECTED\"");
@ -74,7 +74,6 @@ static void funct_def_interface(char *argres, int rw)
GetDefaultNetIFName(argres);
}
static void funct_time(char *argres, int rw)
{
time_t now;
@ -140,11 +139,20 @@ static void funct_wifiscan(char *argres, int rw)
static void funct_wifiscanres(char *argres, int rw)
{
int arg = atoi(argres);
wifi_ap_record_t *Rec = GetWiFiAPRecord(arg);
char onerec[64];
wifi_ap_record_t *Rec;
strcpy(argres, "[");
for (int i = 0; i < arg; i++)
{
Rec = GetWiFiAPRecord(i);
if (!Rec)
return;
snprintf(argres, MAX_DYNVAR_LENGTH, "{\"ssid\":\"%s\",\"rssi\":%i,\"ch\":%d}", Rec->ssid, Rec->rssi,
snprintf(onerec, MAX_DYNVAR_LENGTH, "{\"ssid\":\"%s\",\"rssi\":%i,\"ch\":%d}", Rec->ssid, Rec->rssi,
Rec->primary);
strcat(argres, onerec);
if (i < arg - 1)strcat(argres, ",");
}
strcat(argres, "]");
}
const int hw_rev = CONFIG_BOARD_HARDWARE_REVISION;

View File

@ -89,8 +89,6 @@ static esp_err_t SHA256hmacHash(unsigned char *data,
static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
{
char VarName[VAR_MAX_NAME_LENGTH];
char VarValue[VAR_MAX_VALUE_LENGTH];
struct jReadElement result;
const char *err_br;
const char *err_desc;
@ -112,6 +110,11 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
jRead(MSG->inputDataBuffer, "{'data'{'payload'{'variables'", &result);
if (result.dataType == JREAD_OBJECT)
{ //Write variables
char VarName[VAR_MAX_NAME_LENGTH];
char *VarValue = malloc(VAR_MAX_VALUE_LENGTH);
if (!VarValue)
return SYS_ERROR_NO_MEMORY;
for (int i = 0; i < result.elements; ++i)
{
jRead_string(MSG->inputDataBuffer, "{'data'{'payload'{'variables'{*", VarName,
@ -150,6 +153,7 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
jwObj_raw(VarName, VarValue);
}
free(VarValue);
}
else
return SYS_ERROR_PARSE_VARIABLES;