Subject: Re: bug#13080: [PATHC] improve error reporting

From: Pádraig Brady <[email-masked]>
Date: Wed, 05 Dec 2012 14:29:47 +0000

On 12/05/2012 01:55 PM, Pádraig Brady wrote:
> On 12/05/2012 01:57 AM, Pádraig Brady wrote:
>
>> Keying on 0x80 doesn't seem right.
>> I'll apply this hunk instead in your name.
>> Please confirm.
>>
>> diff --git a/src/cut.c b/src/cut.c
>> index 4219d24..f2e63dc 100644
>> --- a/src/cut.c
>> +++ b/src/cut.c
>> @@ -846,7 +846,7 @@ main (int argc, char **argv)
>>     if (operating_mode == undefined_mode)
>>       FATAL_ERROR (_("you must specify a list of bytes, characters, or fields"));
>>
>> -  if (delim != '\0' && operating_mode != field_mode)
>> +  if (delim_specified && operating_mode != field_mode)
>>       FATAL_ERROR (_("an input delimiter may be specified only\
>>    when operating on fields"));
>
> I got confirmation of the adjustment privately,
> so I'm going to push the attached two patches,
> which augment/adjust the cut test accordingly.

The previous mail omitted the following patch.

sorry,
Pádraig.

 From b95a20224e40dd5e2d9eb3f0611e1db51b6f4e04 Mon Sep 17 00:00:00 2001
From: Cojocaru Alexandru <[email-masked]>
Date: Wed, 5 Dec 2012 13:13:51 +0000
Subject: [PATCH 1/2] cut: improve error reporting

* src/cut.c (main): Treat a NUL delimiter (-d '') consistently
with non NUL delimiters, and disallow such a delimiter option,
unless a field is also specified.
(set_fields): Provide a more accurate error message when
a given list is invalid.
* tests/misc/cut.pl: Add a test case.
---
  src/cut.c         |    6 +++---
  tests/misc/cut.pl |    7 +++++++
  2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/cut.c b/src/cut.c
index 4219d24..dc83072 100644
--- a/src/cut.c
+++ b/src/cut.c
@@ -365,7 +365,7 @@ set_fields (const char *fieldstr)
            in_digits = false;
            /* Starting a range. */
            if (dash_found)
-            FATAL_ERROR (_("invalid byte or field list"));
+            FATAL_ERROR (_("invalid byte, character or field list"));
            dash_found = true;
            fieldstr++;

@@ -491,7 +491,7 @@ set_fields (const char *fieldstr)
            fieldstr++;
          }
        else
-        FATAL_ERROR (_("invalid byte or field list"));
+        FATAL_ERROR (_("invalid byte, character or field list"));
      }

    max_range_endpoint = 0;
@@ -846,7 +846,7 @@ main (int argc, char **argv)
    if (operating_mode == undefined_mode)
      FATAL_ERROR (_("you must specify a list of bytes, characters, or fields"));

-  if (delim != '\0' && operating_mode != field_mode)
+  if (delim_specified && operating_mode != field_mode)
      FATAL_ERROR (_("an input delimiter may be specified only\
   when operating on fields"));

diff --git a/tests/misc/cut.pl b/tests/misc/cut.pl
index 27768ff..aff0cbe 100755
--- a/tests/misc/cut.pl
+++ b/tests/misc/cut.pl
@@ -32,6 +32,8 @@ my $try = "Try '$prog --help' for more information.\n";
  my $from_1 = "$prog: fields and positions are numbered from 1\n$try";
  my $inval = "$prog: invalid byte or field list\n$try";
  my $no_endpoint = "$prog: invalid range with no endpoint: -\n$try";
+my $nofield = "$prog: an input delimiter may be specified only when " .
+              "operating on fields\n$try";

  my @Tests =
   (
@@ -118,6 +120,11 @@ my @Tests =
    ['multichar-od', qw(-d: --out=_._), '-f2,3', {IN=>"a:b:c\n"},
     {OUT=>"b_._c\n"}],

+  # Ensure delim is not allowed without a field
+  # Prior to 8.21, a NUL delim was allowed without a field
+  ['delim-no-field1', qw(-d ''), '-b1', {EXIT=>1}, {ERR=>$nofield}],
+  ['delim-no-field2', qw(-d:), '-b1', {EXIT=>1}, {ERR=>$nofield}],
+
    # Prior to 1.22i, you couldn't use a delimiter that would sign-extend.
    ['8bit-delim', '-d', "\255", '--out=_', '-f2,3', {IN=>"a\255b\255c\n"},
     {OUT=>"b_c\n"}],
-- 
1.7.6.4