biRecord.c/boRecord.c: Fix gcc -Wsizeof-pointer-memaccess (#887)

../rec/biRecord.c:191:42: warning: argument to ‘sizeof’ in ‘strncpy’
call is the same expression as the source; did you mean to use the
size of the destination? [-Wsizeof-pointer-memaccess]
  191 |         strncpy(pstring,prec->znam,sizeof(prec->znam));
      |                                          ^

Use memcpy instead of snprintf.

STATIC_ASSERT is added to ensure znam and onam are sized enough.
This commit is contained in:
Abdalla Al-Dalleh authored and Dirk Zimoch committed 2026-10-14 11:00:22 +02:00
1 parent 0b1ec9809e
commit f4ea5cc1e9
2 files changed
+33 -23

No files matched your search

+16 -11
View File
@@ -178,16 +178,16 @@ static long get_enum_str(const DBADDR *paddr, char *pstring)
index = dbGetFieldIndex(paddr);
if(index!=biRecordVAL) {
strcpy(pstring,"Illegal_Value");
} else if(*pfield==0) {
memcpy(pstring,prec->znam,sizeof(prec->znam));
if(index != biRecordVAL) {
strcpy(pstring, "Illegal_Value");
} else if(*pfield == 0) {
memcpy(pstring, prec->znam, sizeof(prec->znam));
pstring[sizeof(prec->znam)] = 0;
} else if(*pfield==1) {
memcpy(pstring,prec->onam,sizeof(prec->onam));
} else if(*pfield == 1) {
memcpy(pstring, prec->onam, sizeof(prec->onam));
pstring[sizeof(prec->onam)] = 0;
} else {
strcpy(pstring,"Illegal_Value");
strcpy(pstring, "Illegal_Value");
}
return(0);
}
@@ -198,10 +198,15 @@ static long get_enum_strs(const DBADDR *paddr,struct dbr_enumStrs *pes)
pes->no_str = 2;
memset(pes->strs,'\0',sizeof(pes->strs));
memcpy(pes->strs[0],prec->znam,sizeof(prec->znam));
if(*prec->znam!=0) pes->no_str=1;
memcpy(pes->strs[1],prec->onam,sizeof(prec->onam));
if(*prec->onam!=0) pes->no_str=2;
STATIC_ASSERT(sizeof(prec->znam) <= sizeof(pes->strs[0]));
memcpy(pes->strs[0], prec->znam, sizeof(prec->znam));
if(*prec->znam != 0) pes->no_str = 1;
STATIC_ASSERT(sizeof(prec->onam) <= sizeof(pes->strs[1]));
memcpy(pes->strs[1], prec->onam, sizeof(prec->onam));
if(*prec->onam != 0) pes->no_str = 2;
return(0);
}
+17 -12
View File
@@ -325,31 +325,36 @@ static long get_enum_str(const DBADDR *paddr, char *pstring)
index = dbGetFieldIndex(paddr);
if(index!=indexof(VAL)) {
strcpy(pstring,"Illegal_Value");
} else if(*pfield==0) {
memcpy(pstring,prec->znam,sizeof(prec->znam));
if(index != indexof(VAL)) {
strcpy(pstring, "Illegal_Value");
} else if(*pfield == 0) {
memcpy(pstring, prec->znam, sizeof(prec->znam));
pstring[sizeof(prec->znam)] = 0;
} else if(*pfield==1) {
memcpy(pstring,prec->onam,sizeof(prec->onam));
} else if(*pfield == 1) {
memcpy(pstring, prec->onam, sizeof(prec->onam));
pstring[sizeof(prec->onam)] = 0;
} else {
strcpy(pstring,"Illegal_Value");
strcpy(pstring, "Illegal_Value");
}
return(0);
}
static long get_enum_strs(const DBADDR *paddr,struct dbr_enumStrs *pes)
{
boRecord *prec=(boRecord *)paddr->precord;
boRecord *prec = (boRecord *)paddr->precord;
/*SETTING no_str=0 breaks channel access clients*/
pes->no_str = 2;
memset(pes->strs,'\0',sizeof(pes->strs));
memcpy(pes->strs[0],prec->znam,sizeof(pes->strs[0]));
if(*prec->znam!=0) pes->no_str=1;
memcpy(pes->strs[1],prec->onam,sizeof(pes->strs[1]));
if(*prec->onam!=0) pes->no_str=2;
STATIC_ASSERT(sizeof(prec->znam) <= sizeof(pes->strs[0]));
memcpy(pes->strs[0], prec->znam, sizeof(pes->strs[0]));
if(*prec->znam != 0) pes->no_str = 1;
STATIC_ASSERT(sizeof(prec->onam) <= sizeof(pes->strs[1]));
memcpy(pes->strs[1], prec->onam, sizeof(pes->strs[1]));
if(*prec->onam != 0) pes->no_str = 2;
return(0);
}
static long put_enum_str(const DBADDR *paddr, const char *pstring)