Subject: bug#21700: new snapshot available: grep-2.21.78-7da30

From: Jim Meyering <[email-masked]>
Date: Sat, 17 Oct 2015 22:26:07 -0700

I want to release grep-2.22 in just a couple of days.
This release is motivated largely by the discovery that there has
been a bug in versions 2.19, 2.20 and 2.21 that made grep mistakenly
print some lines that did not match. However, there have also been
several other bug fixes and notable performance improvements.

Any testing you can do would be most welcome.
Feedback, even the report that you "built and passed tests on XYZ,"
would be appreciated.

grep snapshot:
  http://meyering.net/grep/grep-ss.tar.xz      1.3 MB
  http://meyering.net/grep/grep-ss.tar.xz.sig
  http://meyering.net/grep/grep-2.21.78-7da30.tar.xz

Here is the current summary from NEWS.  More detail after that.
=====================================

** Improvements

  When building grep, 'configure' now uses PCRE's pkg-config module for
  configuration information, rather than attempting to guess it by hand.

** Bug fixes

  A DFA matcher bug made this command mistakenly print its input line:
    echo axb | grep -E '^x|x$'
  Likewise for this equivalent command:
    echo axb | grep -e '^x' -e 'x$'
  [bug introduced in grep-2.19 ]

  grep no longer reads from uninitialized memory or from beyond the end
  of the heap-allocated input buffer.  This fix addressed CVE-2015-1345.

  With -z, '.' and '[^x]' in a pattern now consistently match newline.
  Previously, they sometimes matched newline, and sometimes did not.
  [bug introduced in grep-2.4]

  When the JIT stack is exhausted, grep -P now grows the stack rather
  than reporting an internal PCRE error.

  'grep -D skip PATTERN FILE' no longer hangs if FILE is a fifo.
  [bug introduced in grep-2.12]

  --exclude and related options are now matched against entire
  command-line arguments, not against command-line components.
  [bug introduced in grep-2.6]

  Performance has improved for patterns containing very long strings,
  and for grep -Fw in unibyte locales.
=====================================

Changes in grep since v2.21:

Jim Meyering (27):
      maint: post-release administrivia
      maint: correct for four Author: name misspellings
      maint: fix a new "make syntax-check" failure
      maint: update copyright year ranges to include 2015
      gnulib: update to latest
      grep: avoid false-positive UMR
      tests: add support for ASAN memory poisoning
      maint: convert "goto" to "continue" and remove now-spurious label
      maint: reference CVE-2015-1345 from NEWS
      maint: use ASAN-poisoning more carefully
      maint: sort test names in tests/Makefile.am and add syntax-check rule
      maint: reword a diagnostic not to trigger leading capital check
      maint: update bootstrap from gnulib
      maint: alphabetize anonymous enum member names
      maint: unify three argv-processing calls
      tests/case-fold-backref: factor test
      maint: dfa: used unsigned types where appropriate
      tests: avoid FS-dependent false-positive failure
      tests: fix mis-applied patch.
      tests: add a test for the performance fix
      tests: new function to measure elapsed user time
      tests: long-pattern-perf: measure user time, not elapsed
      tests: mb-non-UTF8-performance: use new function
      doc: NEWS: mention a bug fix
      maint: use single quote rather than UTF-8 multi-byte version
      build: avoid spurious bootstrap failure involving pkg.m4
      gnulib: update to latest; also bootstrap and tests/init.sh

Norihiro Tanaka (17):
      dfa: avoid invalid match or infinite loop in unused matching mode
      dfa: simplify dfaexec
      build: avoid build failure with --enable-gcc-warnings and no PCRE
      dfa: make find_pred return NULL for an invalid predicate
      dfa: build struct dfamust on demand
      dfa: speed up handling of long pattern
      tests: sjis-mb: accept two more locales
      dfa: DEBUG: print detail of DFA states
      dfa: avoid execution for a pattern including an unsupported expression
      dfa: remove word delimiter support for multibyte locales
      dfa: remove unused multibyte support
      grep: remove fgrep code for case insensitive match
      grep: avoid use of uninitialized variable
      dfa: fix off-by-one error
      dfa: fix bug in alternate of sub-patterns that differ only in constraints
      grep: improve performance of grep -Fw
      grep: use grep matcher for grep -Fw when unibyte

