coreutils
[Top][All Lists]
Advanced

[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




reply via email to

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