Hi Alex,

Ack with a minor comment below. Thanks.

Regards, Vu

On 2/3/20 10:39 PM, Alex Jones wrote:
Mostly strncpy and strncat problems.
---
src/base/daemon.c | 1 +
src/ckpt/ckptd/cpd_imm.c | 4 ++--
src/ckpt/ckptnd/cpnd_res.c | 2 +-
src/clm/clmd/clms_imm.cc | 2 +-
src/dtm/dtmnd/dtm_intra_svc.cc | 2 +-
src/evt/evtd/eds_ll.c | 4 ++--
src/imm/agent/imma_oi_api.cc | 3 +--
src/imm/agent/imma_om_api.cc | 14 ++++-------
src/imm/apitest/management/populate.c | 2 +-
.../management/test_saImmOmClassCreate_2.c | 16 ++++++-------
src/imm/immd/immd_amf.c | 2 +-
src/imm/immloadd/imm_loader.cc | 10 ++++----
src/imm/immnd/immnd_amf.c | 2 +-
src/imm/immnd/immnd_evt.c | 8 +++----
src/imm/tools/imm_cfg.c | 2 +-
src/imm/tools/imm_import.cc | 16 +++++--------
src/lck/lckd/gld_imm.c | 2 +-
src/log/agent/lga_agent.cc | 2 +-
src/log/apitest/logtest.c | 2 +-
src/log/apitest/tet_LogOiOps.c | 4 ++--
src/log/logd/lgs_dest.cc | 6 ++---
src/log/logd/lgs_util.cc | 10 ++++----
src/mds/mds_c_api.c | 4 ++--
src/msg/common/mqsv_common.c | 1 +
src/msg/msgnd/mqnd_evt.c | 1 +
src/msg/msgnd/mqnd_imm.c | 5 ++--
src/msg/msgnd/mqnd_proc.c | 1 +
src/plm/apitest/test_saPlmReadinessTrack.c | 24 +++++++++----------
src/plm/plmcd/plmc_read_config.c | 22 ++++++++---------
src/plm/plmcd/plmcd.c | 2 +-
src/plm/plmd/plms_imm.c | 5 ++--
src/rde/rded/rde_rda.cc | 2 +-
src/smf/smfd/SmfUtils.cc | 14 ++++-------
src/smf/smfd/smfd_amf.cc | 2 +-
34 files changed, 95 insertions(+), 104 deletions(-)

diff --git a/src/base/daemon.c b/src/base/daemon.c
index e24eaaaf0..f8e284fa1 100644
--- a/src/base/daemon.c
+++ b/src/base/daemon.c
@@ -510,6 +510,7 @@ void daemonize(int argc, char *argv[])
void daemonize_as_user(const char *username, int argc, char *argv[])
{
strncpy(__runas_username, username, sizeof(__runas_username));
+ __runas_username[sizeof(__runas_username) - 1] = '\0';
daemonize(argc, argv);
}

diff --git a/src/ckpt/ckptd/cpd_imm.c b/src/ckpt/ckptd/cpd_imm.c
index af5cc29ec..e2dee0c2b 100644
--- a/src/ckpt/ckptd/cpd_imm.c
+++ b/src/ckpt/ckptd/cpd_imm.c
@@ -138,8 +138,8 @@ cpd_saImmOiRtAttrUpdateCallback(SaImmOiHandleT immOiHandle,
ckpt_name = strdup(object_name);
}

- TRACE_4("ckpt_name: %s", ckpt_name);
- TRACE_4("node_name: %s", node_name);
+ TRACE_4("ckpt_name: %s", ckpt_name ? ckpt_name : "n/a");
+ TRACE_4("node_name: %s", node_name ? node_name : "n/a");

cpd_ckpt_map_node_get(&cb->ckpt_map_tree, ckpt_name, &map_info);

