Bug#851292: grep: finalize_input sometimes fails on stdin

2017-01-17 Thread Santiago R.R.
El 13/01/17 a las 11:31, Akkana Peck escribió:
> Package: grep
> Version: 2.27-1
> Severity: normal
> 
> Dear Maintainer,
> 
> I have a procmail filter that runs:
> 
> * ? (echo "$FROM" | /bin/egrep -i -f $SPASTDIR/fromAllow)
> 
> and similar filters for toAllow, fromRejects etc. Sometimes -- only
> with one file, fromAllow -- this fails on lines that actually match,
> and in the procmail verbose log, it says:
> 
> procmail: Executing " (echo "$FROM" | $GREP -i -f $SPASTDIR/fromAllow)"
> grep: (standard input): Invalid argument
> 
> This only started happening recently, and it appears to be a change
> in grep. If I replace /bin/grep with the version from Debian stable,
> everything works again and I never see that Invalid argument message.
> On the other end I replace /bin/grep with the latest from
> git://git.savannah.gnu.org/grep.git, that also works.
> So I'm guessing this is a bug that was briefly introduced upstream,
> but has since been fixed upstream and Debian hasn't yet included
> the upstream fix.
> 

[…]

Hi,

Thanks for reporting this. Could you please test this package:

https://people.debian.org/~santiago/debian/santiago-unstable/grep_2.27-2~1_amd64.deb

It includes the upstream patches that I think concern this bug.

Cheers,

  -- Santiago


signature.asc
Description: PGP signature


Bug#851292: grep: finalize_input sometimes fails on stdin

2017-01-13 Thread Akkana Peck
Package: grep
Version: 2.27-1
Severity: normal

Dear Maintainer,

I have a procmail filter that runs:

* ? (echo "$FROM" | /bin/egrep -i -f $SPASTDIR/fromAllow)

and similar filters for toAllow, fromRejects etc. Sometimes -- only
with one file, fromAllow -- this fails on lines that actually match,
and in the procmail verbose log, it says:

procmail: Executing " (echo "$FROM" | $GREP -i -f $SPASTDIR/fromAllow)"
grep: (standard input): Invalid argument

This only started happening recently, and it appears to be a change
in grep. If I replace /bin/grep with the version from Debian stable,
everything works again and I never see that Invalid argument message.
On the other end I replace /bin/grep with the latest from
git://git.savannah.gnu.org/grep.git, that also works.
So I'm guessing this is a bug that was briefly introduced upstream,
but has since been fixed upstream and Debian hasn't yet included
the upstream fix.

The error message is coming from finalize_input () in grep.c.
The path through the code in the case where it fails looks like this:

static void
finalize_input (int fd, struct stat const *st, bool ineof)
{
  // ...
  if (outleft)
{
  // ...
  if (seek_failed)
{
  if (drain_input (fd, st))
return;
  // We don't return there, so we fall through
}
  // various other else clauses that don't concern us
}

  // ... and we fall through to here, where we generate an error.
  suppressible_error (errno);
}

Unfortunately, whatever is causing this doesn't happen from the
command line; if I run
  echo "From: User Name " | /bin/egrep -i -f 
$SPASTDIR/fromAllow
(assuming that there is a line in fromAllow matching u...@example.com)
it prints what was giving on stdin, with no error message.
Whatever input flushing is failing is only happening when called
from procmail, and then only in the case where there's a match.
Maybe if I understood what finalize_input is actually doing I could
come up with an easier way to reproduce it.

But since the problem is already fixed upstream,
integrating grep 2.27.37-3438 would fix the Debian bug,
and maybe it's not so important to understand more about how to
reproduce it in Debian's 2.27-1. (Meanwhile, anyone affected
by this bug can work around it by building grep from upstream.)


-- System Information:
Debian Release: stretch/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)

Kernel: Linux 4.3.0-1-686 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages grep depends on:
ii  dpkg  1.18.18
ii  install-info  6.3.0.dfsg.1-1+b1
ii  libc6 2.24-8
ii  libpcre3  2:8.39-2

grep recommends no packages.

Versions of packages grep suggests:
ii  libpcre3  2:8.39-2

-- no debconf information