Getting ready for a release (it's been almost a year!), here are some
changes I'll push shortly:
From 81ca497366a639364ff2e0f159f7ce61b7dafff7 Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Mon, 29 Jul 2013 02:36:44 +0200
Subject: [PATCH 1/3] doc: NEWS: mention the DFA segfault fix

* NEWS (Bug fixes): List the DFA segfault fix.
---
 NEWS | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/NEWS b/NEWS
index 407e0b0..8796a1b 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,11 @@ GNU grep NEWS                                    -*- outline 
-*-

 ** Bug fixes

+  grep -E would segfault when given a regexp like '([^.]*[M]){1,2}'
+  for any multibyte character M. [bug introduced in grep-2.6, which would
+  segfault, but 2.7 and 2.8 had no problem, and 2.9 through 2.14 would
+  hit a failed assertion. ]
+
   grep -F would get stuck in an infinite loop when given a search string
   that is an invalid byte sequence in the current locale and that matches
   the bytes of the input twice on a line.  Now grep fails with exit status 1.
-- 
1.8.4.rc0.11.g35f5eaa


From 94acf00027bda73423197e371ac9185c7246deec Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Mon, 29 Jul 2013 22:10:18 -0700
Subject: [PATCH 2/3] tests: simplify and factor newest test

* tests/char-class-multibyte2: Simplify file names.
Factor out $e_acute, so that the grep argument representation
is ascii (though the value is still UTF8).
---
 tests/char-class-multibyte2 | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/tests/char-class-multibyte2 b/tests/char-class-multibyte2
index a4bcc18..6cdada5 100755
--- a/tests/char-class-multibyte2
+++ b/tests/char-class-multibyte2
@@ -5,13 +5,15 @@
 require_en_utf8_locale_
 require_compiled_in_MB_support

-printf 'é\n'      > exp1 || framework_failure_
+e_acute=$(printf '\303\251')
+printf "$e_acute\n" > exp || framework_failure_
 fail=0

 for LOC in en_US.UTF-8 $LOCALE_FR_UTF8; do
-  out=out4-$LOC
-  printf 'á\nç\né\n' | LC_ALL=$LOC grep -E '([^.]*[é]){1,2}' > $out || fail=1
-  compare exp1 $out || fail=1
+  out=out-$LOC
+  printf "á\nç\n$e_acute\n" | LC_ALL=$LOC grep -E "([^.]*[$e_acute]){1,2}" \
+      > $out || fail=1
+  compare exp $out || fail=1
 done

 Exit $fail
-- 
1.8.4.rc0.11.g35f5eaa


From 22d6436e0fc77cf238acddc74c19d373d7222b58 Mon Sep 17 00:00:00 2001
From: Jim Meyering <[email protected]>
Date: Mon, 29 Jul 2013 02:20:43 +0200
Subject: [PATCH 3/3] build: update gnulib-related code

* gnulib: Update submodule to latest.
* bootstrap: Update from gnulib.
* gl/lib/regex_internal.h.diff: Update to reflect gnulib changes.
* bootstrap.conf: Partial sync from coreutils.
---
 bootstrap                    | 111 ++++++++++++++++++++++++-------------------
 bootstrap.conf               |  22 +++++----
 gl/lib/regex_internal.h.diff |  16 +++----
 gnulib                       |   2 +-
 4 files changed, 85 insertions(+), 66 deletions(-)

diff --git a/bootstrap b/bootstrap
index 48181c9..a37fb8a 100755
--- a/bootstrap
+++ b/bootstrap
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Print a version string.
-scriptversion=2012-07-19.14; # UTC
+scriptversion=2013-07-03.20; # UTC

 # Bootstrap this package from checked-out sources.

@@ -140,20 +140,21 @@ po_download_command_format2=\
 "wget --mirror -nd -q -np -A.po -P '%s' \
  http://translationproject.org/latest/%s/";

+# Prefer a non-empty tarname (4th argument of AC_INIT if given), else
+# fall back to the package name (1st argument with munging)
 extract_package_name='
-  /^AC_INIT(/{
-     /.*,.*,.*, */{
-       s///
-       s/[][]//g
-       s/)$//
+  /^AC_INIT(\[*/{
+     s///
+     /^[^,]*,[^,]*,[^,]*,[ []*\([^][ ,)]\)/{
+       s//\1/
+       s/[],)].*//
        p
        q
      }
-     s/AC_INIT(\[*//
-     s/]*,.*//
+     s/[],)].*//
      s/^GNU //
      y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
-     s/[^A-Za-z0-9_]/-/g
+     s/[^abcdefghijklmnopqrstuvwxyz0123456789_]/-/g
      p
   }
 '
@@ -255,12 +256,12 @@ esac
 # Extra files from gnulib, which override files from other sources.
 test -z "${gnulib_extra_files}" && \
   gnulib_extra_files="
-        $build_aux/install-sh
-        $build_aux/mdate-sh
-        $build_aux/texinfo.tex
-        $build_aux/depcomp
-        $build_aux/config.guess
-        $build_aux/config.sub
+        build-aux/install-sh
+        build-aux/mdate-sh
+        build-aux/texinfo.tex
+        build-aux/depcomp
+        build-aux/config.guess
+        build-aux/config.sub
         doc/INSTALL
 "

@@ -306,34 +307,34 @@ if test -n "$checkout_only_file" && test ! -r 
"$checkout_only_file"; then
   die "Bootstrapping from a non-checked-out distribution is risky."
 fi

-# Ensure that lines starting with ! sort last, per gitignore conventions
-# for whitelisting exceptions after a more generic blacklist pattern.
-sort_patterns() {
-  sort -u "$@" | sed '/^!/ {
-    H
-    d
-  }
-  $ {
-    P
-    x
-    s/^\n//
-  }' | sed '/^$/d'
+# Strip blank and comment lines to leave significant entries.
+gitignore_entries() {
+  sed '/^#/d; /^$/d' "$@"
 }

-# If $STR is not already on a line by itself in $FILE, insert it,
-# sorting the new contents of the file and replacing $FILE with the result.
-insert_sorted_if_absent() {
+# If $STR is not already on a line by itself in $FILE, insert it at the start.
+# Entries are inserted at the start of the ignore list to ensure existing
+# entries starting with ! are not overridden.  Such entries support
+# whitelisting exceptions after a more generic blacklist pattern.
+insert_if_absent() {
   file=$1
   str=$2
   test -f $file || touch $file
-  echo "$str" | sort_patterns - $file | cmp -s - $file > /dev/null \
-    || { echo "$str" | sort_patterns - $file > $file.bak \
-      && mv $file.bak $file; } \
-    || die "insert_sorted_if_absent $file $str: failed"
+  test -r $file || die "Error: failed to read ignore file: $file"
+  duplicate_entries=$(gitignore_entries $file | sort | uniq -d)
+  if [ "$duplicate_entries" ] ; then
+    die "Error: Duplicate entries in $file: " $duplicate_entries
+  fi
+  linesold=$(gitignore_entries $file | wc -l)
+  linesnew=$(echo "$str" | gitignore_entries - $file | sort -u | wc -l)
+  if [ $linesold != $linesnew ] ; then
+    { echo "$str" | cat - $file > $file.bak && mv $file.bak $file; } \
+      || die "insert_if_absent $file $str: failed"
+  fi
 }

 # Adjust $PATTERN for $VC_IGNORE_FILE and insert it with
-# insert_sorted_if_absent.
+# insert_if_absent.
 insert_vc_ignore() {
   vc_ignore_file="$1"
   pattern="$2"
@@ -344,7 +345,7 @@ insert_vc_ignore() {
     # .gitignore entry.
     pattern=$(echo "$pattern" | sed s,^,/,);;
   esac
-  insert_sorted_if_absent "$vc_ignore_file" "$pattern"
+  insert_if_absent "$vc_ignore_file" "$pattern"
 }

 # Die if there is no AC_CONFIG_AUX_DIR($build_aux) line in configure.ac.
@@ -550,7 +551,7 @@ fi
 echo "$0: Bootstrapping from checked-out $package sources..."

 # See if we can use gnulib's git-merge-changelog merge driver.
-if test -d .git && (git --version) >/dev/null 2>/dev/null ; then
+if $use_git && test -d .git && (git --version) >/dev/null 2>/dev/null ; then
   if git config merge.merge-changelog.driver >/dev/null ; then
     :
   elif (git-merge-changelog --version) >/dev/null 2>/dev/null ; then
@@ -573,13 +574,17 @@ git_modules_config () {
   test -f .gitmodules && git config --file .gitmodules "$@"
 }

-gnulib_path=$(git_modules_config submodule.gnulib.path)
-test -z "$gnulib_path" && gnulib_path=gnulib
+if $use_git; then
+  gnulib_path=$(git_modules_config submodule.gnulib.path)
+  test -z "$gnulib_path" && gnulib_path=gnulib
+fi

-# Get gnulib files.
+# Get gnulib files.  Populate $GNULIB_SRCDIR, possibly updating a
+# submodule, for use in the rest of the script.

 case ${GNULIB_SRCDIR--} in
 -)
+  # Note that $use_git is necessarily true in this case.
   if git_modules_config submodule.gnulib.url >/dev/null; then
     echo "$0: getting gnulib files..."
     git submodule init || exit $?
@@ -600,8 +605,8 @@ case ${GNULIB_SRCDIR--} in
   GNULIB_SRCDIR=$gnulib_path
   ;;
 *)
-  # Use GNULIB_SRCDIR as a reference.
-  if test -d "$GNULIB_SRCDIR"/.git && \
+  # Use GNULIB_SRCDIR directly or as a reference.
+  if $use_git && test -d "$GNULIB_SRCDIR"/.git && \
         git_modules_config submodule.gnulib.url >/dev/null; then
     echo "$0: getting gnulib files..."
     if git submodule -h|grep -- --reference > /dev/null; then
@@ -627,12 +632,19 @@ case ${GNULIB_SRCDIR--} in
   ;;
 esac

+# $GNULIB_SRCDIR now points to the version of gnulib to use, and
+# we no longer need to use git or $gnulib_path below here.
+
 if $bootstrap_sync; then
   cmp -s "$0" "$GNULIB_SRCDIR/build-aux/bootstrap" || {
     echo "$0: updating bootstrap and restarting..."
+    case $(sh -c 'echo "$1"' -- a) in
+      a) ignored=--;;
+      *) ignored=ignored;;
+    esac
     exec sh -c \
       'cp "$1" "$2" && shift && exec "${CONFIG_SHELL-/bin/sh}" "$@"' \
-      -- "$GNULIB_SRCDIR/build-aux/bootstrap" \
+      $ignored "$GNULIB_SRCDIR/build-aux/bootstrap" \
       "$0" "$@" --no-bootstrap-sync
   }
 fi
