aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--builtin.c16
2 files changed, 15 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 0fa04f6d..14f4af1c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2015-04-16 Arnold D. Robbins <arnold@skeeve.com>
+
+ * builtin.c (do_strftime): For bad time_t values, return "".
+
2015-04-16 Andrew J. Schorr <aschorr@telemetry-investments.com>
* node.c (r_force_number): If strtod sets errno, then force the
diff --git a/builtin.c b/builtin.c
index 804bd60a..a62437a2 100644
--- a/builtin.c
+++ b/builtin.c
@@ -1917,15 +1917,21 @@ do_strftime(int nargs)
clock_val = get_number_d(t2);
fclock = (time_t) clock_val;
/*
- * 4/2015: Protect against negative value being assigned
+ * Protect against negative value being assigned
* to unsigned time_t.
*/
- if (clock_val < 0 && fclock > 0)
- fatal(_("strftime: second argument less than 0 or too big for time_t"));
+ if (clock_val < 0 && fclock > 0) {
+ if (do_lint)
+ lintwarn(_("strftime: second argument less than 0 or too big for time_t"));
+ return make_string("", 0);
+ }
/* And check that the value is in range */
- if (clock_val < time_t_min || clock_val > time_t_max)
- fatal(_("strftime: second argument out of range for time_t"));
+ if (clock_val < time_t_min || clock_val > time_t_max) {
+ if (do_lint)
+ lintwarn(_("strftime: second argument out of range for time_t"));
+ return make_string("", 0);
+ }
DEREF(t2);
}