[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[coreutils] Re: [PATCH] du: don't print junk when diagnosing out-of-rang
From: |
Paul Eggert |
Subject: |
[coreutils] Re: [PATCH] du: don't print junk when diagnosing out-of-range time stamps |
Date: |
Sat, 23 Oct 2010 17:28:25 -0700 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.2.11) Gecko/20101006 Thunderbird/3.1.5 |
On 10/23/2010 02:26 PM, Jim Meyering wrote:
> this is obviously
> a bug fix, so it belongs, too.
Thanks, I was hoping you'd be amused by it. :-)
I pushed the following smaller patch, which reflects your comments.
You're right that there was no real need to output the nanoseconds.
>From ff50010c65f0eb4ad4fade6b65ce8f349b13e31f Mon Sep 17 00:00:00 2001
From: Paul Eggert <address@hidden>
Date: Sat, 23 Oct 2010 17:20:01 -0700
Subject: [PATCH] du: don't print junk when diagnosing out-of-range time stamps
* src/du.c (show_date): Fix call to fputs with a buffer that
contains some uninitialized data.
* tests/Makefile.am (TESTS): Add du/big-timestamp.
* tests/du/bigtime: New file, which checks for the bug.
---
src/du.c | 5 +++--
tests/Makefile.am | 1 +
tests/du/bigtime | 45 +++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 49 insertions(+), 2 deletions(-)
create mode 100755 tests/du/bigtime
diff --git a/src/du.c b/src/du.c
index 3d92579..4951826 100644
--- a/src/du.c
+++ b/src/du.c
@@ -351,8 +351,9 @@ show_date (const char *format, struct timespec when)
if (! tm)
{
char buf[INT_BUFSIZE_BOUND (intmax_t)];
- error (0, 0, _("time %s is out of range"), timetostr (when.tv_sec, buf));
- fputs (buf, stdout);
+ char *when_str = timetostr (when.tv_sec, buf);
+ error (0, 0, _("time %s is out of range"), when_str);
+ fputs (when_str, stdout);
return;
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 41e0cbc..84db367 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -346,6 +346,7 @@ TESTS = \
du/2g \
du/8gb \
du/basic \
+ du/bigtime \
du/deref \
du/deref-args \
du/exclude \
diff --git a/tests/du/bigtime b/tests/du/bigtime
new file mode 100755
index 0000000..0a7f32b
--- /dev/null
+++ b/tests/du/bigtime
@@ -0,0 +1,45 @@
+#!/bin/sh
+# Exercise du on a file with a big time stamp.
+
+# Copyright (C) 2010 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 <http://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/init.sh"; path_prepend_ ../src
+
+export LC_ALL=C
+export TZ=UTC0
+
+# 2**63 - 1
+bignum=9223372036854775807
+
+touch -d @$bignum future 2>/dev/null &&
+future_time=$(ls -l future) &&
+case "$future_time" in
+*" $bignum "*)
+ : ;;
+*' Dec 4 300627798676 '*)
+ skip_ "file system and localtime both handle big timestamps" ;;
+*)
+ skip_ "file system or localtime mishandles big time stamps: $future_time" ;;
+esac || skip_ "file system cannot represent big time stamps"
+
+printf "0\t$bignum\tfuture\n" > exp || framework_failure_
+printf "du: time $bignum is out of range\n" > err_ok || framework_failure_
+
+du --time future >out 2>err || fail=1
+compare out exp || fail=1
+compare err err_ok || fail=1
+
+Exit $fail
--
1.7.2