Paul Eggert (32):
      tests: port fmbtest to CentOS 6 and earlier
      doc: document binary-data heuristic better
      Grow the JIT stack if it becomes exhausted
      Cover the non-INSTALL case
      doc: clarify how -a matches
      doc: give a script wrapper example
      egrep, fgrep: just use what's in PATH
      grep: output "." file name in diagnostic
      build: use pkg-config (if available) to configure libpcre
      build: remove typo and don't bother with /usr/include/pcre
      build: improve pkg-config doc and error handling
      test: tighten tests for bracket exprs
      grep: minor tweaks
      grep: don't hang on command-line fifo if -D skip
      grep: don't mishandle left context in -P
      grep: simplify print_line_middle slightly
      grep: -z '.' now consistently matches newline
      grep: -z '[^x]' now consistently matches newline
      dfa: '.' and '[^x]' now consistently match newline
      build: update gnulib submodule to latest
      maint: ignore gendocs_template_min
      grep: use recent gnulib syntax bits
      tests: fix $? typo in null-byte
      grep: fix bug with --exclude-dir and command line
      dfa: optimize [x-x]
      build: update gnulib submodule to latest
      Add test for pop_fail_stack bug
      tests: add test case for Bug#21670
      dfa: make the executable a bit smaller
      grep: use memchr/memrchar
      grep: simplify previous change
      maint: add news item

Santiago Ruano Rincón (1):
      doc: document grep-2.11 change in behavior of -r, --recursive

Yuliy Pisetsky (1):
      grep -F: fix a heap buffer (read) overrun

Changes in gnulib since v2.21:

