GNU bug report logs -
#77535
timeout treats very short durations as `0`
Previous Next
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Your bug report
#77535: timeout treats very short durations as `0`
which was filed against the coreutils package, has been closed.
The explanation is attached below, along with your original report.
If you require more details, please reply to 77535 <at> debbugs.gnu.org.
--
77535: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=77535
GNU Bug Tracking System
Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
On 04/04/2025 16:26, Nicolas Boichat wrote:
> Hi,
>
> Version: timeout (GNU coreutils) 9.6, Archlinux, x86-64.
>
> While playing with different duration parameters to `timeout`, I
> noticed that extremely short durations, like `1e-3000`, are rounded
> down to `0`. The problem is that `0` has a special meaning (disabling
> the timeout), so I don't think this is desired.
>
> All of these commands exit immediately:
> ```
> timeout 0.0001 cat
> timeout 1e-100 cat
> timeout 1e-300 cat
> timeout 1e-323 cat
> ```
>
> But these never exits:
> ```
> timeout 1e-324 cat
> timeout 1e-3000 cat
> ```
>
> As if we had typed:
> ```
> timeout 0 cat
> ```
>
> I think there is some logic in `printf` to handle float parsing
> underflow, so maybe this can be reused in `timeout` as well.
The following should avoid this issue.
Marking this as done.
thanks!
Pádraig
diff --git a/src/timeout.c b/src/timeout.c
index 578d71070..6756cd888 100644
--- a/src/timeout.c
+++ b/src/timeout.c
@@ -371,6 +371,10 @@ parse_duration (char const *str)
usage (EXIT_CANCELED);
}
+ /* Clamp underflow to 1ns, as 0 disables the timeout. */
+ if (duration == 0 && errno == ERANGE)
+ duration = 1e-9;
+
return duration;
}
[Message part 3 (message/rfc822, inline)]
Hi,
Version: timeout (GNU coreutils) 9.6, Archlinux, x86-64.
While playing with different duration parameters to `timeout`, I
noticed that extremely short durations, like `1e-3000`, are rounded
down to `0`. The problem is that `0` has a special meaning (disabling
the timeout), so I don't think this is desired.
All of these commands exit immediately:
```
timeout 0.0001 cat
timeout 1e-100 cat
timeout 1e-300 cat
timeout 1e-323 cat
```
But these never exits:
```
timeout 1e-324 cat
timeout 1e-3000 cat
```
As if we had typed:
```
timeout 0 cat
```
I think there is some logic in `printf` to handle float parsing
underflow, so maybe this can be reused in `timeout` as well.
Thanks,
This bug report was last modified 42 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.