mirror of
https://github.com/coreutils/coreutils.git
synced 2024-11-28 04:24:45 +08:00
seq: give a proper diagnostic for an invalid --format=% option
* src/seq.c (long_double_format): Handle '%' at end of string. * tests/misc/seq [fmt-eos1, fmt-eos2]: New tests for the bug. * NEWS: Mention this. Reported by Pádraig Brady.
This commit is contained in:
parent
1d96b88c66
commit
b8108fd2dd
4
NEWS
4
NEWS
@ -12,6 +12,10 @@ GNU coreutils NEWS -*- outline -*-
|
||||
"rmdir --ignore-fail-on-non-empty" detects and ignores the failure
|
||||
in more cases when a directory is empty.
|
||||
|
||||
"seq -f % 1" would issue the erroneous diagnostic "seq: memory exhausted"
|
||||
rather than reporting the invalid string format.
|
||||
[bug introduced in coreutils-6.0]
|
||||
|
||||
** Improvements
|
||||
|
||||
ls --color no longer outputs unnecessary escape sequences
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* seq - print sequence of numbers to standard output.
|
||||
Copyright (C) 1994-2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 1994-2008 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
|
||||
@ -209,7 +209,7 @@ long_double_format (char const *fmt, struct layout *layout)
|
||||
length_modifier_offset = i;
|
||||
has_L = (fmt[i] == 'L');
|
||||
i += has_L;
|
||||
if (! strchr ("efgaEFGA", fmt[i]))
|
||||
if (fmt[i] == '\0' || ! strchr ("efgaEFGA", fmt[i]))
|
||||
return NULL;
|
||||
|
||||
for (i++; ! (fmt[i] == '%' && fmt[i + 1] != '%'); i += (fmt[i] == '%') + 1)
|
||||
|
@ -2,7 +2,7 @@
|
||||
# -*- perl -*-
|
||||
# Test "seq".
|
||||
|
||||
# Copyright (C) 1999, 2000, 2003, 2005-2007 Free Software Foundation, Inc.
|
||||
# Copyright (C) 1999, 2000, 2003, 2005-2008 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
|
||||
@ -31,6 +31,7 @@ use strict;
|
||||
@ENV{qw(LANGUAGE LANG LC_ALL)} = ('C') x 3;
|
||||
|
||||
my $prog = 'seq';
|
||||
my $try_help = "Try `$prog --help' for more information.\n";
|
||||
|
||||
my @Tests =
|
||||
(
|
||||
@ -80,9 +81,16 @@ my @Tests =
|
||||
|
||||
# In coreutils-[6.0..6.9], this would mistakenly succeed and print "%Lg".
|
||||
['fmt-c', qw(-f %%g 1), {EXIT => 1},
|
||||
{ERR => "seq: invalid format string: `%%g'\n"
|
||||
. "Try `seq --help' for more information.\n"},
|
||||
],
|
||||
{ERR => "seq: invalid format string: `%%g'\n" . $try_help }],
|
||||
|
||||
# In coreutils-6.9..6.10, this would fail with an erroneous diagnostic:
|
||||
# "seq: memory exhausted". In coreutils-6.0..6.8, it would mistakenly
|
||||
# succeed and print a blank line.
|
||||
['fmt-eos1', qw(-f % 1), {EXIT => 1},
|
||||
{ERR => "seq: invalid format string: `%'\n" . $try_help }],
|
||||
['fmt-eos2', qw(-f %g% 1), {EXIT => 1},
|
||||
{ERR => "seq: invalid format string: `%g%'\n" . $try_help }],
|
||||
|
||||
);
|
||||
|
||||
# Append a newline to each entry in the OUT array.
|
||||
|
Loading…
Reference in New Issue
Block a user