* gnulib 46d015f...37c054a (333):
  > maint.mk: _gl_TS_function_match: fix "extern" name extracting regexp
  > maint.mk: sc_tight_scope: factor and support OS X
  > ChangeLog: fix typo: s/cound/count/
  > safe-alloc-tests: fix typo in license header
  > copy-file: fix mem leak in error case
  > localename: control langinfo.h inclusion
  > update from texinfo
  > binary-io, math, pthread, sys_socket, u64, unistd: port to strict C
  > accept4-tests: fix to avoid non portable flags
  > update from texinfo
  > update from texinfo
  > gnulib-tool: fix tests of 'extensions' module
  > unicase/locale-language: fix typo in utf-8 cookie
  > autoupdate
  > xalloc: do not worry about GCC 5 warning on 32 bit
  > xalloc: avoid GCC 5.1 warning on 32 bit
  > uniname/uniname-tests: avoid compiler warnings
  > autoupdate
  > mountlist: clean up of variable duplication
  > c-ctype: do not worry about EBCDIC + char signed
  > c-ctype: port better to z/OS EBCDIC
  > gnulib-common.m4: fix gl_PROG_AR_RANLIB/AM_PROG_AR clash
  > sockets: MS Windows initalization fixes
  > gc: fix detection of installed libgcrypt version
  > c-ctype: rewrite to use inline functions
  > fnmatch: add one more coding cookie
  > maint: add coding cookies to non-ASCII sources
  > gitlog-to-changelog: trim only trailing whitespaces
  > Test that c_iscntrl agrees with iscntrl, etc.
  > c-ctype: improve c_isascii testing
  > Fix ChangeLog typo
  > savewd: remove SAVEWD_CHDIR_READABLE
  > Update ChangeLog to match previous patch.
  > c-ctype: support EBCDIC-style c_isascii
  > c-ctype: assume EBCDIC 1047 for c_iscntrl
  > * modules/c-ctype (Depends-on): Add verify.
  > c-ctype: port better to EBCDIC
  > nanosleep: fix return code for interrupted replacement
  > autoupdate
  > Diagnose ERE '()|\1'
  > Revert previous patch, as it did not fix the bug after all.
  > regex: fix dangling-backreference bug
  > regex: merge patches from libc
  > autoupdate
  > autoupdate
  > autoupdate
  > autoupdate
  > ceill: detect buggy OpenBSD implementation
  > mountlist: add me_mntroot field on Linux machines
  > doc: Describe to use multiple instances of gnulib
  > autoupdate
  > autoupdate
  > base32: mark function as __attribute__ const
  > autoupdate
  > autoupdate
  > gnulib-tool: don't transform binary files with sed
  > autoupdate
  > autoupdate
  > autoupdate
  > autoupdate
  > gperf: respect silent rules
  > Improve port of stdalign to C++11
  > pmccabe2html: fix gawk regex escaping
  > update from texinfo
  > time_rz: port to pedantic memcpy
  > autoupdate
  > time_rz: port better to MinGW
  > time: port __need_time_t to MinGW
  > strftime: fix newly-introduced bug on Solaris
  > test-strftime: test for Solaris bug
  > time_rz: port to Solaris etc.
  > time_rz: now LGPL
  > time_rz: make a constant 'const'
  > time_rz: fix off-by-one typo
  > autoupdate
  > fprintftime, strftime: use timezone_t args
  > time_rz: new module
  > flexmember: license is now unlimited
  > autoupdate
  > maint: update copyright paper procedures
  > autoupdate
  > autoupdate
  > localename: fix link error on Illumos
  > unistr/uN-strtok-tests: avoid a trivial leak
  > acl-permissions: Document FreeBSD ACL_TYPE_NFS4 acls
  > acl-permissions: Fix on FreeBSD
  > file-has-acl, acl-permissions: fix some more HP-UX typos
  > file-has-acl, acl-permissions: fix HP-UX typos
  > regex: match current GNU grep behavior
  > set-permissions.c: adjust acl_from_mode's cpp guard
  > autoupdate
  > tests: restrict shells to those that support 'local'
  > fix mistakes in ChangeLog entries
  > unistr/uN-strtok: handle multibyte delimiters
  > update-copyright: fix test failure with perl >= 5.22
  > u{16,32}-strstr-tests: relax timeout condition
  > gnulib-common.m4: change the ARFLAGS default to 'cr'
  > update from texinfo
  > autoupdate
  > selinux-h: avoid double free after *getfilecon()
  > fix pty related tests issues on Windows
  > acl: fix definition of acl_from_mode on FreeBSD
  > readutmp: port to FreeBSD >= 9
  > mgetgroups: port to strict OS X
  > mgetgroups: fix port to strict OS X
  > linkat: fix invalid definition of LINKAT_SYMLINK_NOTSUP on OS X
  > mgetgroups: port to strict OS X
  > mountlist: avoid an unused-label warning on OS X
  > error.c: correct printf-style format: %d -> %u
  > fts: avoid reading beyond the heap allocation
  > savedir: avoid undefined behavior in qsort call
  > userspec: avoid undefined behavior in gettext call
  > update from texinfo
  > gitlog-to-changelog: improve gitmerge.el commits
  > wchar: fix MinGW compilation warnings
  > uniname/uniname-tests: use pristine data files
  > linked-list, linkedhash-list: avoid compiler warnings
  > libunistring: bump minimum version to 0.9.6
  > uniname/uniname: update to Unicode 8.0.0
  > * lib/gen-uni-tables.c: Style fixes.
  > libunistring: update to Unicode 8.0.0
  > gnu-web-doc-update: add --mirror to remove stale files
  > * lib/set-permissions.c: Spelling fix.
  > update from texinfo
  > acl-permissions: pacify -Wsuggest-attribute=const
  > fsync: document AIX misbehavior
  > acl-permissions: more porting to AIX
  > stdio: Don't redefine gets when using C++
  > acl-permissions: add a cast to port to older AIX
  > acl-permissions: port to older AIX, C89 HP-UX
  > update from texinfo
  > vasprintf-posix: avoid compiling vasnprintf where possible
  > file-has-acl: fix build on Mac OS X 10
  > prefix-gnulib-mk: remove no longer needed special case
  > acl: don't depend on the deprecated qacl module
  > gnulib-tool: concatenate lib_SOURCES to a single line
  > pthread_sigmask: discount system version if a simple macro
  > readlinkat: avoid OS X 10.10 trailing slash bug
  > acl-permissions: Fix build on Mac OS X and older AIX (Bug#20681)
  > acl-permissions: Fix build on Solaris and Cygwin
  > linkat: avoid OS X 10.10 trailing slash with symlink bug
  > unlinkat: handle ignoring of ".." on Darwin 14
  > qacl: split into qcopy-acl and qset-acl
  > gitlog-to-changelog: new option --ignore-line
  > qacl: Reimplement qset_acl and qcopy_acl (Bug#20666)
  > file-has-acl: Split feature tests again (Bug#20667)
  > string: fix build failure on BSD/OSX with FORTIFY_SOURCE
  > stdio: limit __gnu_printf__ witness to gcc 4.4+
  > error: use correct printf attributes on mingw
  > update from texinfo
  > inttypes: force correct mingw PRIdMAX even without <stdio.h>
  > stdio: fix probe on mingw under gcc 5.1
  > autoupdate
  > gitlog-to-changelog: parse "Tiny-change"
  > update from texinfo
  > doc: document glibc posix_fallocate() issues
  > gendocs.sh: document new htmlarg default
  > extern-inline: no need for workaround in GCC 5.1
  > update from texinfo
  > eealloc, pagealign_alloc, xalloc: avoid clang warnings
  > tests: pacify GCC 5.1's stricter printf checking
  > fts: port to GCC 5.1 with --enable-gcc-warnings
  > file-has-acl: port to CentOS 6
  > file-has-acl: always return false when ACLs aren't supported
  > gettext: propagate po/Makefile.in.in too
  > file-has-acl: new module, split from acl
  > manywarnings: add GCC 5.1 warnings
  > autoupdate
  > doc: update FDL template to match FDL examples.
  > lstat: fix cross-compilation 'ln -s' problem
  > gendocs.sh: default to a common CSS style sheet for HTML output
  > gnulib-tool: output bold attribute more portably
  > qacl: Simplify HP-UX acl_nontrivial check
  > acl: On Linux, check for acls without libacl
  > acl, qacl: split off shared functions into separate object file
  > git-version-gen: revert "detect untagged revisions"
  > tempname: avoid unused parameter warnings
  > git-version-gen: detect untagged revisions
  > fseeko: fix build failure on NetBSD >= 6
  > gitlog-to-changelog: port to MS-Windows
  > gendocs: new option --tex for texi2dvi options
  > sync gettext .m4 files from gettext
  > uniname/uniname-tests: fix failure due to alias
  > hash: remove deprecated hash_insert0 function
  > mountlist: remove dependency on libmount
  > stddef: port to pre-C11 GCC on x86
  > quotearg-simple-tests: add missing gl_FUNC_MMAP_ANON dependency
  > yesno: make EOL optional in ENABLE_NLS case also
  > fdopendir-tests: test it does not close its arg
  > gitlog-to-changelog: trim trailing white space
  > gitlog-to-changelog: new option --ignore-matching
  > fdopendir: port better to MinGW
  > fdopendir: fix typo in comment
  > error: document all entry points provided
  > autoupdate
  > autoupdate
  > autoupdate
  > vasnprintf: pacify clang 3.5.0
  > glob, etc.: port to MSVC v18 on MS-Windows 8.1
  > poll: port to MSVC v18 on MS-Windows 8.1
  > tests: support stderr verification with returns_()
  > passfd: avoid valgrind uninitalised data warning
  > uniwbrk/u32-wordbreaks-tests: fix copyright
  > dup2: doc and test for Android bug
  > Replace dup2() on Android
  > Android doesn't define RLIM_SAVED_*
  > autoupdate
  > vasnprintf-posix-tests: use consistent test
  > printf, isinf, etc.: noncanonical != NaN
  > fts: remove redundant close() (trivial)
  > getdtablesize: port better for Android
  > poll: fixes for large fds
  > fcntl: Fix cross compiling
  > dup2, fcntl: cross-compiler better for Android
  > getopt: give accurate ambiguity diagnostic on mem exhaustion
  > getopt: don't crash on memory exhaustion
  > tempname: allow compilation with C++ (trivial)
  > dup2, fcntl: port to AIX
  > getdtablesize, dup2, fcntl: port to Android
  > localename: Implement gl_locale_name_thread_unsafe for Android
  > More changelog fixes
  > fts: avoid crash when a cycle is added while traversing
  > uniname/uniname: support character alias
  > Fix ChangeLog botches in my recent commits
  > duplocale: Fix Android build of duplocale-tests
  > signal_h: Fix Android build
  > net_if: Handle content-free <net/if.h> system headers
  > linkat_nofollow: Add fallback case for cross compiling
  > euidaccess: Fix Android build
  > getugroups: Fix Android build
  > localename: Fix Android build
  > getdtablesize: Fix Android build
  > Assume unbroken ungetc() on Android
  > Fix FILE struct compatibility with Android API level >= 21
  > tests: avoid recent -Werror=unused-variable regression in test-locale
  > maint: various whitespace cleanups in tempname
  > tests: provide returns_() to simplify exit status checking
  > mountlist: only use libmount when specified
  > uniname/unimame-tests: don't link with -lunistring
  > fstrcmp: don't assume strlen < INT_MAX
  > diffseq: prefer ptrdiff_t to ssize_t
  > xalloc: fix typo that suppressed warnings
  > full-read: fix license notice typo
  > crypto/gc: fix a -Wswitch warning
  > autoupdate
  > update from texinfo
  > tempname: new try_tempname function
  > gnulib-tool: fix handling of patch(1) diagnostics
  > bootstrap: exit immediately upon gnulib-tool failure
  > symlinkat: include all required header files
  > update from texinfo
  > update from texinfo
  > update from texinfo
  > localename: support Solaris 12 and illumos
  > locale: fix tests on illumos
  > unictype: avoid undefined left-shift behavior
  > libunistring: bump version of unitypes dependants
  > unictype/category-none: fix link with libunistring
  > unitypes: fix build with installed libunistring
  > time: port to MinGW32 3.21
  > update-copyright: apply to self
  > libunistring: update to Unicode 7.0.0
  > libunistring: update to Unicode 6.3.0
  > libunistring: update to Unicode 6.2.0
  > libunistring: update to Unicode 6.1.0
  > uniwbrk/u32-wordbreaks-tests: add conformance test
  > uniwbrk: ignore Extended/Format characters at BOL
  > test-strstr.c: avoid a trivial leak
  > update-copyright: recognize groff's \(co marker
  > maint.mk: fix compatibility with OS X nm
  > localcharset: improve charset detection on OS/2
  > count-leading-zeros: use 64-bit intrinsics on 32-bit Windows
  > count-leading-zeros: fix pragma typos
  > autoupdate
  > count-leading-zeros: avoid 64-bit intrinsics on 32-bit Windows
  > uniname/uniname: update to Unicode 7.0.0
  > doc: update INSTALL from autoconf
  > stdio: fix use of PRIdMAX on modern mingw
  > Fix check for pthreads.h pollution on Mingw64
  > lib-symbol-versions: cache script check
  > maint: fix grammar nits in propername
  > gendocs: Update bug-report address and URLs to Gnulib's.
  > gendocs: Add 'doc/gendocs_template_min'.
  > gendocs: Change maintainer.
  > gendocs: copyright date and version fix
  > derived INSTALL
  > revert copyright updates in slaved files
  > version-etc: new year
  > autoupdate
  > autoupdate
  > xstrtol: ensure errno is reset
  > utimens: fix dependency typo
  > autoupdate
  > docs: mention why libgen.h is bad
  > autoupdate
  > assure: new module
  > autoupdate
  > stdalign: port better to HP compilers
  > stdalign: work around Apple GCC 4.0 bug
  > gendocs.sh and templates now maintained in gnulib
  > getcwd: fix test failure on OS X 10.9
  > parse-datetime: avoid a compiler warning with byacc
  > unicase/locale-language-tests: fix LOCALE_FR test
  > autoupdate
  > update from texinfo
  > stddef: support C11's max_align_t
  > unistd: fix iOS check conditional
  > posixtm: avoid compiler warning in a better way
  > relocatable: support UNIXROOT in relocate() on EMX
  > freopen: workaround freopen() on OS/2 kLIBC
  > get_shared_library_fullname: port to EMX
  > find_executable: port to EMX
  > sched: check struct sched_param in spawn.h as well
  > support GNU format printf and scanf on mingw
  > bootstrap: Allow perl modules in $buildreq
  > apply _GL_ATTRIBUTE_PURE to some inline functions
  > vasnprintf: fix potential incorrect errno
  > vasnprintf: fix potential use after free
  > autoupdate
  > filevercmp, posixtm: avoid compiler warnings with -O3
  > Fix LDBL80_WORDS macro on big endian platforms.
  > autoupdate
  > git-version-gen: do not print new line characters
  > gnulib-tool: recognize x:* as an absolute path
  > argp: avoid extraneous translation and mem leak with empty pre doc
  > autoupdate
  > doc: mention that _BSD_SOURCE is deprecated for _DEFAULT_SOURCE
  > uniname/uniname-tests: skip if system's libunistring is used
  > printf: fix configure check on big endian systems
  > pipe-filter-gi, pipe-filter-ii: port to AIX
  > gitlog-to-changelog: add --until
  > update from texinfo
  > extern-inline: update commentary about GCC bugs