@@ -889,20 +901,21 @@ find "$m4_base" "$source_base" \
   -depth \( -name '*.m4' -o -name '*.[ch]' \) \
   -type l -xtype l -delete > /dev/null 2>&1

+# Invoke autoreconf with --force --install to ensure upgrades of tools
+# such as ylwrap.
+AUTORECONFFLAGS="--verbose --install --force -I $m4_base $ACLOCAL_FLAGS"
+
 # Some systems (RHEL 5) are using ancient autotools, for which the
 # --no-recursive option had not been invented.  Detect that lack and
 # omit the option when it's not supported.  FIXME in 2017: remove this
 # hack when RHEL 5 autotools are updated, or when they become irrelevant.
-no_recursive=
 case $($AUTORECONF --help) in
-  *--no-recursive*) no_recursive=--no-recursive;;
+  *--no-recursive*) AUTORECONFFLAGS="$AUTORECONFFLAGS --no-recursive";;
 esac

 # Tell autoreconf not to invoke autopoint or libtoolize; they were run above.
-echo "running: AUTOPOINT=true LIBTOOLIZE=true " \
-    "$AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS"
-AUTOPOINT=true LIBTOOLIZE=true \
-    $AUTORECONF --verbose --install $no_recursive -I $m4_base $ACLOCAL_FLAGS \
+echo "running: AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS"
+AUTOPOINT=true LIBTOOLIZE=true $AUTORECONF $AUTORECONFFLAGS \
   || die "autoreconf failed"

 # Get some extra files from gnulib, overriding existing files.
