From 630663caa8dc94b777edfa1e21f02e568a221bc7 Mon Sep 17 00:00:00 2001 From: Martin Konrad Date: Wed, 24 Apr 2019 18:07:23 -0400 Subject: [PATCH 1/4] Fix weird use of strncpy Note: The old code was correct. This change just gets rid of a bunch of warnings. --- src/std/rec/boRecord.c | 4 ++-- src/std/rec/stateRecord.c | 2 +- src/std/rec/stringinRecord.c | 4 ++-- src/std/rec/stringoutRecord.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/std/rec/boRecord.c b/src/std/rec/boRecord.c index 88184555e..48cc4846a 100644 --- a/src/std/rec/boRecord.c +++ b/src/std/rec/boRecord.c @@ -329,9 +329,9 @@ static long get_enum_strs(DBADDR *paddr,struct dbr_enumStrs *pes) /*SETTING no_str=0 breaks channel access clients*/ pes->no_str = 2; memset(pes->strs,'\0',sizeof(pes->strs)); - strncpy(pes->strs[0],prec->znam,sizeof(prec->znam)); + strncpy(pes->strs[0],prec->znam,sizeof(pes->strs[0])); if(*prec->znam!=0) pes->no_str=1; - strncpy(pes->strs[1],prec->onam,sizeof(prec->onam)); + strncpy(pes->strs[1],prec->onam,sizeof(pes->strs[1])); if(*prec->onam!=0) pes->no_str=2; return(0); } diff --git a/src/std/rec/stateRecord.c b/src/std/rec/stateRecord.c index a052b0728..8170de7e9 100644 --- a/src/std/rec/stateRecord.c +++ b/src/std/rec/stateRecord.c @@ -98,7 +98,7 @@ static void monitor(stateRecord *prec) monitor_mask = recGblResetAlarms(prec); if(strncmp(prec->oval,prec->val,sizeof(prec->val))) { db_post_events(prec,&(prec->val[0]),monitor_mask|DBE_VALUE|DBE_LOG); - strncpy(prec->oval,prec->val,sizeof(prec->val)); + strncpy(prec->oval,prec->val,sizeof(prec->oval)); } return; } diff --git a/src/std/rec/stringinRecord.c b/src/std/rec/stringinRecord.c index db2f626f1..aac7d4e0f 100644 --- a/src/std/rec/stringinRecord.c +++ b/src/std/rec/stringinRecord.c @@ -120,7 +120,7 @@ static long init_record(stringinRecord *prec, int pass) if( pdset->init_record ) { if((status=(*pdset->init_record)(prec))) return(status); } - strncpy(prec->oval, prec->val, sizeof(prec->val)); + strncpy(prec->oval, prec->val, sizeof(prec->oval)); return(0); } @@ -160,7 +160,7 @@ static void monitor(stringinRecord *prec) if (strncmp(prec->oval, prec->val, sizeof(prec->val))) { monitor_mask |= DBE_VALUE | DBE_LOG; - strncpy(prec->oval, prec->val, sizeof(prec->val)); + strncpy(prec->oval, prec->val, sizeof(prec->oval)); } if (prec->mpst == stringinPOST_Always) diff --git a/src/std/rec/stringoutRecord.c b/src/std/rec/stringoutRecord.c index 2bca3228c..61d88f60f 100644 --- a/src/std/rec/stringoutRecord.c +++ b/src/std/rec/stringoutRecord.c @@ -122,7 +122,7 @@ static long init_record(stringoutRecord *prec, int pass) if( pdset->init_record ) { if((status=(*pdset->init_record)(prec))) return(status); } - strncpy(prec->oval, prec->val, sizeof(prec->val)); + strncpy(prec->oval, prec->val, sizeof(prec->oval)); return(0); } @@ -188,7 +188,7 @@ static void monitor(stringoutRecord *prec) if (strncmp(prec->oval, prec->val, sizeof(prec->val))) { monitor_mask |= DBE_VALUE | DBE_LOG; - strncpy(prec->oval, prec->val, sizeof(prec->val)); + strncpy(prec->oval, prec->val, sizeof(prec->oval)); } if (prec->mpst == stringoutPOST_Always) From 8e9d75ad712d7e6464b7f5ea66cab1359812e8f6 Mon Sep 17 00:00:00 2001 From: Martin Konrad Date: Wed, 24 Apr 2019 18:51:50 -0400 Subject: [PATCH 2/4] Fix potential buffer overflow in iocLogServer --- src/libCom/log/iocLogServer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libCom/log/iocLogServer.c b/src/libCom/log/iocLogServer.c index f42aa4563..67bcf1bd3 100644 --- a/src/libCom/log/iocLogServer.c +++ b/src/libCom/log/iocLogServer.c @@ -37,7 +37,7 @@ static unsigned short ioc_log_port; static long ioc_log_file_limit; -static char ioc_log_file_name[256]; +static char ioc_log_file_name[512]; static char ioc_log_file_command[256]; From e02c5c3026b8eafd7a17269558371b754f90744a Mon Sep 17 00:00:00 2001 From: Martin Konrad Date: Wed, 24 Apr 2019 22:06:29 -0400 Subject: [PATCH 3/4] iocLogServer: check return values No serious issues here just fixing some warnings. --- src/libCom/log/iocLogServer.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/libCom/log/iocLogServer.c b/src/libCom/log/iocLogServer.c index 67bcf1bd3..e707185ae 100644 --- a/src/libCom/log/iocLogServer.c +++ b/src/libCom/log/iocLogServer.c @@ -866,7 +866,12 @@ static int setupSIGHUP(struct ioc_log_server *pserver) */ static void sighupHandler(int signo) { - (void) write(sighupPipe[1], "SIGHUP\n", 7); + const char msg[] = "SIGHUP\n"; + const ssize_t bytesWritten = write(sighupPipe[1], msg, sizeof(msg)); + if (bytesWritten != sizeof(msg)) { + fprintf(stderr, "iocLogServer: failed to write to SIGHUP pipe because " + "`%s'\n", strerror(errno)); + } } @@ -884,7 +889,10 @@ static void serviceSighupRequest(void *pParam) /* * Read and discard message from pipe. */ - (void) read(sighupPipe[0], buff, sizeof buff); + if (read(sighupPipe[0], buff, sizeof buff) <= 0) { + fprintf(stderr, "iocLogServer: failed to read from SIGHUP pipe because " + "`%s'\n", strerror(errno)); + }; /* * Determine new log file name. From 1f95d0db127c5cf1ea077b48be43103cf1309f8c Mon Sep 17 00:00:00 2001 From: Martin Konrad Date: Thu, 25 Apr 2019 11:00:39 -0400 Subject: [PATCH 4/4] epicsTime: rely on implicit copy constructor When a custom copy constructor is defined the assignment operator also needs to be defined explicitly. For this simple class the implicit copy ctor/assignment operator are sufficient, though. This fixes a warning emitted by GCC9. --- src/libCom/osi/epicsTime.cpp | 3 --- src/libCom/osi/epicsTime.h | 1 - 2 files changed, 4 deletions(-) diff --git a/src/libCom/osi/epicsTime.cpp b/src/libCom/osi/epicsTime.cpp index af4fae25d..ef43e0ad2 100644 --- a/src/libCom/osi/epicsTime.cpp +++ b/src/libCom/osi/epicsTime.cpp @@ -205,9 +205,6 @@ epicsTime::epicsTime (const epicsTimeStamp &ts) epicsTime::epicsTime () : secPastEpoch(0u), nSec(0u) {} -epicsTime::epicsTime (const epicsTime &t) : - secPastEpoch (t.secPastEpoch), nSec (t.nSec) {} - epicsTime epicsTime::getCurrent () { epicsTimeStamp current; diff --git a/src/libCom/osi/epicsTime.h b/src/libCom/osi/epicsTime.h index 1cb3733bc..d8b266346 100644 --- a/src/libCom/osi/epicsTime.h +++ b/src/libCom/osi/epicsTime.h @@ -81,7 +81,6 @@ public: class formatProblemWithStructTM {}; epicsTime (); - epicsTime ( const epicsTime & t ); static epicsTime getEvent ( const epicsTimeEvent & ); static epicsTime getCurrent ();