+---
+* [Sec 3393] clang scan-build findings <perlinger@ntp.org>
+
---
(4.2.8p10)
cp += sizeof(*ai);
/* transform ai_canonname into offset */
- if (NULL != serialized_ai->ai_canonname) {
+ if (NULL != ai->ai_canonname) {
serialized_ai->ai_canonname = (char *)canons_octets;
canons_octets += strlen(ai->ai_canonname) + 1;
}
#endif
+#if defined(__GNUC__) /* this covers CLANG, too */
+static void __attribute__((noreturn,format(printf,1,2))) fatal_error(const char *fmt, ...)
+#elif defined(_MSC_VER)
+static void __declspec(noreturn) fatal_error(const char *fmt, ...)
+#else
+static void fatal_error(const char *fmt, ...)
+#endif
+{
+ va_list va;
+
+ va_start(va, fmt);
+ mvsyslog(LOG_EMERG, fmt, va);
+ va_end(va);
+ _exit(1);
+}
+
/* FUNCTIONS FOR INITIALIZATION
* ----------------------------
*/
/* Crypto Command */
#ifdef AUTOKEY
-# ifdef __GNUC__
- item = -1; /* quiet warning */
-# endif
my_val = HEAD_PFIFO(ptree->auth.crypto_cmd_list);
for (; my_val != NULL; my_val = my_val->link) {
switch (my_val->attr) {
default:
- INSIST(0);
- break;
+ fatal_error("config_auth: attr-token=%d", my_val->attr);
case T_Host:
item = CRYPTO_CONF_PRIV;
msyslog(LOG_WARNING,
"Using maximum tos ceiling %d, %d requested",
STRATUM_UNSPEC - 1, (int)val);
- val = STRATUM_UNSPEC - 1;
+ tos->value.d = STRATUM_UNSPEC - 1;
} else if (val < 1) {
msyslog(LOG_WARNING,
"Using minimum tos floor %d, %d requested",
switch(tos->attr) {
default:
- item = -1; /* quiet warning */
- INSIST(0);
- break;
+ fatal_error("config-tos: attr-token=%d", tos->attr);
case T_Bcpollbstep:
item = PROTO_BCPOLLBSTEP;
switch (my_opts->value.i) {
default:
- INSIST(0);
- break;
+ fatal_error("config-monitor: type-token=%d", my_opts->value.i);
case T_None:
filegen_type = FILEGEN_NONE;
switch (curr_flag->i) {
default:
- INSIST(0);
- break;
+ fatal_error("config-access: flag-type-token=%d", curr_flag->i);
case T_Ntpport:
mflags |= RESM_NTPONLY;
switch (rlimit_av->attr) {
default:
- INSIST(0);
- break;
+ fatal_error("config-rlimit: value-token=%d", rlimit_av->attr);
case T_Memlock:
/* What if we HAVE_OPT(SAVECONFIGQUIT) ? */
attr_val * tinker;
int item;
-#ifdef __GNUC__
- item = -1; /* quiet warning */
-#endif
tinker = HEAD_PFIFO(ptree->tinker);
for (; tinker != NULL; tinker = tinker->link) {
switch (tinker->attr) {
default:
- INSIST(0);
- break;
+ fatal_error("config_tinker: attr-token=%d", tinker->attr);
case T_Allan:
item = LOOP_ALLAN;
switch (curr_node->match_class) {
default:
-#ifdef __GNUC__
- /*
- * this assignment quiets a gcc "may be used
- * uninitialized" warning and is here for no
- * other reason.
- */
- match_type = MATCH_ALL;
-#endif
- INSIST(FALSE);
- break;
+ fatal_error("config_nic_rules: match-class-token=%d", curr_node->match_class);
case 0:
/*
switch (curr_node->action) {
default:
-#ifdef __GNUC__
- /*
- * this assignment quiets a gcc "may be used
- * uninitialized" warning and is here for no
- * other reason.
- */
- action = ACTION_LISTEN;
-#endif
- INSIST(FALSE);
- break;
+ fatal_error("config_nic_rules: action-token=%d", curr_node->action);
case T_Listen:
action = ACTION_LISTEN;
ntp_syslogmask = get_logmask(my_lc->value.s);
break;
default:
- INSIST(0);
- break;
+ fatal_error("config-logconfig: modifier='%c'", my_lc->attr);
}
}
}
switch (option->value.i) {
default:
- INSIST(0);
- break;
+ fatal_error("peerflag_bits: option-token=%d", option->value.i);
case T_Autokey:
peerflags |= FLAG_SKEY;
# endif /* RLIMIT_STACK */
default:
- INSIST(!"Unexpected setrlimit() case!");
- break;
+ fatal_error("ntp_rlimit: unexpected RLIMIT case: %d", rl_what);
}
}
#endif /* HAVE_SETRLIMIT */
buffp = buf;
buffend = buf + sizeof(buf);
- if (strlen(sys_var[CS_VARLIST].text) + 4 > buffend - buffp)
+ if (strlen(sys_var[CS_VARLIST].text) > (sizeof(buf) - 4))
break; /* really long var name */
snprintf(buffp, sizeof(buf), "%s=\"",sys_var[CS_VARLIST].text);
}
}
- instring = FALSE;
if (FOLLBY_STRING == followedby)
followedby = FOLLBY_TOKEN;
clockprocT * const pp,
const char * const tc)
{
- size_t len;
-
- len = (tc) ? strlen(tc) : 0;
- if (len >= sizeof(pp->a_lastcode))
- len = sizeof(pp->a_lastcode) - 1;
+ size_t len = 0;
+
+ if (tc) {
+ len = strlen(tc);
+ if (len >= sizeof(pp->a_lastcode))
+ len = sizeof(pp->a_lastcode) - 1;
+ memcpy(pp->a_lastcode, tc, len);
+ }
pp->lencode = (u_short)len;
- memcpy(pp->a_lastcode, tc, len);
pp->a_lastcode[len] = '\0';
}
}
iCopyLen = ( iLen <= sizeof(sLogText)-1 ? iLen : sizeof(sLogText)-1 ) ;
- strncpy( sLogText, pBuf, iCopyLen ) ;
- sLogText[iCopyLen] = 0 ;
+ memcpy( sLogText, pBuf, iCopyLen ) ;
+ sLogText[iCopyLen] = '\0' ;
jjy_write_clockstats( peer, JJY_CLOCKSTATS_MARK_RECEIVE, sLogText ) ;
switch ( up->unittype ) {
ZERO(tofs);
ZERO(date);
ZERO(gpsw);
- sentence = 0; // Should never be needed.
- rc_date = 0; // Should never be needed.
- rc_time = 0; // Should never be needed.
/*
* Read the timecode and timestamp, then initialise field
WARN_MINUS
} warn;
- day_now = day_lsf = 0;
- cp = NULL; /* keep gcc happy */
subframe = buf[6] & 017;
valid = (buf[6] >> 4) & 017;
instance->peer->leap = LEAP_ADDSECOND;
cp = "Set peer.leap to LEAP_ADDSECOND";
break;
+ default:
+ cp = NULL;
+ break;
}
oncore_log(instance, LOG_NOTICE, cp);
{
enum antenna_state antenna; /* antenna state */
- antenna = instance->ant_state;
if (instance->chan == 12)
antenna = (instance->BEHa[130] & 0x6 ) >> 1;
else
}
}
- tt = ap(start, LEN_STATES, tt,
- "; running time: %s\"", l_mktime(sum));
+ ap(start, LEN_STATES, tt, "; running time: %s\"", l_mktime(sum));
tt = add_var(&out->kv_list, 32, RO);
snprintf(tt, 32, "refclock_id=\"%s\"", parse->parse_type->cl_id);
{
time_t t_ls;
struct tm *tm;
- int n = 0;
+ int nc;
if (wnlsf < GPSWRAP)
wnlsf += GPSWEEKS;
-
- if (wnt < GPSWRAP)
- wnt += GPSWEEKS;
+ /* 'wnt' not used here: would need the same treatment as 'wnlsf */
t_ls = (time_t) wnlsf * SECSPERWEEK
+ (time_t) dn * SECSPERDAY
return;
}
- n += snprintf( t, size, "UTC offset transition from %is to %is due to leap second %s",
+ nc = snprintf( t, size, "UTC offset transition from %is to %is due to leap second %s",
dtls, dtlsf, ( dtls < dtlsf ) ? "insertion" : "deletion" );
- n += snprintf( t + n, size - n, " at UTC midnight at the end of %s, %04i-%02i-%02i",
+ if (nc < 0)
+ nc = strlen(t);
+ else if (nc > size)
+ nc = size;
+
+ snprintf( t + nc, size - nc, " at UTC midnight at the end of %s, %04i-%02i-%02i",
daynames[tm->tm_wday], tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday );
}
else
+ {
snprintf( t, size, "UTC offset parameter: %is, no leap second announced.\n", dtls );
+ }
}
register int i, j;
int ord[NTP_SHIFT];
+ INSIST((0 < sys_samples) && (sys_samples <= NTP_SHIFT));
+
/*
* Sort indices into increasing delay order
*/
todiff = (((uint32_t)time(NULL)) - tobase) & 0x7FFFFFFFu;
if ((n > 0) && (todiff > tospan)) {
n = recv(sockfd, (char *)&rpkt, sizeof(rpkt), 0);
- n = 0; /* faked timeout return from 'select()'*/
+ n -= n; /* faked timeout return from 'select()'*/
}
if (n == 0) {
size_t len
)
{
- const char * cdata;
- const char * rowstart;
- size_t idx;
- size_t rowlen;
- u_char uch;
-
- cdata = data;
- while (len > 0) {
- rowstart = cdata;
- rowlen = min(16, len);
- for (idx = 0; idx < rowlen; idx++) {
- uch = *(cdata++);
- printf("%02x ", uch);
- }
- for ( ; idx < 16 ; idx++)
- printf(" ");
- cdata = rowstart;
- for (idx = 0; idx < rowlen; idx++) {
- uch = *(cdata++);
- printf("%c", (isprint(uch))
- ? uch
- : '.');
- }
- printf("\n");
+ /* every line shows at most 16 bytes, so we need a buffer of
+ * 4 * 16 (2 xdigits, 1 char, one sep for xdigits)
+ * + 2 * 1 (block separators)
+ * + <LF> + <NUL>
+ *---------------
+ * 68 bytes
+ */
+ static const char s_xdig[16] = "0123456789ABCDEF";
+
+ char lbuf[68];
+ int ch, rowlen;
+ const u_char * cdata = data;
+ char *xptr, *pptr;
+
+ while (len) {
+ memset(lbuf, ' ', sizeof(lbuf));
+ xptr = lbuf;
+ pptr = lbuf + 3*16 + 2;
+
+ rowlen = (len > 16) ? 16 : (int)len;
len -= rowlen;
+
+ do {
+ ch = *cdata++;
+
+ *xptr++ = s_xdig[ch >> 4 ];
+ *xptr++ = s_xdig[ch & 0x0F];
+ if (++xptr == lbuf + 3*8)
+ ++xptr;
+
+ *pptr++ = isprint(ch) ? (char)ch : '.';
+ } while (--rowlen);
+
+ *pptr++ = '\n';
+ *pptr = '\0';
+ fputs(lbuf, stdout);
}
}
uint32_t tospan; /* timeout span (max delay) */
uint32_t todiff; /* current delay */
+ memset(offsets, 0, sizeof(offsets));
+ memset(counts , 0, sizeof(counts ));
+
/*
* This is pretty tricky. We may get between 1 and MAXFRAG packets
* back in response to the request. We peel the data out of
todiff = (((uint32_t)time(NULL)) - tobase) & 0x7FFFFFFFu;
if ((n > 0) && (todiff > tospan)) {
n = recv(sockfd, (char *)&rpkt, sizeof(rpkt), 0);
- n = 0; /* faked timeout return from 'select()'*/
+ n -= n; /* faked timeout return from 'select()',
+ * execute RMW cycle on 'n'
+ */
}
- if (n == 0) {
+ if (n <= 0) {
/*
* Timed out. Return what we have
*/
}
n = recv(sockfd, (char *)&rpkt, sizeof(rpkt), 0);
- if (n == -1) {
+ if (n < 0) {
warning("read");
return -1;
}