diff --git a/src/misc.c b/src/misc.c index 951449e..2b24a60 100644 --- a/src/misc.c +++ b/src/misc.c @@ -255,8 +255,20 @@ code_timespec (struct timespec t, char sbuf[TIMESPEC_STRSIZE_BOUND]) time_t s = t.tv_sec; int ns = t.tv_nsec; char *np; - bool negative = s < 0; + bool negative; + /* ignore any negative ns value */ + if (ns < 0) + ns = 0; + + /* ensure (ns < BILLION) to avoid a SIGSEGV within code_ns_fraction () */ + if (BILLION <= ns) + { + s += ns / BILLION; + ns %= BILLION; + } + + negative = s < 0; if (negative && ns != 0) { s++;