Skip to content

Commit 931d65e

Browse files
authored
Merge pull request #10 from sparkfun/calloc_corrections
calloc corrections - added a few missing frees
2 parents 147b23b + fadfacd commit 931d65e

File tree

1 file changed

+38
-11
lines changed

1 file changed

+38
-11
lines changed

src/SparkFun_LTE_Shield_Arduino_Library.cpp

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
Do you like this library? Help support SparkFun. Buy a board!
66
https://www.sparkfun.com/products/14997
77
Written by Jim Lindblom @ SparkFun Electronics, September 5, 2018
8-
8+
99
This Arduino library provides mechanisms to initialize and use
1010
the SARA-R4 module over either a SoftwareSerial or hardware serial port.
1111
@@ -461,7 +461,11 @@ String LTE_Shield::clock(void)
461461
err = sendCommandWithResponse(command, LTE_SHIELD_RESPONSE_OK,
462462
response, LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
463463
if (err != LTE_SHIELD_ERROR_SUCCESS)
464+
{
465+
free(command);
466+
free(response);
464467
return "";
468+
}
465469

466470
// Response format: \r\n+CCLK: "YY/MM/DD,HH:MM:SS-TZ"\r\n\r\nOK\r\n
467471
clockBegin = strchr(response, '\"'); // Find first quote
@@ -529,6 +533,8 @@ LTE_Shield_error_t LTE_Shield::clock(uint8_t *y, uint8_t *mo, uint8_t *d,
529533
}
530534
}
531535

536+
free(command);
537+
free(response);
532538
return err;
533539
}
534540

@@ -544,6 +550,7 @@ LTE_Shield_error_t LTE_Shield::autoTimeZone(boolean enable)
544550

545551
err = sendCommandWithResponse(command, LTE_SHIELD_RESPONSE_OK,
546552
NULL, LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
553+
free(command);
547554
return err;
548555
}
549556

@@ -569,7 +576,11 @@ int8_t LTE_Shield::rssi(void)
569576
err = sendCommandWithResponse(command,
570577
LTE_SHIELD_RESPONSE_OK, response, 10000, AT_COMMAND);
571578
if (err != LTE_SHIELD_ERROR_SUCCESS)
579+
{
580+
free(command);
581+
free(response);
572582
return -1;
583+
}
573584

