From 2ef621251992bc0b9fbc9ada98606996047ed8a3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?P=C3=A1draig=20Brady?=
Date: Wed, 20 Apr 2016 18:26:58 +0100
Subject: [PATCH] sleep,timeout: support overflowing floating point values
* src/sleep.c (main): Allow ERANGE since we allow "inf" values.
* src/timeout.c (parse_duration): Likewise.
* tests/misc/sleep.sh: New file. Tests for sleep(1).
* tests/misc/timeout-parameters.sh: Add case for newly allowed
$LDBL_MAX. Also use returns_ throughout the file. Also avoid
small timeout values which might give false failures under load.
---
src/sleep.c | 2 +-
src/timeout.c | 2 +-
tests/local.mk | 1 +
tests/misc/sleep.sh | 42 ++++++++++++++++++++++++++++++++
tests/misc/timeout-parameters.sh | 26 +++++++++-----------
5 files changed, 57 insertions(+), 16 deletions(-)
create mode 100755 tests/misc/sleep.sh
diff --git a/src/sleep.c b/src/sleep.c
index a865c766d7..acee3bbfe1 100644
--- a/src/sleep.c
+++ b/src/sleep.c
@@ -124,7 +124,7 @@ main (int argc, char **argv)
{
double s;
const char *p;
- if (! xstrtod (argv[i], &p, &s, c_strtod)
+ if (! (xstrtod (argv[i], &p, &s, c_strtod) || errno == ERANGE)
/* Nonnegative interval. */
|| ! (0 <= s)
/* No extra chars after the number and an optional s,m,h,d char. */
diff --git a/src/timeout.c b/src/timeout.c
index 9c31df529c..462ef6b81e 100644
--- a/src/timeout.c
+++ b/src/timeout.c
@@ -314,7 +314,7 @@ parse_duration (const char* str)
double duration;
const char *ep;
- if (!xstrtod (str, &ep, &duration, c_strtod)
+ if (! (xstrtod (str, &ep, &duration, c_strtod) || errno == ERANGE)
/* Nonnegative interval. */
|| ! (0 <= duration)
/* No extra chars after the number and an optional s,m,h,d char. */
diff --git a/tests/local.mk b/tests/local.mk
index a83c3d0805..424f4609ce 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -333,6 +333,7 @@ all_tests = \
tests/misc/shred-size.sh \
tests/misc/shuf.sh \
tests/misc/shuf-reservoir.sh \
+ tests/misc/sleep.sh \
tests/misc/sort.pl \
tests/misc/sort-benchmark-random.sh \
tests/misc/sort-compress.sh \
diff --git a/tests/misc/sleep.sh b/tests/misc/sleep.sh
new file mode 100755
index 0000000000..9d3816a738
--- /dev/null
+++ b/tests/misc/sleep.sh
@@ -0,0 +1,42 @@
+#!/bin/sh
+# Validate sleep parameters
+
+# Copyright (C) 2016 Free Software Foundation, Inc.
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see