On 28/03/2023 13:42, Pádraig Brady wrote:
On 28/03/2023 09:54, Paul Eggert wrote:
Thanks for reporting that. I installed the attached to fix it.

Looks good thanks.
Also worth the attached test and NEWS,
which I've pushed.

I'm also applying the attached for fix the same issue in dircolors.

cheers,
Pádraig
From a9bd274616a8d2e99736b498e657cda4e6954f3f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A1draig=20Brady?= <p...@draigbrady.com>
Date: Tue, 28 Mar 2023 14:24:29 +0100
Subject: [PATCH] dircolors: diagnose read errors

* NEWS: Mention the fix.
* src/dircolors.c: Fail upon read error from getline().
* tests/misc/dircolors.sh: Add a new test.
* tests/local.mk: Reference the new test.
---
 NEWS                    |  4 ++--
 src/dircolors.c         |  5 +++++
 tests/local.mk          |  1 +
 tests/misc/dircolors.sh | 28 ++++++++++++++++++++++++++++
 4 files changed, 36 insertions(+), 2 deletions(-)
 create mode 100755 tests/misc/dircolors.sh

diff --git a/NEWS b/NEWS
index 8f602325c..bade99043 100644
--- a/NEWS
+++ b/NEWS
@@ -10,8 +10,8 @@ GNU coreutils NEWS                                    -*- outline -*-
   more restricted systems like android or containers etc.
   [bug introduced in coreutils-9.2]
 
-  date --file will now diagnose a failure to read the file.
-  Previously it would have silently ignored the failure.
+  date --file and dircolors will now diagnose a failure to read a file.
+  Previously they would have silently ignored the failure.
   [This bug was present in "the beginning".]
 
   md5sum --check again correctly prints the status of each file checked.
diff --git a/src/dircolors.c b/src/dircolors.c
index f95524b67..f43a57db5 100644
--- a/src/dircolors.c
+++ b/src/dircolors.c
@@ -298,6 +298,11 @@ dc_parse_stream (FILE *fp, char const *filename)
         {
           if (getline (&input_line, &input_line_size, fp) <= 0)
             {
+              if (ferror (fp))
+                {
+                  error (0, errno, _("%s: read error"), quotef (filename));
+                  ok = false;
+                }
               free (input_line);
               break;
             }
diff --git a/tests/local.mk b/tests/local.mk
index c958c138c..a0c024905 100644
--- a/tests/local.mk
+++ b/tests/local.mk
@@ -306,6 +306,7 @@ all_tests =					\
   tests/misc/date-sec.sh			\
   tests/misc/date-tz.sh				\
   tests/misc/dircolors.pl			\
+  tests/misc/dircolors.sh			\
   tests/misc/dirname.pl				\
   tests/misc/env-null.sh			\
   tests/misc/env-S.pl				\
diff --git a/tests/misc/dircolors.sh b/tests/misc/dircolors.sh
new file mode 100755
index 000000000..9e2ae2890
--- /dev/null
+++ b/tests/misc/dircolors.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+# Copyright (C) 2023 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 <https://www.gnu.org/licenses/>.
+
+. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
+print_ver_ dircolors
+
+# Make sure dircolors fails when it can't read input
+# (the current directory in this case)
+if ! cat . >/dev/null; then
+  # can't read() directories
+  returns_ 1 dircolors . || fail=1
+fi
+
+Exit $fail
-- 
2.26.2

Reply via email to