574585
if (sscanf(response, "\r\n+CSQ: %d,%*d", &rssi) != 1)
575586
{
@@ -603,7 +614,11 @@ LTE_Shield_registration_status_t LTE_Shield::registration(void)
603614
err = sendCommandWithResponse(command, LTE_SHIELD_RESPONSE_OK,
604615
response, LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT, AT_COMMAND);
605616
if (err != LTE_SHIELD_ERROR_SUCCESS)
617+
{
618+
free(command);
619+
free(response);
606620
return LTE_SHIELD_REGISTRATION_INVALID;
621+
}
607622

608623
if (sscanf(response, "\r\n+CREG: %*d,%d", &status) != 1)
609624
{
@@ -676,6 +691,7 @@ LTE_Shield_error_t LTE_Shield::setAPN(String apn, uint8_t cid, LTE_Shield_pdp_ty
676691
switch (pdpType)
677692
{
678693
case PDP_TYPE_INVALID:
694+
free(command);
679695
return LTE_SHIELD_ERROR_UNEXPECTED_PARAM;
680696
break;
681697
case PDP_TYPE_IP:
@@ -903,6 +919,7 @@ LTE_Shield_error_t LTE_Shield::registerOperator(struct operator_stats oper)
903919
err = sendCommandWithResponse(command, LTE_SHIELD_RESPONSE_OK, NULL,
904920
180000);
905921

922+
free(command);
906923
return err;
907924
}
908925

@@ -981,6 +998,7 @@ LTE_Shield_error_t LTE_Shield::deregisterOperator(void)
981998
err = sendCommandWithResponse(command, LTE_SHIELD_RESPONSE_OK, NULL,
982999
LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
9831000

1001+
free(command);
9841002
return err;
9851003
}
9861004

@@ -1038,14 +1056,15 @@ LTE_Shield_error_t LTE_Shield::sendSMS(String number, String message)
10381056

10391057
err = sendCommandWithResponse(messageCStr, LTE_SHIELD_RESPONSE_OK,
10401058
NULL, 180000, NOT_AT_COMMAND);
1059+
1060+
free(messageCStr);
10411061
}
10421062
else
10431063
{
1064+
free(numberCStr);
10441065
err = LTE_SHIELD_ERROR_OUT_OF_MEMORY;
10451066
}
10461067

1047-
free(messageCStr);
1048-
10491068
return err;
10501069
}
10511070

@@ -1135,13 +1154,14 @@ LTE_Shield::LTE_Shield_gpio_mode_t LTE_Shield::getGpioMode(LTE_Shield_gpio_t gpi
11351154

11361155
sprintf(gpioChar, "%d", gpio); // Convert GPIO to char array
11371156
gpioStart = strstr(response, gpioChar); // Find first occurence of GPIO in response
1138-
if (gpioStart == NULL)
1139-
return GPIO_MODE_INVALID; // If not found return invalid
1140-
sscanf(gpioStart, "%*d,%d\r\n", &gpioMode);
11411157

11421158
free(command);
11431159
free(response);
11441160

1161+
if (gpioStart == NULL)
1162+
return GPIO_MODE_INVALID; // If not found return invalid
1163+
sscanf(gpioStart, "%*d,%d\r\n", &gpioMode);
1164+
11451165
return (LTE_Shield_gpio_mode_t)gpioMode;
11461166
}
11471167

@@ -1639,7 +1659,6 @@ LTE_Shield_error_t LTE_Shield::setMno(mobile_network_operator_t mno)
16391659
{
16401660
LTE_Shield_error_t err;
16411661
char *command;
1642-
char *response;
16431662

16441663
command = lte_calloc_char(strlen(LTE_SHIELD_COMMAND_MNO) + 3);
16451664
if (command == NULL)
@@ -1650,7 +1669,6 @@ LTE_Shield_error_t LTE_Shield::setMno(mobile_network_operator_t mno)
16501669
NULL, LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
16511670

16521671
free(command);
1653-
free(response);
16541672

16551673
return err;
16561674
}
@@ -1678,12 +1696,18 @@ LTE_Shield_error_t LTE_Shield::getMno(mobile_network_operator_t *mno)
16781696
err = sendCommandWithResponse(command, LTE_SHIELD_RESPONSE_OK,
16791697
response, LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
16801698
if (err != LTE_SHIELD_ERROR_SUCCESS)
1699+
{
1700+
free(command);
1701+
free(response);
16811702
return err;
1703+
}
16821704

16831705
i = strcspn(response, mno_keys); // Find first occurence of MNO key
16841706
if (i == strlen(response))
16851707
{
16861708
*mno = MNO_INVALID;
1709+
free(command);
1710+
free(response);
16871711
return LTE_SHIELD_ERROR_UNEXPECTED_RESPONSE;
16881712
}
16891713
*mno = (mobile_network_operator_t)(response[i] - 0x30); // Convert to integer
@@ -1694,7 +1718,7 @@ LTE_Shield_error_t LTE_Shield::getMno(mobile_network_operator_t *mno)
16941718
return err;
16951719
}
16961720

1697-
/*LTE_Shield_error_t LTE_Shield::sendCommandWithResponseAndTimeout(const char * command,
1721+
/*LTE_Shield_error_t LTE_Shield::sendCommandWithResponseAndTimeout(const char * command,
16981722
char * expectedResponse, uint16_t commandTimeout, boolean at)
16991723
{
17001724
unsigned long timeIn = millis();
@@ -1716,7 +1740,7 @@ LTE_Shield_error_t LTE_Shield::getMno(mobile_network_operator_t *mno)
17161740
return LTE_SHIELD_ERROR_OUT_OF_MEMORY;
17171741
}
17181742
readAvailable(response);
1719-
1743+
17201744
// Check for expected response
17211745
if (strcmp(response, expectedResponse) == 0)
17221746
{
@@ -1843,7 +1867,10 @@ LTE_Shield_error_t LTE_Shield::parseSocketReadIndication(int socket, int length)
18431867

18441868
err = socketRead(socket, length, readDest);
18451869
if (err != LTE_SHIELD_ERROR_SUCCESS)
1870+
{
1871+
free(readDest);
18461872
return err;
1873+
}
18471874

18481875
if (_socketReadCallback != NULL)
18491876
{
@@ -2255,4 +2282,4 @@ static boolean parseGPRMCString(char *rmcString, PositionData *pos,
22552282
return true;
22562283
}
22572284
return false;
2258-
}
2285+
}

0 commit comments

Comments
 (0)