Hi all,
I noticed the following inconsistent error message in GNU coreutils:
$ od -S $'\t'
od: invalid -S argument ' '
For clarity, would would usually escape that, e.g., like this:
$ uname $'\t'
uname: extra operand ‘\t’
Try 'uname --help' for more information.
The cause of this inconsistency is the xstrtol-error module, which does
not use quote().
I am proposing the attached patch to fix this inconsistency. However,
since it affects other packages, I felt it would be rude to make this
change without asking for approval. Here is the list of affected
packages from the lists in maint-tools.git:
$ git grep -F 'xstrtol-error' used-modules/
used-modules/coreutils: xstrtol-error
used-modules/datamash: xstrtol-error
used-modules/findutils: xstrtol-error
I beleive findutils and datamash already use quote() so I think (and
hope) this change is uncontroversial.
Collin
>From 30253a70c047b2b62845a7683c8c7c7ac59e6aa4 Mon Sep 17 00:00:00 2001
Message-ID: <30253a70c047b2b62845a7683c8c7c7ac59e6aa4.1781224205.git.collin.fu...@gmail.com>
From: Collin Funk <[email protected]>
Date: Thu, 11 Jun 2026 17:23:50 -0700
Subject: [PATCH] xstrtol-error: Use quote() before print command line
arguments.
* lib/xstrtol-error.c: Include quote.h.
(xstrtol_error): Adjust the format strings and call quote() before
printing the argument.
---
ChangeLog | 7 +++++++
lib/xstrtol-error.c | 9 +++++----
modules/xstrtol-error | 1 +
3 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 63f2d8b50a..5f255d0aff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2026-06-11 Collin Funk <[email protected]>
+
+ xstrtol-error: Use quote() before print command line arguments.
+ * lib/xstrtol-error.c: Include quote.h.
+ (xstrtol_error): Adjust the format strings and call quote() before
+ printing the argument.
+
2026-06-08 Bruno Haible <[email protected]>
strerror: Detect invalid writes to the returned string in some cases.
diff --git a/lib/xstrtol-error.c b/lib/xstrtol-error.c
index 94c6a016d2..765340a5a6 100644
--- a/lib/xstrtol-error.c
+++ b/lib/xstrtol-error.c
@@ -24,6 +24,7 @@
#include <error.h>
#include "exitfail.h"
#include "gettext.h"
+#include "quote.h"
#define _(msgid) dgettext (GNULIB_TEXT_DOMAIN, msgid)
#define N_(msgid) msgid
@@ -57,16 +58,16 @@ xstrtol_error (enum strtol_error err,
abort ();
case LONGINT_INVALID:
- msgid = N_("invalid %s%s argument '%s'");
+ msgid = N_("invalid %s%s argument %s");
break;
case LONGINT_INVALID_SUFFIX_CHAR:
case LONGINT_INVALID_SUFFIX_CHAR_WITH_OVERFLOW:
- msgid = N_("invalid suffix in %s%s argument '%s'");
+ msgid = N_("invalid suffix in %s%s argument %s");
break;
case LONGINT_OVERFLOW:
- msgid = N_("%s%s argument '%s' too large");
+ msgid = N_("%s%s argument %s too large");
break;
}
@@ -84,7 +85,7 @@ xstrtol_error (enum strtol_error err,
option = long_options[opt_idx].name;
error (exit_status, 0, dgettext (GNULIB_TEXT_DOMAIN, msgid),
- hyphens, option, arg);
+ hyphens, option, quote (arg));
}
/* Like xstrtol_error, except exit with a failure status. */
diff --git a/modules/xstrtol-error b/modules/xstrtol-error
index 674e2f7290..3fa70933fe 100644
--- a/modules/xstrtol-error
+++ b/modules/xstrtol-error
@@ -12,6 +12,7 @@ exitfail
getopt-gnu
gettext-h
gnulib-i18n
+quote
configure.ac:
--
2.54.0