summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSemun Lee <semun.lee@samsung.com>2020-01-03 12:47:40 +0900
committerSemun Lee <semun.lee@samsung.com>2020-01-03 13:13:49 +0900
commit8bcaf0bbae945d9dbc8eaeef101cedc6045c8eb9 (patch)
tree32e6f58f1b64b1321d3d49d57ceb17dc4345f1ae
parentf55c1c24b4a2378f7e3c23610ed9cc54a5298be0 (diff)
downloadw-ciss-8bcaf0bbae945d9dbc8eaeef101cedc6045c8eb9.tar.gz
w-ciss-8bcaf0bbae945d9dbc8eaeef101cedc6045c8eb9.tar.bz2
w-ciss-8bcaf0bbae945d9dbc8eaeef101cedc6045c8eb9.zip
This is for fixing build error with gcc 9 Change-Id: I52aae2a0dc9adc45c6513ad25c6d52f5e12e9600 Signed-off-by: Semun Lee <semun.lee@samsung.com>
-rw-r--r--include/ciss-types.h2
-rw-r--r--src/ciss-parser.c16
-rw-r--r--src/ciss-resp.c68
-rw-r--r--src/ciss-ussd.c8
-rw-r--r--src/ciss-util.c4
5 files changed, 56 insertions, 42 deletions
diff --git a/include/ciss-types.h b/include/ciss-types.h
index da4d623..d3e8ac0 100644
--- a/include/ciss-types.h
+++ b/include/ciss-types.h
@@ -36,7 +36,7 @@
#define MAX_SC_LEN 3 /**< Maximum length of service code */
#define ENCODE_TYPE_GSM 0x0F /**< the value of the GSM encoding fromat for ussd */
#define CISS_MMI_MAX_USSD_RESP_STRING 300
-#define CISS_MMI_MAX_SS_RESP_STRING 1664
+#define CISS_MMI_MAX_SS_RESP_STRING (1664 + 384) /**< tags can be added to the resp string. so size need to be larger than 1664 */
#define POPUP_DISPLAY_DURATION 70.0
#define TAPI_EVENT_SS_USSD_IND 100
#define TAPI_EVENT_SS_USSD_RESP 101
diff --git a/src/ciss-parser.c b/src/ciss-parser.c
index 62aad30..ab8dfc5 100644
--- a/src/ciss-parser.c
+++ b/src/ciss-parser.c
@@ -196,7 +196,8 @@ static unsigned char __ciss_parse_mmi_string(ciss_mmi_context_t *mmi_ctx, int *e
DBG("[CISS-ENGINE] sia = %s, sib = %s, sic = %s", sia, sib, sic);
}
- strncpy(mmi_ctx->ss_code, ss_code, MAX_SC_LEN);
+ strncpy(mmi_ctx->ss_code, ss_code, MAX_SC_LEN + 1);
+ mmi_ctx->ss_code[MAX_SC_LEN] = '\0';
if ((ss_operation != registerPassword) &&
(ss_operation != NULL_SS_OPERATION)) {
if (!_ciss_convert_sc_to_tapi_flavor(ss_code, &tapi_flavor, &ss_type)) {
@@ -208,15 +209,17 @@ static unsigned char __ciss_parse_mmi_string(ciss_mmi_context_t *mmi_ctx, int *e
}
if (ss_operation != NULL_SS_OPERATION) {
- if ((ss_operation != registerPassword) &&
+ if ((ss_operation != registerPassword) &&
((ss_type == CISS_SERVICE_FORWARDING) ||
(ss_type == CISS_SERVICE_BARRING))) {
- strncpy(bsg, sib, MAX_SIB_LEN);
+ strncpy(bsg, sib, MAX_SIA_LEN + 1);
+ bsg[MAX_SIA_LEN] = '\0';
} else if (ss_type == CISS_SERVICE_WAITING) {
if ((sib[0] != 0) || (sic[0] != 0)) {
ss_operation = NULL_SS_OPERATION;
} else {
- strncpy(bsg, sia, MAX_SIA_LEN);
+ strncpy(bsg, sia, MAX_SIA_LEN + 1);
+ bsg[MAX_SIA_LEN] = '\0';
}
} else {
bsg[0] = '\0';
@@ -235,8 +238,9 @@ static unsigned char __ciss_parse_mmi_string(ciss_mmi_context_t *mmi_ctx, int *e
if (ss_operation != NULL_SS_OPERATION) {
if (ss_type == CISS_SERVICE_FORWARDING) {
if (sia[0] != '\0') {
- memset(mmi_ctx->forward_number, 0, CISS_NUMBER_LEN_MAX+1);
- strncpy(mmi_ctx->forward_number, sia, CISS_NUMBER_LEN_MAX);
+ memset(mmi_ctx->forward_number, 0, CISS_NUMBER_LEN_MAX + 1);
+ strncpy(mmi_ctx->forward_number, sia, CISS_NUMBER_LEN_MAX + 1);
+ mmi_ctx->forward_number[CISS_NUMBER_LEN_MAX] = '\0';
}
}
}
diff --git a/src/ciss-resp.c b/src/ciss-resp.c
index be2e286..45477ab 100644
--- a/src/ciss-resp.c
+++ b/src/ciss-resp.c
@@ -328,8 +328,9 @@ static void __ciss_ui_mmi_create_mmi_result_string(ciss_result_t *pSSResult, int
DBG("Enter");
ret_if(pSSResult == NULL);
ret_if(result_string == NULL);
- char mszBuffer[CISS_TEXT_LEN_MAX*5];
- char szBuffer[CISS_TEXT_LEN_MAX];
+ int ret;
+ char mszBuffer[CISS_TEXT_LEN_MAX * 5];
+ char szBuffer[CISS_TEXT_LEN_MAX + 16];
char service[CISS_TEXT_LEN_MAX];
char teleservice[CISS_TEXT_LEN_MAX];
char flavor[CISS_TEXT_LEN_MAX];
@@ -344,59 +345,61 @@ static void __ciss_ui_mmi_create_mmi_result_string(ciss_result_t *pSSResult, int
mszBuffer[CISS_TEXT_LEN_MAX - 1] = '\0';
if (strlen(teleservice)) {
- strncat(mszBuffer, "<br>", strlen("<br>"));
- strncat(mszBuffer, " -", strlen(" -"));
- strncat(mszBuffer, teleservice, strlen(teleservice));
+ strncat(mszBuffer, "<br>", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, " -", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, teleservice, sizeof(mszBuffer) - strlen(mszBuffer) - 1);
}
DBG("create_result_string: Label Text(telecommSvc) = %d\n", pSSResult->szBearer[index]);
if (pSSResult->szSsType == CISS_SERVICE_FORWARDING) {
if ((strcmp(flavor, CISS_STR_CALL_FORWARDING_ACTIVE_C_WHEN_NOREPLY) == 0) &&
(pSSResult->nForwardWaitingTime[index] != 0)) {
- snprintf(szBuffer, CISS_TEXT_LEN_MAX, "%s %02ds", flavor, pSSResult->nForwardWaitingTime[index]);
+ snprintf(szBuffer, sizeof(szBuffer), "%s %02ds", flavor, pSSResult->nForwardWaitingTime[index]);
} else {
strncpy(szBuffer, flavor, CISS_TEXT_LEN_MAX - 1);
szBuffer[CISS_TEXT_LEN_MAX - 1] = '\0';
}
if (strlen(flavor) > 1) {
- strncat(mszBuffer, "<br>", strlen("<br>"));
- strncat(mszBuffer, " -", strlen(" -"));
- strncat(mszBuffer, szBuffer, strlen(szBuffer));
+ strncat(mszBuffer, "<br>", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, " -", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, szBuffer, sizeof(mszBuffer) - strlen(mszBuffer) - 1);
}
DBG("\n [CISS-MMI] create_result_string: Label Text(flavor) = %s\n", flavor);
- strncat(mszBuffer, "<br>", strlen("<br>"));
- strncat(mszBuffer, " -", strlen(" -"));
- strncat(mszBuffer, status, strlen(status));
+ strncat(mszBuffer, "<br>", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, " -", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, status, sizeof(mszBuffer) - strlen(mszBuffer) - 1);
if (strlen(pSSResult->szForwardedToNumber[index]) &&
(strcmp(status, CISS_STR_ACTIVATED) == 0)) {
DBG("\n [CISS-MMI] create_result_string: Forwarded to number = %s\n",
pSSResult->szForwardedToNumber[index]);
- strncat(mszBuffer, "<br>", strlen("<br>"));
- strncat(mszBuffer, " ", strlen(" "));
- strncat(mszBuffer, pSSResult->szForwardedToNumber[index], strlen(pSSResult->szForwardedToNumber[index]));
+ strncat(mszBuffer, "<br>", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, " ", sizeof(mszBuffer) - strlen(mszBuffer) -1);
+ strncat(mszBuffer, pSSResult->szForwardedToNumber[index], sizeof(mszBuffer) - strlen(mszBuffer) - 1);
} else {
DBG("\n [CISS-MMI] create_result_string: Forwarded to number is not need");
}
} else if (pSSResult->szSsType == CISS_SERVICE_BARRING) {
if (strlen(flavor) > 1) {
- strncat(mszBuffer, "<br>", strlen("<br>"));
- strncat(mszBuffer, " -", strlen(" -"));
- strncat(mszBuffer, flavor, strlen(flavor));
+ strncat(mszBuffer, "<br>", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, " -", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, flavor, sizeof(mszBuffer) - strlen(mszBuffer) - 1);
}
- strncat(mszBuffer, "<br>", strlen("<br>"));
- strncat(mszBuffer, " -", strlen(" -"));
- strncat(mszBuffer, status, strlen(status));
+ strncat(mszBuffer, "<br>", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, " -", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, status, sizeof(mszBuffer) - strlen(mszBuffer) - 1);
} else if (pSSResult->szSsType == CISS_SERVICE_WAITING) {
- strncat(mszBuffer, "<br>", strlen("<br>"));
- strncat(mszBuffer, " -", strlen("< ->"));
- strncat(mszBuffer, status, strlen(status));
+ strncat(mszBuffer, "<br>", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, " -", sizeof(mszBuffer) - strlen(mszBuffer) - 1);
+ strncat(mszBuffer, status, sizeof(mszBuffer) - strlen(mszBuffer) - 1);
}
- strncpy(result_string, mszBuffer, sizeof(mszBuffer) - 1);
+ ret = snprintf(result_string, CISS_USSD_DATA_SIZE_MAX, "%s", mszBuffer);
+ if (ret >= CISS_USSD_DATA_SIZE_MAX)
+ WARN("result_string is truncated");
DBG("Result String:%s\n", result_string);
DBG("Leave");
@@ -521,10 +524,11 @@ static int __ciss_create_ss_result_string(char *ss_result_string /*out */, ciss_
__ciss_ui_mmi_create_cnap_result_string(ciss_result, resultstring[0], ad);
} else if (ciss_result->nRecordNum == 0) {
DBG("\n [CISS-MMI] result.nRecordNum == 0 \n");
- strncpy(resultstring[0], CISS_STR_SUCCESS, CISS_TEXT_LEN_MAX - 1);
- strncat(ss_result_string, "<br> ", strlen("<br> "));
- strncat(ss_result_string, resultstring[0], CISS_USSD_DATA_SIZE_MAX);
- strncat(ss_result_string, "<br> ", strlen("<br> "));
+ strncpy(resultstring[0], CISS_STR_SUCCESS, CISS_TEXT_LEN_MAX);
+ resultstring[0][CISS_TEXT_LEN_MAX - 1] = '\0';
+ strncat(ss_result_string, "<br> ", CISS_MMI_MAX_SS_RESP_STRING - strlen(ss_result_string) - 1);
+ strncat(ss_result_string, resultstring[0], CISS_MMI_MAX_SS_RESP_STRING - strlen(ss_result_string) - 1);
+ strncat(ss_result_string, "<br> ", CISS_MMI_MAX_SS_RESP_STRING - strlen(ss_result_string) - 1);
} else {
int g_count = 0;
for (g_count = 0; g_count < ciss_result->nRecordNum; g_count++) {
@@ -534,9 +538,9 @@ static int __ciss_create_ss_result_string(char *ss_result_string /*out */, ciss_
}
for (count = 0; count < ciss_result->nRecordNum; count++) {
- strncat(ss_result_string, "<br> ", strlen("<br> "));
- strncat(ss_result_string, resultstring[count], CISS_USSD_DATA_SIZE_MAX);
- strncat(ss_result_string, "<br> ", strlen("<br> "));
+ strncat(ss_result_string, "<br> ", CISS_MMI_MAX_SS_RESP_STRING - strlen(ss_result_string) - 1);
+ strncat(ss_result_string, resultstring[count], CISS_MMI_MAX_SS_RESP_STRING - strlen(ss_result_string) - 1);
+ strncat(ss_result_string, "<br> ", CISS_MMI_MAX_SS_RESP_STRING - strlen(ss_result_string) - 1);
}
DBG("Final Result string : %s ", ss_result_string);
DBG("Leave");
diff --git a/src/ciss-ussd.c b/src/ciss-ussd.c
index 65cbcef..d004081 100644
--- a/src/ciss-ussd.c
+++ b/src/ciss-ussd.c
@@ -27,6 +27,7 @@ static int __ciss_get_ussd_string(char *ss_result_string, int length, char *szSt
DBG("Enter");
retv_if(ss_result_string == NULL, -1);
retv_if(szString == NULL, -1);
+ int ret;
char *ptr = NULL;
char *temp_ptr = NULL;
@@ -39,7 +40,12 @@ static int __ciss_get_ussd_string(char *ss_result_string, int length, char *szSt
while ((ptr = strtok_r(NULL, "\n", &temp_ptr))) {
char temp_str[CISS_MMI_MAX_USSD_RESP_STRING];
strncpy(temp_str, ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING - 1);
- snprintf(ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING, "%s<br>%s", temp_str, ptr);
+ temp_str[CISS_MMI_MAX_USSD_RESP_STRING - 1] = '\0';
+ ret = snprintf(ss_result_string, CISS_MMI_MAX_USSD_RESP_STRING, "%s<br>%s", temp_str, ptr);
+ if (ret >= CISS_MMI_MAX_USSD_RESP_STRING) {
+ ERR("USSD string is truncated");
+ return -1;
+ }
}
} else {
strncpy(ss_result_string, "", CISS_MMI_MAX_USSD_RESP_STRING - 1);
diff --git a/src/ciss-util.c b/src/ciss-util.c
index 3b29406..aedfaed 100644
--- a/src/ciss-util.c
+++ b/src/ciss-util.c
@@ -29,7 +29,7 @@ char *_ciss_strcpy(char *pBuffer, int nBufCount, const char *pszString)
memset(pBuffer, 0, nBufCount * sizeof(char));
if ((nBufCount - 1) >= (int)strlen(pszString)) {
- strncpy(pBuffer, pszString, (int)strlen(pszString));
+ strncpy(pBuffer, pszString, nBufCount);
pBuffer[(int)strlen(pszString)] = '\0';
} else {
DBG("\n [CISS-ENGINE] _ciss_strcpy:short of buffer..BufCount=%d, strlen=%zu, str=%s\n", nBufCount, strlen(pszString), pszString);
@@ -219,7 +219,7 @@ unsigned int _ciss_util_get_mcc()
snprintf(plmn_string, 10, "%d", plmn_value);
/*First 3 digits of plmn value constitutes the mcc value */
- strncpy(mcc_value, plmn_string, 3);
+ stpncpy(mcc_value, plmn_string, 3);
mcc = (unsigned int)atoi(mcc_value);
} else {
ERR("vconf_get_int failed..[%d]", ret);