diff --git a/src/ckpt/ckptnd/cpnd_res.c b/src/ckpt/ckptnd/cpnd_res.c
index 3d69f3f3f..3e97495a9 100644
--- a/src/ckpt/ckptnd/cpnd_res.c
+++ b/src/ckpt/ckptnd/cpnd_res.c
@@ -422,7 +422,7 @@ void *cpnd_restart_shm_create(NCS_OS_POSIX_SHM_REQ_INFO *cpnd_open_req,
cpnd_open_req->info.open.i_flags = O_CREAT | O_RDWR;
rc = ncs_os_posix_shm(cpnd_open_req);
if (NCSCC_RC_FAILURE == rc) {
- LOG_ER("cpnd open request fail for RDWR mode %s", buf);
+ LOG_ER("cpnd open request fail for RDWR mode %s", buffer);
m_MMGR_FREE_CPND_DEFAULT(buffer);
return NULL;
}
diff --git a/src/clm/clmd/clms_imm.cc b/src/clm/clmd/clms_imm.cc
index 017607d74..46b045faa 100644
--- a/src/clm/clmd/clms_imm.cc
+++ b/src/clm/clmd/clms_imm.cc
@@ -227,7 +227,7 @@ CLMS_CLUSTER_NODE *clms_node_new(SaNameT *name,
} else if (!strcmp(attr->attrName, "saClmNodeAddress")) {
node->node_addr.length = (SaUint16T)strlen(*((char **)value));
strncpy((char *)node->node_addr.value, *((char **)value),
- node->node_addr.length);
+ node->node_addr.length + 1);
} else if (!strcmp(attr->attrName, "saClmNodeEE")) {
SaNameT *name = (SaNameT *)value;
size_t nameLen = osaf_extended_name_length(name);
diff --git a/src/dtm/dtmnd/dtm_intra_svc.cc b/src/dtm/dtmnd/dtm_intra_svc.cc
index 1affd65d3..cf38e4544 100644
--- a/src/dtm/dtmnd/dtm_intra_svc.cc
+++ b/src/dtm/dtmnd/dtm_intra_svc.cc
@@ -1523,7 +1523,7 @@ uint32_t dtm_intranode_process_node_up(NODE_ID node_id, char *node_name,
uint8_t buffer[DTM_LIB_NODE_UP_MSG_SIZE_FULL];
node_up_msg.node_id = node_id;
node_up_msg.i_addr_family = i_addr_family;
- strncpy(node_up_msg.node_ip, node_ip, INET6_ADDRSTRLEN);
+ strncpy(node_up_msg.node_ip, node_ip, INET6_ADDRSTRLEN - 1);
strncpy(node_up_msg.node_name, node_db_info->node_name,
_POSIX_HOST_NAME_MAX);
TRACE("DTM: node_ip:%s, node_id:%u i_addr_family:%d ", node_up_msg.node_ip,
diff --git a/src/evt/evtd/eds_ll.c b/src/evt/evtd/eds_ll.c
index 7db4839cd..6e559e963 100644
--- a/src/evt/evtd/eds_ll.c
+++ b/src/evt/evtd/eds_ll.c
@@ -1802,7 +1802,7 @@ uint32_t eds_channel_close(EDS_CB *cb, uint32_t reg_id, uint32_t chan_id,
TRACE("use count is zero");
chan_name.length = strlen((char *)wp->cname);
strncpy((char *)chan_name.value, (char *)wp->cname,
- chan_name.length);
+ chan_name.length + 1);
if ((wp->chan_attrib & CHANNEL_UNLINKED) || (true == forced)) {
TRACE(
"forced flag is set 'or' CHANNEL is marked as CHANNEL_UNLINKED");
@@ -1874,7 +1874,7 @@ uint32_t eds_channel_unlink(EDS_CB *cb, uint32_t chan_name_len,
"Use count is zero, delete the and IMM object");
channel_name.length = strlen((char *)wp->cname);
strncpy((char *)channel_name.value,
- (char *)wp->cname, channel_name.length);
+ (char *)wp->cname, channel_name.length + 1);
if (cb->ha_state == SA_AMF_HA_ACTIVE) {
if ((rc = immutil_saImmOiRtObjectDelete(
cb->immOiHandle,
diff --git a/src/imm/agent/imma_oi_api.cc b/src/imm/agent/imma_oi_api.cc
index 479ea3314..0992c8225 100644
--- a/src/imm/agent/imma_oi_api.cc
+++ b/src/imm/agent/imma_oi_api.cc
@@ -2995,8 +2995,7 @@ static SaAisErrorT rt_object_create_common(
/*alloc-1 */
evt.info.immnd.info.objCreate.className.buf =
(char *)malloc(evt.info.immnd.info.objCreate.className.size);
- strncpy(evt.info.immnd.info.objCreate.className.buf, className,
- evt.info.immnd.info.objCreate.className.size);
+ strcpy(evt.info.immnd.info.objCreate.className.buf, className);

if (objectName) {
SaUint32T objectNameLen = strlen(objectName);
diff --git a/src/imm/agent/imma_om_api.cc b/src/imm/agent/imma_om_api.cc
index 0d24b2335..6c179b9c9 100644
--- a/src/imm/agent/imma_om_api.cc
+++ b/src/imm/agent/imma_om_api.cc
@@ -985,7 +985,7 @@ SaAisErrorT saImmOmAdminOwnerInitialize(
}

if ((adminOwnerHandle == NULL) || (adminOwnerName == NULL) ||
- (nameLen = strlen(adminOwnerName)) == 0) {
+ (nameLen = strlen(adminOwnerName) + 1) == 0) {
[Vu] The check above is to cover the case `adminOwnerName` value is empty ""; so your change seems not correct.
However, the code base has a bug. It should be:
  if ((adminOwnerHandle == NULL) || (adminOwnerName == NULL) ||
      ((nameLen = strlen(adminOwnerName)) == 0)) {

Regards, Vu
TRACE_2(
"ERR_INVALID_PARAM: 'adminOwnerHandle is NULL, or adminOwnerName is NULL, or adminOwnerName "
"has zero length");
@@ -1938,8 +1938,7 @@ static SaAisErrorT ccb_object_create_common(
rc = SA_AIS_ERR_NO_MEMORY;
goto mds_send_fail;
}
- strncpy(evt.info.immnd.info.objCreate.className.buf, className,
- evt.info.immnd.info.objCreate.className.size);
+ strcpy(evt.info.immnd.info.objCreate.className.buf, className);

if (parentName) {
if (!osaf_is_extended_name_valid(parentName)) {
@@ -5313,8 +5312,7 @@ SaAisErrorT saImmOmClassDescriptionGet_2(
evt.info.immnd.info.classDescr.className.size = strlen(className) + 1;
evt.info.immnd.info.classDescr.className.buf = (char *)malloc(
evt.info.immnd.info.classDescr.className.size); /*alloc-0 */
- strncpy(evt.info.immnd.info.classDescr.className.buf, className,
- (size_t)evt.info.immnd.info.classDescr.className.size);
+ strcpy(evt.info.immnd.info.classDescr.className.buf, className);

TRACE("ClassName: %s", className);

@@ -5737,8 +5735,7 @@ SaAisErrorT saImmOmClassDelete(SaImmHandleT immHandle,
evt.info.immnd.info.classDescr.className.size = strlen(className) + 1;
evt.info.immnd.info.classDescr.className.buf = (char *)malloc(
evt.info.immnd.info.classDescr.className.size); /*alloc-1 */
- strncpy(evt.info.immnd.info.classDescr.className.buf, className,
- (size_t)evt.info.immnd.info.classDescr.className.size);
+ strcpy(evt.info.immnd.info.classDescr.className.buf, className);

rc = imma_evt_fake_evs(cb, &evt, &out_evt, timeout, cl_node->handle, &locked,
true);
@@ -7002,8 +6999,7 @@ SaAisErrorT immsv_sync(SaImmHandleT immHandle, const SaImmClassNameT className,
/*alloc-1 */
evt.info.immnd.info.obj_sync.className.buf =
(char *)malloc(evt.info.immnd.info.obj_sync.className.size);
- strncpy(evt.info.immnd.info.obj_sync.className.buf, className,
- evt.info.immnd.info.obj_sync.className.size);
+ strcpy(evt.info.immnd.info.obj_sync.className.buf, className);

evt.info.immnd.info.obj_sync.objectName.size =
osaf_extended_name_length(objectName) + 1;
diff --git a/src/imm/apitest/management/populate.c b/src/imm/apitest/management/populate.c
index 0f451dce9..28fea28bf 100644
--- a/src/imm/apitest/management/populate.c
+++ b/src/imm/apitest/management/populate.c
@@ -125,7 +125,7 @@ static range_obj_t *gen_pop_tree(unsigned int level, range_obj_t *rootObj,
if (level == 0) {
assert(!rootObj && !rdn && base == 1);
strncpy((char *)rangeObj->parentDn.value, rdnAttName,
- SA_MAX_NAME_LENGTH);
+ SA_MAX_NAME_LENGTH - 1);
strncat((char *)rangeObj->parentDn.value, "=",
SA_MAX_NAME_LENGTH);
strncat((char *)rangeObj->parentDn.value, "0",
diff --git a/src/imm/apitest/management/test_saImmOmClassCreate_2.c b/src/imm/apitest/management/test_saImmOmClassCreate_2.c
index 9e12f4f61..6c69708d8 100644
--- a/src/imm/apitest/management/test_saImmOmClassCreate_2.c
+++ b/src/imm/apitest/management/test_saImmOmClassCreate_2.c
@@ -586,7 +586,7 @@ static int enableSchemaChange()
SaNameT objectName;
objectName.length = strlen(OPENSAF_IMM_OBJECT_DN);
strncpy((char *)objectName.value, OPENSAF_IMM_OBJECT_DN,
- objectName.length);
+ objectName.length + 1);
SaImmAccessorHandleT accessorHandle;
const SaImmAttrNameT attName = (char *)OPENSAF_IMM_ATTR_NOSTD_FLAGS;
SaImmAttrNameT attNames[] = {attName, NULL};
@@ -641,7 +641,7 @@ static void disableSchemaChange()
SaNameT objectName;
objectName.length = strlen(OPENSAF_IMM_OBJECT_DN);
strncpy((char *)objectName.value, OPENSAF_IMM_OBJECT_DN,
- objectName.length);
+ objectName.length + 1);
SaImmAdminOwnerHandleT ownerHandle;
const SaImmAdminOwnerNameT adminOwnerName = OPENSAF_IMM_IMMSV_ADMO;
const SaNameT *objectNames[] = {&objectName, NULL};
@@ -939,7 +939,7 @@ void saImmOmClassCreate_SchemaChange_2_07(void)
SaImmCcbHandleT ccbHandle;
SaNameT objectName;
objectName.length = strlen(__FUNCTION__);
- strncpy((char *)objectName.value, __FUNCTION__, objectName.length);
+ strncpy((char *)objectName.value, __FUNCTION__, objectName.length + 1);
SaNameT *nameValues[] = {&objectName};
SaImmAttrValuesT_2 rdnValue = {"rdn", SA_IMM_ATTR_SANAMET, 1,
(void **)nameValues};
@@ -1027,7 +1027,7 @@ void saImmOmClassCreate_SchemaChange_2_08(void)
SaImmCcbHandleT ccbHandle;
SaNameT objectName;
objectName.length = strlen(__FUNCTION__);
- strncpy((char *)objectName.value, __FUNCTION__, objectName.length);
+ strncpy((char *)objectName.value, __FUNCTION__, objectName.length + 1);
SaNameT *nameValues[] = {&objectName};
SaImmAttrValuesT_2 rdnValue = {"rdn", SA_IMM_ATTR_SANAMET, 1,
(void **)nameValues};
@@ -1344,7 +1344,7 @@ void saImmOmClassCreate_SchemaChange_2_15(void)
(SaImmOiImplementerNameT) __FUNCTION__;
SaNameT objectName;
objectName.length = strlen(__FUNCTION__);
- strncpy((char *)objectName.value, __FUNCTION__, objectName.length);
+ strncpy((char *)objectName.value, __FUNCTION__, objectName.length + 1);
SaNameT *nameValues[] = {&objectName};
SaImmAttrValuesT_2 rdnValue = {"rdn", SA_IMM_ATTR_SANAMET, 1,
(void **)nameValues};
@@ -1411,7 +1411,7 @@ void saImmOmClassCreate_SchemaChange_2_16(void)
(SaImmOiImplementerNameT) __FUNCTION__;
SaNameT objectName;
objectName.length = strlen(__FUNCTION__);
- strncpy((char *)objectName.value, __FUNCTION__, objectName.length);
+ strncpy((char *)objectName.value, __FUNCTION__, objectName.length + 1);
SaNameT *nameValues[] = {&objectName};
SaImmAttrValuesT_2 rdnValue = {"rdn", SA_IMM_ATTR_SANAMET, 1,
(void **)nameValues};
@@ -1560,7 +1560,7 @@ static void updateFileSystemStatus(uint64_t operation_id)

objectName.length = strlen(mgmt_object);
strncpy((char *)objectName.value, mgmt_object,
- objectName.length);
+ objectName.length + 1);

safassert(immutil_saImmOmInitialize(&myOmHandle, NULL, &immVersion),
SA_AIS_OK);
@@ -1590,7 +1590,7 @@ uint32_t fetchAttributeValue(const char* attribute_name)
SaNameT objectName;
objectName.length = strlen(mgmt_object);
strncpy((char *)objectName.value, mgmt_object,
- objectName.length);
+ objectName.length + 1);

safassert(immutil_saImmOmInitialize(&myOmHandle, NULL,
&immVersion),
diff --git a/src/imm/immd/immd_amf.c b/src/imm/immd/immd_amf.c
index bd29faf3a..826c082da 100644
--- a/src/imm/immd/immd_amf.c
+++ b/src/imm/immd/immd_amf.c
@@ -382,7 +382,7 @@ static void *amf_init_start(void *notused)
healthy.keyLen = (SaUint16T)strlen((char *)health_key);
if (healthy.keyLen < sizeof(healthy.key)) {
strncpy((char *)healthy.key, health_key,
- sizeof(healthy.key));
+ sizeof(healthy.key) - 1);
} else {
LOG_ER("Health check key too long:%u, exiting",
healthy.keyLen);
diff --git a/src/imm/immloadd/imm_loader.cc b/src/imm/immloadd/imm_loader.cc
index 3bd3e2b2e..516fb24ec 100644
--- a/src/imm/immloadd/imm_loader.cc
+++ b/src/imm/immloadd/imm_loader.cc
@@ -878,7 +878,7 @@ static void startElementHandler(void *userData, const xmlChar *name,
len = strlen(classAttr);

state->objectClass = (char *)malloc(len + 1);
- strncpy(state->objectClass, classAttr, len);
+ strncpy(state->objectClass, classAttr, len + 1);
state->objectClass[len] = '\0';

TRACE_8("OBJECT CLASS NAME: %s", state->objectClass);
@@ -1807,8 +1807,7 @@ void addObjectAttributeDefinition(
LOG_ER("Failed to malloc attrValues.attrName");
exit(1);
}
- strncpy(attrValues.attrName, attrName, len);
- attrValues.attrName[len] = '\0';
+ strcpy(attrValues.attrName, attrName);

/* Add attrValues to the list */
attrValuesList->push_front(attrValues);
@@ -1842,8 +1841,7 @@ static void saveRDNAttribute(ParserState *state) {
exit(1);
}

- strncpy(values.attrName, state->attrName, len);
- values.attrName[len] = '\0';
+ strcpy(values.attrName, state->attrName);

/* Set the valueType */
values.attrValueType = state->attrValueType;
@@ -1980,7 +1978,7 @@ static void charsToValueHelper(SaImmAttrValueT *value, SaImmValueTypeT type,
len = strlen(str);
*value = malloc(sizeof(SaStringT));
*((SaStringT *)*value) = (SaStringT)malloc(len + 1);
- strncpy(*((SaStringT *)*value), str, len);
+ strncpy(*((SaStringT *)*value), str, len + 1);
(*((SaStringT *)*value))[len] = '\0';
break;
case SA_IMM_ATTR_SAANYT:
diff --git a/src/imm/immnd/immnd_amf.c b/src/imm/immnd/immnd_amf.c
index be2a92a7f..f5c2154cf 100644
--- a/src/imm/immnd/immnd_amf.c
+++ b/src/imm/immnd/immnd_amf.c
@@ -189,7 +189,7 @@ static void *amf_init_start(void *__cb)
healthy.keyLen = (SaUint16T)strlen((char *)health_key);
if (healthy.keyLen < sizeof(healthy.key)) {
strncpy((char *)healthy.key, health_key,
- sizeof(healthy.key));
+ sizeof(healthy.key) - 1);
} else {
LOG_ER("Health check key too long:%u, exiting",
healthy.keyLen);
diff --git a/src/imm/immnd/immnd_evt.c b/src/imm/immnd/immnd_evt.c
index 3bd56fe34..51a9b8517 100644
--- a/src/imm/immnd/immnd_evt.c
+++ b/src/imm/immnd/immnd_evt.c
@@ -6796,10 +6796,6 @@ static void immnd_evt_proc_object_sync(IMMND_CB *cb, IMMND_EVT *evt,
err = immModel_rtObjectUpdate(
cb, &objModify, 0, 0, &isLocal, NULL, NULL,
NULL, NULL, NULL);
- // free(objModify.objectName.buf);
- immsv_free_attrmods(objModify.attrMods);
- memset(&objModify, '\0',
- sizeof(IMMSV_OM_CCB_OBJECT_MODIFY));
if (err != SA_AIS_OK) {
LOG_ER(
"Failed to apply RTA update on object '%s' at sync client - aborting",
@@ -6807,6 +6803,10 @@ static void immnd_evt_proc_object_sync(IMMND_CB *cb, IMMND_EVT *evt,
immnd_ackToNid(NCSCC_RC_FAILURE);
abort();
}
+ // free(objModify.objectName.buf);
+ immsv_free_attrmods(objModify.attrMods);
+ memset(&objModify, '\0',
+ sizeof(IMMSV_OM_CCB_OBJECT_MODIFY));
}
obj_sync = obj_sync->next;
} while (obj_sync);
diff --git a/src/imm/tools/imm_cfg.c b/src/imm/tools/imm_cfg.c
index b8a9a835b..24648e692 100644
--- a/src/imm/tools/imm_cfg.c
+++ b/src/imm/tools/imm_cfg.c
@@ -1464,7 +1464,7 @@ static char *readinput(char *prompt)
line[len - 1] = 0;
if (rdlen) {
rdline = realloc(rdline, rdlen + len);
- strncat(rdline, line, len);
+ strncat(rdline, line, len + 1);
rdlen += len - 1;
} else {
rdline = line;
diff --git a/src/imm/tools/imm_import.cc b/src/imm/tools/imm_import.cc
index 32a3f5424..c1c178173 100644
--- a/src/imm/tools/imm_import.cc
+++ b/src/imm/tools/imm_import.cc
@@ -588,8 +588,7 @@ static void getClassFromImm(ParserState *state,
state->parsingStatus = 1;
break;
}
- strncpy(values.attrName, attr->attrName, len);
- values.attrName[len] = '\0';
+ strcpy(values.attrName, attr->attrName);

values.attrValueType = attr->attrValueType;
values.attrValuesNumber = 1;
@@ -1442,7 +1441,7 @@ static void startElementHandler(void *userData, const xmlChar *name,
len = strlen(classAttr);

state->objectClass = (char *)malloc(len + 1);
- strncpy(state->objectClass, classAttr, len);
+ strcpy(state->objectClass, classAttr);
state->objectClass[len] = '\0';

TRACE_8("OBJECT CLASS NAME: %s", state->objectClass);
@@ -1853,7 +1852,7 @@ static void charactersHandler(void *userData, const xmlChar *chars, int len) {
state->parsingStatus = 1;
return;
}
- strncpy(str, state->attrValueBuffers.front(), oldsize + 1);
+ strcpy(str, state->attrValueBuffers.front());
TRACE_8("COPIED OLD VALUE %u %s", oldsize, str);

strncpy(str + oldsize, (const char *)chars, (size_t)len + 1);
@@ -2220,8 +2219,7 @@ static void addObjectAttributeDefinition(ParserState *state) {
stopParser(state);
state->parsingStatus = 1;
} else {
- strncpy(attrValues.attrName, state->attrName, len);
- attrValues.attrName[len] = '\0';
+ strcpy(attrValues.attrName, state->attrName);

/* Add attrValues to the list */
state->attrValues.push_front(attrValues);
@@ -2273,8 +2271,7 @@ static void saveRDNAttribute(ParserState *state) {
return;
}

- strncpy(values.attrName, state->attrName, len);
- values.attrName[len] = '\0';
+ strcpy(values.attrName, state->attrName);

/* Set the valueType */
values.attrValueType = state->attrValueType;
@@ -2524,8 +2521,7 @@ static int charsToValueHelper(SaImmAttrValueT *value, SaImmValueTypeT type,
len = strlen(str);
*value = malloc(sizeof(SaStringT));
*((SaStringT *)*value) = (SaStringT)malloc(len + 1);
- strncpy(*((SaStringT *)*value), str, len);
- (*((SaStringT *)*value))[len] = '\0';
+ strcpy(*((SaStringT *)*value), str);
break;
case SA_IMM_ATTR_SAANYT:
len = strlen(str) / 2;
diff --git a/src/lck/lckd/gld_imm.c b/src/lck/lckd/gld_imm.c
index 0662f65dd..ebdbdecd8 100644
--- a/src/lck/lckd/gld_imm.c
+++ b/src/lck/lckd/gld_imm.c
@@ -221,7 +221,7 @@ SaAisErrorT create_runtime_object(SaStringT rname, SaTimeT create_time,
parent_name++;
parentName = &parent;
strncpy((char *)parent.value, parent_name,
- sizeof(parent.value));
+ sizeof(parent.value) - 1);
parent.length = strlen((char *)parent.value);
} else
rdnstr = rname;
diff --git a/src/log/agent/lga_agent.cc b/src/log/agent/lga_agent.cc
index 0049323c8..6c8d927a5 100644
--- a/src/log/agent/lga_agent.cc
+++ b/src/log/agent/lga_agent.cc
@@ -1077,7 +1077,7 @@ SaAisErrorT LogAgent::HandleLogRecord(const SaLogRecordT* logRecord,
ais_rc = SA_AIS_ERR_INVALID_PARAM;
return ais_rc;
}
- strncpy(logSvcUsrName, logSvcUsrChars, strlen(logSvcUsrChars) + 1);
+ strncpy(logSvcUsrName, logSvcUsrChars, kOsafMaxDnLength - 1);
osaf_extended_name_lend(logSvcUsrName, write_param->logSvcUsrName);
} else {
if (lga_is_extended_name_valid(
diff --git a/src/log/apitest/logtest.c b/src/log/apitest/logtest.c
index 149d27d93..d86a2d0ab 100644
--- a/src/log/apitest/logtest.c
+++ b/src/log/apitest/logtest.c
@@ -123,7 +123,7 @@ void init_logrootpath(void)
if (ais_rc == SA_AIS_OK) {
attribute = attributes[0];
void *value = attribute->attrValues[0];
- strncpy(log_root_path, *((char **)value), PATH_MAX);
+ strncpy(log_root_path, *((char **)value), PATH_MAX - 1);
} else {
/* We didn't get a root path from IMM. Use default */
strncpy(log_root_path, PKGLOGDIR, PATH_MAX);
diff --git a/src/log/apitest/tet_LogOiOps.c b/src/log/apitest/tet_LogOiOps.c
index 32a53e748..aae0d5c57 100644
--- a/src/log/apitest/tet_LogOiOps.c
+++ b/src/log/apitest/tet_LogOiOps.c
@@ -2162,7 +2162,7 @@ static bool read_and_compare(SaConstStringT objectName,
*/
void check_logRecordDestinationConfigurationAdd(void)
{
- char command[MAX_DATA];
+ char command[MAX_DATA * 2];
const int num_values = 5;
char set_values[num_values][SET_VALUES_MAX_DATA];
int test_result = 0; /* -1 if Fail */
@@ -2221,7 +2221,7 @@ void check_logRecordDestinationConfigurationAdd(void)
*/
void check_logRecordDestinationConfigurationDelete(void)
{
- char command[MAX_DATA];
+ char command[MAX_DATA * 2];
const int num_values = 5;
char set_values[num_values][SET_VALUES_MAX_DATA];
int test_result = 0; /* -1 if Fail */
diff --git a/src/log/logd/lgs_dest.cc b/src/log/logd/lgs_dest.cc
index 0e70ddd12..82052b0d4 100644
--- a/src/log/logd/lgs_dest.cc
+++ b/src/log/logd/lgs_dest.cc
@@ -198,9 +198,9 @@ void DestinationHandler::FormCfgDestMsg(const std::string& dest,
CfgDestMsg* msg) {
osafassert(msg != nullptr);
const VectorString tmp = logutil::Parser(dest, kDelimeter);
- strncpy(msg->name, tmp[kName].c_str(), kMaxChar);
+ strncpy(msg->name, tmp[kName].c_str(), kMaxChar - 1);
if (tmp.size() > 1) {
- strncpy(msg->type, tmp[kType].c_str(), kMaxChar);
+ strncpy(msg->type, tmp[kType].c_str(), kMaxChar - 1);
}
if (tmp.size() == kSize) strncpy(msg->value, tmp[kValue].c_str(), kMaxChar);
}
@@ -341,7 +341,7 @@ ErrCode DestinationHandler::ProcessWriteReq(const RecordInfo& info,
RecordMsg record;

msg.type = MsgType::kSendRecord;
- strncpy(record.name, name.c_str(), kMaxChar);
+ strncpy(record.name, name.c_str(), kMaxChar - 1);
memcpy(&record.rec, &info, sizeof(RecordInfo));
memcpy(&msg.info.rec, &record, sizeof(RecordMsg));
return DispatchTo(msg, name);
diff --git a/src/log/logd/lgs_util.cc b/src/log/logd/lgs_util.cc
index 28b2a3271..0538de70c 100644
--- a/src/log/logd/lgs_util.cc
+++ b/src/log/logd/lgs_util.cc
@@ -208,22 +208,22 @@ char *lgs_get_time(time_t *time_in) {
snprintf(srcString, (size_t)stringSize, "%02u",
timeStampData->tm_mon + 1);

- strncat(timeStampString, srcString, stringSize);
+ strncat(timeStampString, srcString, stringSize + 2);

snprintf(srcString, (size_t)stringSize, "%02d", (timeStampData->tm_mday));

- strncat(timeStampString, srcString, stringSize);
+ strncat(timeStampString, srcString, stringSize + 2);

strncat(timeStampString, "_", (2 * sizeof(char)));

snprintf(srcString, (size_t)stringSize, "%02d", (timeStampData->tm_hour));
- strncat(timeStampString, srcString, stringSize);
+ strncat(timeStampString, srcString, stringSize + 2);

snprintf(srcString, (size_t)stringSize, "%02d", (timeStampData->tm_min));
- strncat(timeStampString, srcString, stringSize);
+ strncat(timeStampString, srcString, stringSize + 2);

snprintf(srcString, (size_t)stringSize, "%02d", (timeStampData->tm_sec));
- strncat(timeStampString, srcString, stringSize);
+ strncat(timeStampString, srcString, stringSize + 2);

timeStampString[15] = '\0';
return timeStampString;
diff --git a/src/mds/mds_c_api.c b/src/mds/mds_c_api.c
index 42e26f91c..2a297a1e2 100644
--- a/src/mds/mds_c_api.c
+++ b/src/mds/mds_c_api.c
@@ -4142,9 +4142,9 @@ uint32_t mds_mcm_node_up(MDS_SVC_HDL local_svc_hdl, NODE_ID node_id,
cbinfo->info.node_evt.node_id, cbinfo->info.node_evt.addr_family,
cbinfo->info.node_evt.node_chg);
if (node_name) {
- cbinfo->info.node_evt.i_node_name_len = strlen(node_name);
+ cbinfo->info.node_evt.i_node_name_len = strlen(node_name) + 1;
strncpy(cbinfo->info.node_evt.i_node_name, node_name,
- cbinfo->info.node_evt.i_node_name_len);
+ _POSIX_HOST_NAME_MAX - 1);
}

/* Post to mail box If Q Ownership is enabled Else Call user callback */
diff --git a/src/msg/common/mqsv_common.c b/src/msg/common/mqsv_common.c
index 21f6b4e99..71b223f8f 100644
--- a/src/msg/common/mqsv_common.c
+++ b/src/msg/common/mqsv_common.c
@@ -83,6 +83,7 @@ uint32_t mqsv_listenerq_msg_send(SaMsgQueueHandleT listenerHandle)

if ((actual_qsize - actual_qused) < 1000) {
memset(&info, 0, sizeof(NCS_OS_POSIX_MQ_REQ_INFO));
+ LOG_ER("resize B");
info.req = NCS_OS_POSIX_MQ_REQ_RESIZE;
info.info.resize.mqd = listenerHandle;

diff --git a/src/msg/msgnd/mqnd_evt.c b/src/msg/msgnd/mqnd_evt.c
index 53c990549..30fa28d22 100644
--- a/src/msg/msgnd/mqnd_evt.c
+++ b/src/msg/msgnd/mqnd_evt.c
@@ -1412,6 +1412,7 @@ static uint32_t mqnd_evt_proc_send_msg(MQND_CB *cb, MQSV_DSEND_EVT *evt)
of the "struct msqid_ds" posix structure */
if ((snd_msg->message.size + sizeof(MQSV_MESSAGE) +
sizeof(NCS_OS_MQ_MSG_LL_HDR)) > (actual_qsize - actual_qused)) {
+ LOG_ER("resize A");
info.req = NCS_OS_POSIX_MQ_REQ_RESIZE;
info.info.resize.mqd = qnode->qinfo.queueHandle;

diff --git a/src/msg/msgnd/mqnd_imm.c b/src/msg/msgnd/mqnd_imm.c
index 4461b8c53..2a012ba32 100644
--- a/src/msg/msgnd/mqnd_imm.c
+++ b/src/msg/msgnd/mqnd_imm.c
@@ -95,7 +95,7 @@ mqnd_saImmOiRtAttrUpdateCallback(SaImmOiHandleT immOiHandle,
if (mQPrio != NULL) {
mQPrio++;
strncpy((char *)mQueueName.value, mQPrio,
- strlen(mQPrio));
+ sizeof(mQueueName.value) - 1);
mQueueName.length = strlen(mQPrio);
} else
return SA_AIS_ERR_FAILED_OPERATION;
@@ -472,7 +472,8 @@ SaAisErrorT mqnd_create_runtime_MsgQPriorityobject(SaStringT rname,
memset(&mqp_parent, 0, sizeof(SaNameT));
char *mqprdn = (char *)malloc(sizeof(char) * SA_MAX_NAME_LENGTH);

- strncpy((char *)mqp_parent.value, (char *)rname, strlen((char *)rname));
+ strncpy((char *)mqp_parent.value, (char *)rname,
+ sizeof(mqp_parent.value) - 1);
mqp_parent.length = strlen((char *)rname);

mQPrioDn = &mqp_parent;
diff --git a/src/msg/msgnd/mqnd_proc.c b/src/msg/msgnd/mqnd_proc.c
index c2d76ab46..e43907e6a 100644
--- a/src/msg/msgnd/mqnd_proc.c
+++ b/src/msg/msgnd/mqnd_proc.c
@@ -739,6 +739,7 @@ uint32_t mqnd_fill_queue_from_transfered_buffer(MQND_CB *cb,
* messages */
memset(&info, 0, sizeof(NCS_OS_POSIX_MQ_REQ_INFO));

+ LOG_ER("resize C");
info.req = NCS_OS_POSIX_MQ_REQ_RESIZE;
info.info.resize.mqd = qnode->qinfo.queueHandle;

diff --git a/src/plm/apitest/test_saPlmReadinessTrack.c b/src/plm/apitest/test_saPlmReadinessTrack.c
index 455d1e18e..2405d1388 100644
--- a/src/plm/apitest/test_saPlmReadinessTrack.c
+++ b/src/plm/apitest/test_saPlmReadinessTrack.c
@@ -40,7 +40,7 @@ void getDn(int i)
strcpy(entarr[0].enitytype, "HE");
num_elements = 1;
no_of_trk_elements = 1;
- strncpy(groupaddoption, "single", strlen("single"));
+ strncpy(groupaddoption, "single", strlen("single") + 1);
break;
case 2:
num_elements = 4;
@@ -62,7 +62,7 @@ void getDn(int i)
entarr[3].testDnptr.length = f120_slot_1_eedn.length;
strcpy(entarr[3].enitytype, "EE");
no_of_trk_elements = 1;
- strncpy(groupaddoption, "subtree", strlen("subtree"));
+ strncpy(groupaddoption, "subtree", strlen("subtree") + 1);
break;
case 3:
num_elements = 3;
@@ -80,7 +80,7 @@ void getDn(int i)
entarr[2].testDnptr.length = amc_slot_1_eedn.length;
strcpy(entarr[2].enitytype, "EE");
no_of_trk_elements = 1;
- strncpy(groupaddoption, "subtreeEE", strlen("subtreeEE"));
+ strncpy(groupaddoption, "subtreeEE", strlen("subtreeEE") + 1);
break;
case 4:
memset(&entarr[0], 0, sizeof(entity_array));
@@ -95,7 +95,7 @@ void getDn(int i)
strcpy(entarr[1].enitytype, "HE");
num_elements = 2;
no_of_trk_elements = 1;
- strncpy(groupaddoption, "subtreeHE", strlen("subtreeHE"));
+ strncpy(groupaddoption, "subtreeHE", strlen("subtreeHE") + 1);
break;
default:
printf("\n The testcase id provided is invalid ");
@@ -823,7 +823,7 @@ void saPlmReadinessTrack_23(void)
strcpy(entarr[1].enitytype, "HE");
num_elements = 2;
no_of_trk_elements = 2;
- strncpy(groupaddoption, "single", strlen("single"));
+ strncpy(groupaddoption, "single", strlen("single") + 1);
safassert(plmEntityGroupAdd(entityGroupHandle, &entarr[1].testDnptr,
1, SA_PLM_GROUP_SINGLE_ENTITY),
SA_AIS_OK);
@@ -1112,7 +1112,7 @@ void saPlmReadinessTrack_28(void)
num_elements = 4;
no_of_trk_elements = 2;
memset(groupaddoption, 0, 10 * sizeof(char));
- strncpy(groupaddoption, "subtreeHE", strlen("subtreeHE"));
+ strncpy(groupaddoption, "subtreeHE", strlen("subtreeHE") + 1);
safassert(plmEntityGroupAdd(entityGroupHandle, &entarr[2].testDnptr,
1, SA_PLM_GROUP_SUBTREE_HES_ONLY),
SA_AIS_OK);
@@ -1173,7 +1173,7 @@ void saPlmReadinessTrack_29(void)
strcpy(entarr[5].enitytype, "EE");
num_elements = 6;
no_of_trk_elements = 2;
- strncpy(groupaddoption, "subtreeEE", strlen("subtreeEE"));
+ strncpy(groupaddoption, "subtreeEE", strlen("subtreeEE") + 1);
safassert(plmEntityGroupAdd(entityGroupHandle, &entarr[3].testDnptr,
1, SA_PLM_GROUP_SUBTREE_EES_ONLY),
SA_AIS_OK);
@@ -1342,7 +1342,7 @@ void saPlmReadinessTrack_32(void)
strcpy(entarr[1].enitytype, "HE");
num_elements = 2;
no_of_trk_elements = 2;
- strncpy(groupaddoption, "single", strlen("single"));
+ strncpy(groupaddoption, "single", strlen("single") + 1);
safassert(plmEntityGroupAdd(entityGroupHandle, &entarr[1].testDnptr,
1, SA_PLM_GROUP_SINGLE_ENTITY),
SA_AIS_OK);
@@ -1573,7 +1573,7 @@ void saPlmReadinessTrack_36(void)
strcpy(entarr[0].enitytype, "HE");
num_elements = 1;
no_of_trk_elements = 2;
- strncpy(groupaddoption, "single", strlen("single"));
+ strncpy(groupaddoption, "single", strlen("single") + 1);
safassert(plmReadinessTrack(entityGroupHandle, SA_TRACK_CHANGES_ONLY,
121, 0),
SA_AIS_OK);
@@ -1624,7 +1624,7 @@ void saPlmReadinessTrack_37(void)
strcpy(entarr[0].enitytype, "HE");
num_elements = 1;
no_of_trk_elements = 2;
- strncpy(groupaddoption, "single", strlen("single"));
+ strncpy(groupaddoption, "single", strlen("single") + 1);
safassert(plmEntityGroupAdd(entityGroupHandle, &entarr[0].testDnptr,
1, SA_PLM_GROUP_SINGLE_ENTITY),
SA_AIS_OK);
@@ -1687,7 +1687,7 @@ void saPlmReadinessTrack_38(void)
entarr[2].testDnptr.length = amc_slot_16_eedn.length;
strcpy(entarr[2].enitytype, "EE");

- strncpy(groupaddoption, "subtreeEE", strlen("subtreeEE"));
+ strncpy(groupaddoption, "subtreeEE", strlen("subtreeEE") + 1);
num_elements = 3;
no_of_trk_elements = 2;
safassert(plmReadinessTrack(entityGroupHandle, SA_TRACK_CHANGES_ONLY,
@@ -1748,7 +1748,7 @@ void saPlmReadinessTrack_39(void)
amc_slot_16_eedn.length);
entarr[2].testDnptr.length = amc_slot_16_eedn.length;
strcpy(entarr[2].enitytype, "EE");
- strncpy(groupaddoption, "subtreeEE", strlen("subtreeEE"));
+ strncpy(groupaddoption, "subtreeEE", strlen("subtreeEE") + 1);
num_elements = 3;
no_of_trk_elements = 2;
safassert(plmEntityGroupAdd(entityGroupHandle, &entarr[0].testDnptr,
diff --git a/src/plm/plmcd/plmc_read_config.c b/src/plm/plmcd/plmc_read_config.c
index 847667609..acda7c72e 100644
--- a/src/plm/plmcd/plmc_read_config.c
+++ b/src/plm/plmcd/plmc_read_config.c
@@ -169,22 +169,22 @@ int plmc_read_config(char *plmc_config_file, PLMC_config_data *config)
switch (tag) {
case PLMC_EE_ID:
strncpy(config->ee_id, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_MSG_PROTOCOL_VERSION:
strncpy(config->msg_protocol_version, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_CONTROLLER_1_IP:
strncpy(config->controller_1_ip, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_CONTROLLER_2_IP:
strncpy(config->controller_2_ip, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_SERVICES:
@@ -200,7 +200,7 @@ int plmc_read_config(char *plmc_config_file, PLMC_config_data *config)
}
#endif
strncpy(config->services[num_services], line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
num_services++;
/*
* Don't want to overrun our array of
@@ -229,22 +229,22 @@ int plmc_read_config(char *plmc_config_file, PLMC_config_data *config)
}
#endif
strncpy(config->osaf, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_TCP_PLMS_LISTENING_PORT:
strncpy(config->tcp_plms_listening_port, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_UDP_BROADCAST_PORT:
strncpy(config->udp_broadcast_port, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_OS_TYPE:
strncpy(config->os_type, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_CMD_TIMEOUT_SECS:
@@ -268,7 +268,7 @@ int plmc_read_config(char *plmc_config_file, PLMC_config_data *config)
return -1;
}
strncpy(config->os_reboot_cmd, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case PLMC_OS_SHUTDOWN_CMD:
@@ -282,7 +282,7 @@ int plmc_read_config(char *plmc_config_file, PLMC_config_data *config)
return -1;
}
strncpy(config->os_shutdown_cmd, line,
- PLMC_MAX_TAG_LEN - 1);
+ PLMC_MAX_TAG_LEN);
tag = 0;
break;
case SKEEPALIVE:
diff --git a/src/plm/plmcd/plmcd.c b/src/plm/plmcd/plmcd.c
index 24daf587f..a03557ebb 100644
--- a/src/plm/plmcd/plmcd.c
+++ b/src/plm/plmcd/plmcd.c
@@ -726,7 +726,7 @@ int main(int argc, char **argv)
syslog(LOG_ERR, "Can not allocate memory");
exit(4);
}
- strncpy(plmc_config_file, optarg, strlen(optarg) + 1);
+ strcpy(plmc_config_file, optarg);
break;
case 's':
option = option | 1;
diff --git a/src/plm/plmd/plms_imm.c b/src/plm/plmd/plms_imm.c
index 9fbba6c21..e50dcf9bb 100644
--- a/src/plm/plmd/plms_imm.c
+++ b/src/plm/plmd/plms_imm.c
@@ -3861,7 +3861,8 @@ static void plms_delete_he_type_obj(SaNameT *obj_name)
he_base_type_dn = strstr(tmp_dn, "safHEType");
memset(&key_dn, 0, sizeof(SaNameT));
key_dn.length = strlen(he_base_type_dn);
- strncpy((SaInt8T *)key_dn.value, he_base_type_dn, key_dn.length);
+ strncpy((SaInt8T *)key_dn.value, he_base_type_dn,
+ sizeof(key_dn.value) - 1);
he_base_type_node = (PLMS_HE_BASE_INFO *)ncs_patricia_tree_get(
&plms_cb->base_he_info, (SaUint8T *)&key_dn);
rdn = strtok(tmp_dn, ",");
@@ -3904,7 +3905,7 @@ static void plms_delete_ee_type_obj(SaNameT *obj_name)
ee_base_type_dn = strstr(tmp_dn, "safEEType");
memset(&key_dn, 0, sizeof(SaNameT));
key_dn.length = strlen(ee_base_type_dn);
- strncpy((SaInt8T *)key_dn.value, ee_base_type_dn, key_dn.length);
+ strncpy((SaInt8T *)key_dn.value, ee_base_type_dn, sizeof(key_dn.value) - 1);
ee_base_type_node = (PLMS_EE_BASE_INFO *)ncs_patricia_tree_get(
&plms_cb->base_ee_info, (SaUint8T *)&key_dn);
rdn = strtok(tmp_dn, ",");
diff --git a/src/rde/rded/rde_rda.cc b/src/rde/rded/rde_rda.cc
index 097169004..933f5e9dc 100644
--- a/src/rde/rded/rde_rda.cc
+++ b/src/rde/rded/rde_rda.cc
@@ -417,7 +417,7 @@ uint32_t rde_rda_open(const char *sock_name, RDE_RDA_CB *rde_rda_cb) {
TRACE_ENTER();

strncpy(rde_rda_cb->sock_address.sun_path, sock_name,
- sizeof(rde_rda_cb->sock_address.sun_path));
+ sizeof(rde_rda_cb->sock_address.sun_path) - 1);
rde_rda_cb->sock_address.sun_family = AF_UNIX;
rde_rda_cb->fd = -1;

diff --git a/src/smf/smfd/SmfUtils.cc b/src/smf/smfd/SmfUtils.cc
index 882a3e6ed..2d539e7c2 100644
--- a/src/smf/smfd/SmfUtils.cc
+++ b/src/smf/smfd/SmfUtils.cc
@@ -442,12 +442,10 @@ bool SmfImmUtils::getChildren(const std::string &i_dn,
&immSearchHandle);
if (result != SA_AIS_OK) {
if (result == SA_AIS_ERR_NOT_EXIST) {
- TRACE("immutil_saImmOmSearchInitialize_2, rc=%s, class name=[%s]",
- saf_error(result), i_className);
+ TRACE("immutil_saImmOmSearchInitialize_2, rc=%s", saf_error(result));
goto done;
} else {
- LOG_NO("immutil_saImmOmSearchInitialize_2, rc=%s, class name=[%s]",
- saf_error(result), i_className);
+ LOG_NO("immutil_saImmOmSearchInitialize_2, rc=%s", saf_error(result));
rc = false;
goto done;
}
@@ -533,12 +531,10 @@ bool SmfImmUtils::getChildrenAndAttrBySearchHandle(
&io_immSearchHandle);
if (result != SA_AIS_OK) {
if (result == SA_AIS_ERR_NOT_EXIST) {
- TRACE("immutil_saImmOmSearchInitialize_2, rc=%s, class name=[%s]",
- saf_error(result), i_className);
+ TRACE("immutil_saImmOmSearchInitialize_2, rc=%s", saf_error(result));
goto done;
} else {
- LOG_NO("immutil_saImmOmSearchInitialize_2, rc=%s, class name=[%s]",
- saf_error(result), i_className);
+ LOG_NO("immutil_saImmOmSearchInitialize_2, rc=%s", saf_error(result));
(void)immutil_saImmOmSearchFinalize(io_immSearchHandle);
rc = false;
goto done;
@@ -997,7 +993,7 @@ bool smf_stringToValue(SaImmValueTypeT i_type, SaImmAttrValueT *i_value,
len = strlen(i_str);
*i_value = malloc(sizeof(SaStringT));
*((SaStringT *)*i_value) = (SaStringT)malloc(len + 1);
- strncpy(*((SaStringT *)*i_value), i_str, len);
+ strncpy(*((SaStringT *)*i_value), i_str, len - 1);
(*((SaStringT *)*i_value))[len] = '\0';
break;
case SA_IMM_ATTR_SAANYT:
diff --git a/src/smf/smfd/smfd_amf.cc b/src/smf/smfd/smfd_amf.cc
index ee042b98d..4c0809304 100644
--- a/src/smf/smfd/smfd_amf.cc
+++ b/src/smf/smfd/smfd_amf.cc
@@ -383,7 +383,7 @@ static SaAisErrorT amf_healthcheck_start(smfd_cb_t *cb) {
LOG_ER("amf_healthcheck_start(): Helthcheck key to long");
return SA_AIS_ERR_NAME_TOO_LONG;
}
- strncpy((char *)healthy.key, health_key,
+ memcpy(healthy.key, health_key,
strlen(health_key)); // The key does not need to be null terminated
}

--
2.21.1


------------------------------------------------------------------------
Notice: This e-mail together with any attachments may contain information of Ribbon Communications Inc. that is confidential and/or proprietary for the sole use of the intended recipient. Any review, disclosure, reliance or distribution by others or forwarding without express permission is strictly prohibited. If you are not the intended recipient, please notify the sender immediately and then delete all copies, including any attachments.
------------------------------------------------------------------------


_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to