diff --git a/modules/database/src/ioc/db/dbAccess.c b/modules/database/src/ioc/db/dbAccess.c index 9501697c1..848c60e20 100644 --- a/modules/database/src/ioc/db/dbAccess.c +++ b/modules/database/src/ioc/db/dbAccess.c @@ -1087,11 +1087,16 @@ static long dbPutFieldLink(DBADDR *paddr, switch (dbrType) { case DBR_CHAR: case DBR_UCHAR: - if (pstring[nRequest - 1] != '\0') + if (nRequest == 0) { + pstring = pbuffer = ""; // treat zero bytes the same as one null byte + } else if (pstring[nRequest - 1] != '\0') { return S_db_badDbrtype; + } break; case DBR_STRING: + if (nRequest != 1) + return S_db_onlyOne; break; default: @@ -1281,6 +1286,8 @@ long dbPutField(DBADDR *paddr, short dbrType, if (special == SPC_ATTRIBUTE) return S_db_noMod; + if (nRequest < 0) + return S_db_badChoice; /*check for putField disabled*/ if (precord->disp && paddr->pfield != &precord->disp) @@ -1360,6 +1367,8 @@ long dbPut(DBADDR *paddr, short dbrType, if (special == SPC_ATTRIBUTE) return S_db_noMod; + if (nRequest < 0) + return S_db_badChoice; if (dbrType == DBR_PUT_ACKT && field_type <= DBF_DEVICE) { return putAckt(paddr, pbuffer, 1, 1, 0);