@@ -1028,7 +1028,8 @@ String SARA_R5::getIMSI(void)
1028
1028
String SARA_R5::getCCID (void )
1029
1029
{
1030
1030
char *response;
1031
- char ccidResponse[21 ] = {0x00 }; // E.g. +CCID: 8939107900010087330
1031
+ const int maxTextLen = 21 ;
1032
+ char ccidResponse[maxTextLen] = {0x00 }; // E.g. +CCID: 8939107900010087330
1032
1033
SARA_R5_error_t err;
1033
1034
1034
1035
response = sara_r5_calloc_char (minimumResponseAllocation);
@@ -1042,9 +1043,12 @@ String SARA_R5::getCCID(void)
1042
1043
{
1043
1044
searchPtr += strlen (" \r\n +CCID:" ); // Move searchPtr to first character - probably a space
1044
1045
while (*searchPtr == ' ' ) searchPtr++; // skip spaces
1045
- if (sscanf (searchPtr, " %s " , ccidResponse) != 1 )
1046
+ if (strlen (searchPtr) < maxTextLen) // Check we have enough space to hold the text
1046
1047
{
1047
- memset (ccidResponse, 0 , 21 );
1048
+ if (sscanf (searchPtr, " %s" , ccidResponse) != 1 )
1049
+ {
1050
+ ccidResponse[0 ] = 0 ;
1051
+ }
1048
1052
}
1049
1053
}
1050
1054
}
@@ -1055,7 +1059,8 @@ String SARA_R5::getCCID(void)
1055
1059
String SARA_R5::getSubscriberNo (void )
1056
1060
{
1057
1061
char *response;
1058
- char idResponse[128 ] = {0x00 }; // E.g. +CNUM: "ABCD . AAA","123456789012",129
1062
+ const int maxTextLen = 128 ;
1063
+ char idResponse[maxTextLen] = {0x00 }; // E.g. +CNUM: "ABCD . AAA","123456789012",129
1059
1064
SARA_R5_error_t err;
1060
1065
1061
1066
response = sara_r5_calloc_char (minimumResponseAllocation);
@@ -1064,9 +1069,18 @@ String SARA_R5::getSubscriberNo(void)
1064
1069
SARA_R5_RESPONSE_OK_OR_ERROR, response, SARA_R5_10_SEC_TIMEOUT);
1065
1070
if (err == SARA_R5_ERROR_SUCCESS)
1066
1071
{
1067
- if (sscanf (response, " \r\n +CNUM: %s" , idResponse) != 1 )
1072
+ char *searchPtr = strstr (response, " \r\n +CNUM:" );
1073
+ if (searchPtr != nullptr )
1068
1074
{
1069
- memset (idResponse, 0 , 128 );
1075
+ searchPtr += strlen (" \r\n +CNUM:" ); // Move searchPtr to first character - probably a space
1076
+ while (*searchPtr == ' ' ) searchPtr++; // skip spaces
1077
+ if (strlen (searchPtr) < maxTextLen) // Check we have enough space to hold the text
1078
+ {
1079
+ if (sscanf (searchPtr, " %s" , idResponse) != 1 )
1080
+ {
1081
+ idResponse[0 ] = 0 ;
1082
+ }
1083
+ }
1070
1084
}
1071
1085
}
1072
1086
free (response);
0 commit comments