diff --git a/bootstrap.conf b/bootstrap.conf
index 1fb757b..ff61fd6 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -98,16 +98,16 @@ [email protected]

 # Additional xgettext options to use.  Use "\\\newline" to break lines.
 XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
- --from-code=UTF-8\\\
- --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\\\
- --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\\\
+ --flag=asnprintf:3:c-format\\\
+ --flag=asprintf:2:c-format\\\
+ --flag=error:3:c-format\\\
+ --flag=error_at_line:5:c-format\\\
+ --flag=vasnprintf:3:c-format\\\
+ --flag=vasprintf:2:c-format\\\
  --flag=wrapf:1:c-format\\\
- --flag=error:3:c-format --flag=error_at_line:5:c-format\\\
+ --from-code=UTF-8\\\
 '

-# Automake requires that ChangeLog exist.
-test -f ChangeLog || touch ChangeLog || exit 1
-
 gnulib_tool_option_extras="--tests-base=gnulib-tests --with-tests --symlink\
  --makefile-name=gnulib.mk
  $avoided_gnulib_modules
@@ -126,6 +126,12 @@ rsync      -
 tar        -
 "

+bootstrap_post_import_hook ()
+{
+  # Automake requires that ChangeLog exist.
+  touch ChangeLog || return 1
+}
+
 bootstrap_epilogue()
 {
   perl -pi -e "s/\@PACKAGE\@/$package/g" README-release
@@ -138,6 +144,6 @@ bootstrap_epilogue()
   # Why?  That pipeline searches all files in $(top_srcdir), and if you
   # happen to have large files (or apparently large sparse files), the
   # first grep may well run out of memory.
-  perl -pi -e 's/ LC_ALL=C grep .GNU .PACKAGE.*; then/ true; then/' \
+  perl -pi -e 's/if LC_ALL=C grep .GNU .PACKAGE.*; then/if true; then/' \
     po/Makefile.in.in
 }
