diff --git a/src/std/link/lnkCalc.c b/src/std/link/lnkCalc.c index c36174aa6..b8cab4021 100644 --- a/src/std/link/lnkCalc.c +++ b/src/std/link/lnkCalc.c @@ -191,7 +191,13 @@ static jlif_result lnkCalc_string(jlink *pjlink, const char *val, size_t len) return jlif_stop; } - inbuf = epicsStrnDup(val, len); + inbuf = malloc(len+1); + if(!inbuf) { + errlogPrintf("lnkCalc: Out of memory\n"); + return jlif_stop; + } + memcpy(inbuf, val, len); + inbuf[len] = '\0'; if (clink->pstate == ps_major) { clink->major = inbuf; diff --git a/src/std/link/lnkConst.c b/src/std/link/lnkConst.c index 899f0cc68..4c9232a2b 100644 --- a/src/std/link/lnkConst.c +++ b/src/std/link/lnkConst.c @@ -212,7 +212,11 @@ static jlif_result lnkConst_string(jlink *pjlink, const char *val, size_t len) case s0: clink->nElems = 1; clink->type = sc40; - clink->value.scalar_string = epicsStrnDup(val, len); + clink->value.scalar_string = malloc(len+1); + if(!clink->value.scalar_string) + return jlif_stop; + strncpy(clink->value.scalar_string, val, len); + clink->value.scalar_string[len] = '\0'; break; case a0: @@ -225,8 +229,13 @@ static jlif_result lnkConst_string(jlink *pjlink, const char *val, size_t len) if (!vec) break; - vec[clink->nElems++] = epicsStrnDup(val, len); + vec[clink->nElems] = malloc(len+1); + if(!vec[clink->nElems]) + return jlif_stop; + strncpy(vec[clink->nElems], val, len); + vec[clink->nElems][len] = '\0'; clink->value.pstrings = vec; + clink->nElems++; break; case af64: