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 EXPECTED_MAX_DATA_RESPONSE_SIZE (4096)
#define VAR_MAX_NAME_LENGTH MAX_DYNVAR_NAME_LENGTH #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 typedef enum
{ {

View File

@ -35,7 +35,8 @@ extern SYS_CONFIG SysConfig;
static void PrintInterfaceState(char *argres, int rw, esp_netif_t *netif) 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) static void funct_wifi_stat(char *argres, int rw)
@ -60,21 +61,19 @@ static void funct_gsm_stat(char *argres, int rw)
} }
#endif #endif
static void funct_mqtt_1_stat(char *argres, int rw) static void funct_mqtt_1_stat(char *argres, int rw)
{ {
snprintf(argres, MAX_DYNVAR_LENGTH, (GetMQTT1Connected())?"\"CONNECTED\"":"\"DISCONNECTED\""); snprintf(argres, MAX_DYNVAR_LENGTH, (GetMQTT1Connected()) ? "\"CONNECTED\"" : "\"DISCONNECTED\"");
} }
static void funct_mqtt_2_stat(char *argres, int rw) static void funct_mqtt_2_stat(char *argres, int rw)
{ {
snprintf(argres, MAX_DYNVAR_LENGTH, (GetMQTT2Connected())?"\"CONNECTED\"":"\"DISCONNECTED\""); snprintf(argres, MAX_DYNVAR_LENGTH, (GetMQTT2Connected()) ? "\"CONNECTED\"" : "\"DISCONNECTED\"");
} }
static void funct_def_interface(char *argres, int rw) static void funct_def_interface(char *argres, int rw)
{ {
GetDefaultNetIFName(argres); GetDefaultNetIFName(argres);
} }
static void funct_time(char *argres, int rw) static void funct_time(char *argres, int rw)
{ {
time_t now; time_t now;
@ -140,11 +139,20 @@ static void funct_wifiscan(char *argres, int rw)
static void funct_wifiscanres(char *argres, int rw) static void funct_wifiscanres(char *argres, int rw)
{ {
int arg = atoi(argres); 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) if (!Rec)
return; 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); Rec->primary);
strcat(argres, onerec);
if (i < arg - 1)strcat(argres, ",");
}
strcat(argres, "]");
} }
const int hw_rev = CONFIG_BOARD_HARDWARE_REVISION; 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) static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
{ {
char VarName[VAR_MAX_NAME_LENGTH];
char VarValue[VAR_MAX_VALUE_LENGTH];
struct jReadElement result; struct jReadElement result;
const char *err_br; const char *err_br;
const char *err_desc; const char *err_desc;
@ -112,6 +110,11 @@ static sys_error_code SysPayloadTypeVarsHandler(data_message_t *MSG)
jRead(MSG->inputDataBuffer, "{'data'{'payload'{'variables'", &result); jRead(MSG->inputDataBuffer, "{'data'{'payload'{'variables'", &result);
if (result.dataType == JREAD_OBJECT) if (result.dataType == JREAD_OBJECT)
{ //Write variables { //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) for (int i = 0; i < result.elements; ++i)
{ {
jRead_string(MSG->inputDataBuffer, "{'data'{'payload'{'variables'{*", VarName, 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); jwObj_raw(VarName, VarValue);
} }
free(VarValue);
} }
else else
return SYS_ERROR_PARSE_VARIABLES; return SYS_ERROR_PARSE_VARIABLES;