diff --git a/gl/lib/regex_internal.h.diff b/gl/lib/regex_internal.h.diff
index d1506a6..f410882 100644
--- a/gl/lib/regex_internal.h.diff
+++ b/gl/lib/regex_internal.h.diff
@@ -1,14 +1,14 @@
-diff --git i/lib/regex_internal.h w/lib/regex_internal.h
-index 859832f..3c7fe06 100644
---- i/lib/regex_internal.h
-+++ w/lib/regex_internal.h
-@@ -826,7 +826,8 @@ re_string_wchar_at (const re_string_t *pstr, Idx idx)
-
+diff --git a/lib/regex_internal.h b/lib/regex_internal.h
+index 439444c..7242084 100644
+--- a/lib/regex_internal.h
++++ b/lib/regex_internal.h
+@@ -827,7 +827,8 @@ re_string_wchar_at (const re_string_t *pstr, Idx idx)
+ # ifndef NOT_IN_libc
  static int
- internal_function __attribute ((pure))
+ internal_function __attribute__ ((pure, unused))
 -re_string_elem_size_at (const re_string_t *pstr, Idx idx)
 +re_string_elem_size_at (const re_string_t *pstr _UNUSED_PARAMETER_,
 +                      Idx idx _UNUSED_PARAMETER_)
  {
- # ifdef _LIBC
+ #  ifdef _LIBC
    const unsigned char *p, *extra;
diff --git a/gnulib b/gnulib
index 2542b2e..c1118d1 160000
--- a/gnulib
+++ b/gnulib
@@ -1 +1 @@
-Subproject commit 2542b2eebd19665f5223548fe7f789a4d37c851e
+Subproject commit c1118d1ccfa785a0f3bbfc7316bde06c938ade8b
-- 
1.8.4.rc0.11.g35f5eaa

Reply via email to