bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/2] nanosleep: fix integer overflow problem


From: Jim Meyering
Subject: Re: [PATCH 2/2] nanosleep: fix integer overflow problem
Date: Mon, 27 Jun 2011 15:25:58 +0200

Paul Eggert wrote:
> * lib/nanosleep.c (my_usleep): Don't assume signed integer
> arithmetic wraps around on overflow.
> ---
>  ChangeLog       |    4 ++++
>  lib/nanosleep.c |    5 ++---
>  2 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/ChangeLog b/ChangeLog
> index 8e39acf..8466258 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,5 +1,9 @@
>  2011-06-25  Paul Eggert  <address@hidden>
>
> +     nanosleep: fix integer overflow problem
> +     * lib/nanosleep.c (my_usleep): Don't assume signed integer
> +     arithmetic wraps around on overflow.
> +
>       nanosleep: simplify carrying
>       * lib/nanosleep.c (nanosleep): Use the requested tv_nsec for the
>       first call to the underyling nanosleep, not for the last one.
> diff --git a/lib/nanosleep.c b/lib/nanosleep.c
> index aae2653..e08c002 100644
> --- a/lib/nanosleep.c
> +++ b/lib/nanosleep.c
> @@ -210,12 +210,11 @@ my_usleep (const struct timespec *ts_delay)
>    tv_delay.tv_usec = (ts_delay->tv_nsec + 999) / 1000;
>    if (tv_delay.tv_usec == 1000000)
>      {
> -      time_t t1 = tv_delay.tv_sec + 1;
> -      if (t1 < tv_delay.tv_sec)
> +      if (tv_delay.tv_sec == TYPE_MAXIMUM (time_t))
>          tv_delay.tv_usec = 1000000 - 1; /* close enough */
>        else
>          {
> -          tv_delay.tv_sec = t1;
> +          tv_delay.tv_sec++;
>            tv_delay.tv_usec = 0;

Good one.  Thanks!



reply via email to

[Prev in Thread] Current Thread [Next in Thread]