]> git.ipfire.org Git - ipfire-2.x.git/commitdiff
bash: Update the bash patches to -037
authorAdolf Belka <adolf.belka@ipfire.org>
Tue, 19 Nov 2024 11:09:27 +0000 (12:09 +0100)
committerArne Fitzenreiter <arne_f@ipfire.org>
Thu, 12 Dec 2024 12:07:23 +0000 (13:07 +0100)
- Update from patches 1-32 to 1-37
- Update of rootfile not required
- Changelog
    Patch 33
A typo in the autoconf test for strtold causes false negatives for strtold
 being available and working when compiled with gcc-14.
    Patch 34
If we parse a compound assignment during an alias expansion, it's possible
 to have the current input string popped out from underneath the parse. In
 this case, we should not restore the input we were using when we began to
 parse the compound assignment.
    Patch 35
There are systems that supply one of select or pselect, but not both.
    Patch 36
When readline is accumulating bytes until it reads a complete multibyte
 character, reading a byte that makes the multibyte character invalid can
 result in discarding the bytes in the partial character.
    Patch 37
Fix the case where text to be completed from the line buffer (quoted) is
 compared to the common prefix of the possible matches (unquoted) and the
 quoting makes the former appear to be longer than the latter. Readline
 assumes the match doesn't add any characters to the word and doesn't display
 multiple matches.

Signed-off-by: Adolf Belka <adolf.belka@ipfire.org>
Signed-off-by: Arne Fitzenreiter <arne_f@ipfire.org>
lfs/bash
src/patches/bash/bash52-033 [new file with mode: 0644]
src/patches/bash/bash52-034 [new file with mode: 0644]
src/patches/bash/bash52-035 [new file with mode: 0644]
src/patches/bash/bash52-036 [new file with mode: 0644]
src/patches/bash/bash52-037 [new file with mode: 0644]

index f3948c7e54383a29f580287692055c4cf32635db..8717b1644f2d4635a0ece272ce92aa7811c3984b 100644 (file)
--- a/lfs/bash
+++ b/lfs/bash
@@ -91,7 +91,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects))
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-4.0-profile-1.patch
        cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/bash/bash-3.2-ssh_source_bash.patch
        
-       for i in $$(seq 1 32); do \
+       for i in $$(seq 1 37); do \
        cd $(DIR_APP) && patch -Np0 < $(DIR_SRC)/src/patches/bash/bash52-$$(printf "%03d" "$${i}") || exit 1; \
        done
 
diff --git a/src/patches/bash/bash52-033 b/src/patches/bash/bash52-033
new file mode 100644 (file)
index 0000000..ca29aea
--- /dev/null
@@ -0,0 +1,80 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-033
+
+Bug-Reported-by:       Florian Weimer <fweimer@redhat.com>
+Bug-Reference-ID:      <87leasmvoo.fsf@oldenburg.str.redhat.com>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2023-11/msg00104.html
+
+Bug-Description:
+
+A typo in the autoconf test for strtold causes false negatives for strtold
+being available and working when compiled with gcc-14.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.2-patched/configure.ac   Fri Aug 11 14:52:31 2023
+--- configure.ac       Tue Nov 21 12:00:25 2023
+***************
+*** 899,903 ****
+               [AC_LANG_PROGRAM(
+               [[#include <stdlib.h>]],
+!              [[long double r; char *foo, bar; r = strtold(foo, &bar);]]
+       )],
+       [bash_cv_strtold_broken=no],[bash_cv_strtold_broken=yes])
+--- 900,904 ----
+               [AC_LANG_PROGRAM(
+               [[#include <stdlib.h>]],
+!              [[long double r; char *foo, *bar; r = strtold(foo, &bar);]]
+       )],
+       [bash_cv_strtold_broken=no],[bash_cv_strtold_broken=yes])
+
+*** ../bash-5.2-patched/configure      Fri Aug 18 16:27:53 2023
+--- configure  Tue Nov 21 12:00:30 2023
+***************
+*** 15923,15927 ****
+  main (void)
+  {
+! long double r; char *foo, bar; r = strtold(foo, &bar);
+  
+    ;
+--- 15932,15936 ----
+  main (void)
+  {
+! long double r; char *foo, *bar; r = strtold(foo, &bar);
+  
+    ;
+
+*** ../bash-5.2-patched/builtins/printf.def    Fri Jun 24 10:09:50 2022
+--- builtins/printf.def        Tue Aug 13 10:36:55 2024
+***************
+*** 710,714 ****
+  
+                   p = getfloatmax ();
+!                  f = mklong (start, "L", 1);
+                   PF (f, p);
+                 }
+--- 710,714 ----
+  
+                   p = getfloatmax ();
+!                  f = mklong (start, FLOATMAX_CONV, USE_LONG_DOUBLE);
+                   PF (f, p);
+                 }
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 32
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 33
+  
+  #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash52-034 b/src/patches/bash/bash52-034
new file mode 100644 (file)
index 0000000..17c0d66
--- /dev/null
@@ -0,0 +1,143 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-034
+
+Bug-Reported-by:       Wiley Young <wyeth2485@gmail.com>
+Bug-Reference-ID:      <CAGnujaPrPV9hgbvdtG=fOs+L1zVGEahT9d3Aw0e1y3Qj8D8stw@mail.gmail.com>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2023-05/msg00146.html
+
+Bug-Description:
+
+If we parse a compound assignment during an alias expansion, it's possible
+to have the current input string popped out from underneath the parse. In
+this case, we should not restore the input we were using when we began to
+parse the compound assignment.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.2-patched/parse.y        Fri May 26 16:57:03 2023
+--- parse.y    Thu Jun  1 16:30:19 2023
+***************
+*** 6854,6860 ****
+  {
+    WORD_LIST *wl, *rl;
+!   int tok, orig_line_number, assignok;
+    sh_parser_state_t ps;
+    char *ret;
+  
+    orig_line_number = line_number;
+--- 6858,6865 ----
+  {
+    WORD_LIST *wl, *rl;
+!   int tok, orig_line_number, assignok, ea, restore_pushed_strings;
+    sh_parser_state_t ps;
+    char *ret;
++   STRING_SAVER *ss;
+  
+    orig_line_number = line_number;
+***************
+*** 6879,6882 ****
+--- 6884,6893 ----
+    esacs_needed_count = expecting_in_token = 0;
+  
++   /* We're not pushing any new input here, we're reading from the current input
++      source. If that's an alias, we have to be prepared for the alias to get
++      popped out from underneath us. */
++   ss = (ea = expanding_alias ()) ? pushed_string_list : (STRING_SAVER *)NULL;
++   restore_pushed_strings = 0;
++     
+    while ((tok = read_token (READ)) != ')')
+      {
+***************
+*** 6902,6906 ****
+--- 6913,6926 ----
+      }
+  
++   /* Check whether or not an alias got popped out from underneath us and
++      fix up after restore_parser_state. */
++   if (ea && ss && ss != pushed_string_list)
++     {
++       restore_pushed_strings = 1;
++       ss = pushed_string_list;
++     }
+    restore_parser_state (&ps);
++   if (restore_pushed_strings)
++     pushed_string_list = ss;
+  
+    if (wl == &parse_string_error)
+*** ../bash-5.2-patched/y.tab.c        Mon Sep 23 10:02:46 2024
+--- y.tab.c    Mon Sep 23 10:02:49 2024
+***************
+*** 8804,8812 ****
+       int *retlenp;
+  {
+    WORD_LIST *wl, *rl;
+!   int tok, orig_line_number, assignok;
+    sh_parser_state_t ps;
+    char *ret;
+  
+    orig_line_number = line_number;
+    save_parser_state (&ps);
+--- 8804,8813 ----
+       int *retlenp;
+  {
+    WORD_LIST *wl, *rl;
+!   int tok, orig_line_number, assignok, ea, restore_pushed_strings;
+    sh_parser_state_t ps;
+    char *ret;
++   STRING_SAVER *ss;
+  
+    orig_line_number = line_number;
+    save_parser_state (&ps);
+***************
+*** 8829,8834 ****
+--- 8830,8841 ----
+  
+    esacs_needed_count = expecting_in_token = 0;
+  
++   /* We're not pushing any new input here, we're reading from the current input
++      source. If that's an alias, we have to be prepared for the alias to get
++      popped out from underneath us. */
++   ss = (ea = expanding_alias ()) ? pushed_string_list : (STRING_SAVER *)NULL;
++   restore_pushed_strings = 0;
++     
+    while ((tok = read_token (READ)) != ')')
+      {
+        if (tok == '\n')                       /* Allow newlines in compound assignments */
+***************
+*** 8852,8858 ****
+--- 8859,8874 ----
+        wl = make_word_list (yylval.word, wl);
+      }
+  
++   /* Check whether or not an alias got popped out from underneath us and
++      fix up after restore_parser_state. */
++   if (ea && ss && ss != pushed_string_list)
++     {
++       restore_pushed_strings = 1;
++       ss = pushed_string_list;
++     }
+    restore_parser_state (&ps);
++   if (restore_pushed_strings)
++     pushed_string_list = ss;
+  
+    if (wl == &parse_string_error)
+      {
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 33
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 34
+  
+  #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash52-035 b/src/patches/bash/bash52-035
new file mode 100644 (file)
index 0000000..5b1fb37
--- /dev/null
@@ -0,0 +1,129 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-035
+
+Bug-Reported-by:       Henry Bent <henry.r.bent@gmail.com>
+Bug-Reference-ID:      <CAEdTPBdD0WOW2n0-y-XyZ_VwhbiG-oS3bXfGkOPPG617rGH-Ww@mail.gmail.com>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2022-11/msg00044.html
+
+Bug-Description:
+
+There are systems that supply one of select or pselect, but not both.
+
+Patch (apply with `patch -p0'):
+
+https://lists.gnu.org/archive/html/bug-bash/2022-11/msg00058.html
+
+*** ../bash/bash-5.2-patched/lib/readline/input.c      2022-04-08 15:43:24.000000000 -0400
+--- lib/readline/input.c       2022-11-16 09:10:41.000000000 -0500
+***************
+*** 152,156 ****
+--- 152,158 ----
+  int _rl_timeout_init (void);
+  int _rl_timeout_sigalrm_handler (void);
++ #if defined (RL_TIMEOUT_USE_SELECT)
+  int _rl_timeout_select (int, fd_set *, fd_set *, fd_set *, const struct timeval *, const sigset_t *);
++ #endif
+  
+  static void _rl_timeout_handle (void);
+***************
+*** 249,253 ****
+    int chars_avail, k;
+    char input;
+! #if defined(HAVE_SELECT)
+    fd_set readfds, exceptfds;
+    struct timeval timeout;
+--- 251,255 ----
+    int chars_avail, k;
+    char input;
+! #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
+    fd_set readfds, exceptfds;
+    struct timeval timeout;
+***************
+*** 806,810 ****
+    unsigned char c;
+    int fd;
+! #if defined (HAVE_PSELECT)
+    sigset_t empty_set;
+    fd_set readfds;
+--- 808,812 ----
+    unsigned char c;
+    int fd;
+! #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
+    sigset_t empty_set;
+    fd_set readfds;
+*** ../bash-5.2-patched/lib/sh/input_avail.c   2021-05-24 11:16:33.000000000 -0400
+--- lib/sh/input_avail.c       2022-11-16 09:12:48.000000000 -0500
+***************
+*** 34,40 ****
+  #endif /* HAVE_SYS_FILE_H */
+  
+! #if defined (HAVE_PSELECT)
+! #  include <signal.h>
+! #endif
+  
+  #if defined (HAVE_UNISTD_H)
+--- 34,38 ----
+  #endif /* HAVE_SYS_FILE_H */
+  
+! #include <signal.h>
+  
+  #if defined (HAVE_UNISTD_H)
+***************
+*** 108,115 ****
+  {
+    int result, chars_avail;
+- #if defined(HAVE_SELECT)
+-   fd_set readfds, exceptfds;
+- #endif
+  #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
+    sigset_t set, oset;
+  #endif
+--- 106,111 ----
+  {
+    int result, chars_avail;
+  #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
++   fd_set readfds, exceptfds;
+    sigset_t set, oset;
+  #endif
+***************
+*** 122,132 ****
+    chars_avail = 0;
+  
+! #if defined (HAVE_SELECT)
+    FD_ZERO (&readfds);
+    FD_ZERO (&exceptfds);
+    FD_SET (fd, &readfds);
+    FD_SET (fd, &exceptfds);
+- #endif
+- #if defined (HAVE_SELECT) || defined (HAVE_PSELECT)
+    sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set);
+  #  ifdef SIGCHLD
+--- 115,123 ----
+    chars_avail = 0;
+  
+! #if defined (HAVE_PSELECT) || defined (HAVE_SELECT)
+    FD_ZERO (&readfds);
+    FD_ZERO (&exceptfds);
+    FD_SET (fd, &readfds);
+    FD_SET (fd, &exceptfds);
+    sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set);
+  #  ifdef SIGCHLD
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 34
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 35
+  
+  #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash52-036 b/src/patches/bash/bash52-036
new file mode 100644 (file)
index 0000000..4aef5f2
--- /dev/null
@@ -0,0 +1,237 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-036
+
+Bug-Reported-by:        Grisha Levit <grishalevit@gmail.com>
+Bug-Reference-ID:       <CAMu=Brrv5qKY6LPfw8PxqNXNO8rNsZo0Fb=BcFb-uHObWPqnrw@mail.gmail.com>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-bash/2023-04/msg00082.html
+
+Bug-Description:
+
+When readline is accumulating bytes until it reads a complete multibyte
+character, reading a byte that makes the multibyte character invalid can
+result in discarding the bytes in the partial character.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.2-patched/lib/readline/text.c    Mon May  1 09:37:52 2023
+--- lib/readline/text.c        Mon May 29 12:22:29 2023
+***************
+*** 86,90 ****
+  rl_insert_text (const char *string)
+  {
+!   register int i, l;
+  
+    l = (string && *string) ? strlen (string) : 0;
+--- 86,91 ----
+  rl_insert_text (const char *string)
+  {
+!   register int i;
+!   size_t l;
+  
+    l = (string && *string) ? strlen (string) : 0;
+***************
+*** 705,709 ****
+  /* Insert the character C at the current location, moving point forward.
+     If C introduces a multibyte sequence, we read the whole sequence and
+!    then insert the multibyte char into the line buffer. */
+  int
+  _rl_insert_char (int count, int c)
+--- 706,714 ----
+  /* Insert the character C at the current location, moving point forward.
+     If C introduces a multibyte sequence, we read the whole sequence and
+!    then insert the multibyte char into the line buffer.
+!    If C == 0, we immediately insert any pending partial multibyte character,
+!    assuming that we have read a character that doesn't map to self-insert.
+!    This doesn't completely handle characters that are part of a multibyte
+!    character but map to editing functions. */
+  int
+  _rl_insert_char (int count, int c)
+***************
+*** 719,727 ****
+  #endif
+  
+    if (count <= 0)
+      return 0;
+  
+! #if defined (HANDLE_MULTIBYTE)
+!   if (MB_CUR_MAX == 1 || rl_byte_oriented)
+      {
+        incoming[0] = c;
+--- 724,749 ----
+  #endif
+  
++ #if !defined (HANDLE_MULTIBYTE)
+    if (count <= 0)
+      return 0;
++ #else
++   if (count < 0)
++     return 0;
++   if (count == 0)
++     {
++       if (pending_bytes_length == 0)
++      return 0;
++       if (stored_count <= 0)
++      stored_count = count;
++       else
++      count = stored_count;
+  
+!       memcpy (incoming, pending_bytes, pending_bytes_length);
+!       incoming[pending_bytes_length] = '\0';
+!       incoming_length = pending_bytes_length;
+!       pending_bytes_length = 0;
+!       memset (&ps, 0, sizeof (mbstate_t));
+!     }
+!   else if (MB_CUR_MAX == 1 || rl_byte_oriented)
+      {
+        incoming[0] = c;
+***************
+*** 731,734 ****
+--- 753,759 ----
+    else if (_rl_utf8locale && (c & 0x80) == 0)
+      {
++       if (pending_bytes_length)
++      _rl_insert_char (0, 0);
++ 
+        incoming[0] = c;
+        incoming[1] = '\0';
+***************
+*** 765,769 ****
+         incoming_length = 1;
+         pending_bytes_length--;
+!        memmove (pending_bytes, pending_bytes + 1, pending_bytes_length);
+         /* Clear the state of the byte sequence, because in this case the
+            effect of mbstate is undefined. */
+--- 790,795 ----
+         incoming_length = 1;
+         pending_bytes_length--;
+!        if (pending_bytes_length)
+!          memmove (pending_bytes, pending_bytes + 1, pending_bytes_length);
+         /* Clear the state of the byte sequence, because in this case the
+            effect of mbstate is undefined. */
+***************
+*** 828,832 ****
+--- 854,862 ----
+        xfree (string);
+  
++ #if defined (HANDLE_MULTIBYTE)
++       return (pending_bytes_length != 0);
++ #else
+        return 0;
++ #endif
+      }
+  
+***************
+*** 861,864 ****
+--- 891,896 ----
+        incoming_length = 0;
+        stored_count = 0;
++ 
++       return (pending_bytes_length != 0);
+  #else /* !HANDLE_MULTIBYTE */
+        char str[TEXT_COUNT_MAX+1];
+***************
+*** 874,880 ****
+         count -= decreaser;
+       }
+- #endif /* !HANDLE_MULTIBYTE */
+  
+        return 0;
+      }
+  
+--- 906,912 ----
+         count -= decreaser;
+       }
+  
+        return 0;
++ #endif /* !HANDLE_MULTIBYTE */
+      }
+  
+***************
+*** 904,910 ****
+        stored_count = 0;
+      }
+! #endif
+! 
+    return 0;
+  }
+  
+--- 936,944 ----
+        stored_count = 0;
+      }
+!   
+!   return (pending_bytes_length != 0);
+! #else
+    return 0;
++ #endif
+  }
+  
+***************
+*** 984,987 ****
+--- 1018,1026 ----
+      }
+  
++   /* If we didn't insert n and there are pending bytes, we need to insert
++      them if _rl_insert_char didn't do that on its own. */
++   if (r == 1 && rl_insert_mode == RL_IM_INSERT)
++     r = _rl_insert_char (0, 0);              /* flush partial multibyte char */
++ 
+    if (n != (unsigned short)-2)               /* -2 = sentinel value for having inserted N */
+      {
+***************
+*** 1055,1058 ****
+--- 1094,1099 ----
+  rl_quoted_insert (int count, int key)
+  {
++   int r;
++ 
+    /* Let's see...should the callback interface futz with signal handling? */
+  #if defined (HANDLE_SIGNALS)
+***************
+*** 1073,1085 ****
+    if (count < 0)
+      {
+-       int r;
+- 
+        do
+       r = _rl_insert_next (1);
+        while (r == 0 && ++count < 0);
+-       return r;
+      }
+  
+!   return _rl_insert_next (count);
+  }
+  
+--- 1114,1128 ----
+    if (count < 0)
+      {
+        do
+       r = _rl_insert_next (1);
+        while (r == 0 && ++count < 0);
+      }
++   else
++     r = _rl_insert_next (count);
+  
+!   if (r == 1)
+!     _rl_insert_char (0, 0);  /* insert partial multibyte character */
+! 
+!   return r;
+  }
+  
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 35
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 36
+  
+  #endif /* _PATCHLEVEL_H_ */
diff --git a/src/patches/bash/bash52-037 b/src/patches/bash/bash52-037
new file mode 100644 (file)
index 0000000..99c9bed
--- /dev/null
@@ -0,0 +1,71 @@
+                            BASH PATCH REPORT
+                            =================
+
+Bash-Release:  5.2
+Patch-ID:      bash52-037
+
+Bug-Reported-by:        Martin Castillo <castilma@uni-bremen.de>
+Bug-Reference-ID:       <2d42153b-cf65-caba-dff1-cd3bc6268c7e@uni-bremen.de>
+Bug-Reference-URL:     https://lists.gnu.org/archive/html/bug-readline/2023-01/msg00000.html
+
+Bug-Description:
+
+Fix the case where text to be completed from the line buffer (quoted) is
+compared to the common prefix of the possible matches (unquoted) and the
+quoting makes the former appear to be longer than the latter. Readline
+assumes the match doesn't add any characters to the word and doesn't display
+multiple matches.
+
+Patch (apply with `patch -p0'):
+
+*** ../bash-5.2-patched/lib/readline/complete.c        Tue Apr  5 10:47:06 2022
+--- lib/readline/complete.c    Sat Jan  7 14:19:45 2023
+***************
+*** 2032,2038 ****
+    text = rl_copy_text (start, end);
+    matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char);
+    /* nontrivial_lcd is set if the common prefix adds something to the word
+       being completed. */
+!   nontrivial_lcd = matches && compare_match (text, matches[0]) != 0;
+    if (what_to_do == '!' || what_to_do == '@')
+      tlen = strlen (text);
+--- 2038,2060 ----
+    text = rl_copy_text (start, end);
+    matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char);
++   /* If TEXT contains quote characters, it will be dequoted as part of
++      generating the matches, and the matches will not contain any quote
++      characters. We need to dequote TEXT before performing the comparison.
++      Since compare_match performs the dequoting, and we only want to do it
++      once, we don't call compare_matches after dequoting TEXT; we call
++      strcmp directly. */
+    /* nontrivial_lcd is set if the common prefix adds something to the word
+       being completed. */
+!   if (rl_filename_completion_desired && rl_filename_quoting_desired &&
+!       rl_completion_found_quote && rl_filename_dequoting_function)
+!     {
+!       char *t;
+!       t = (*rl_filename_dequoting_function) (text, rl_completion_quote_character);
+!       xfree (text);
+!       text = t;
+!       nontrivial_lcd = matches && strcmp (text, matches[0]) != 0;
+!     }
+!   else
+!     nontrivial_lcd = matches && strcmp (text, matches[0]) != 0;
+    if (what_to_do == '!' || what_to_do == '@')
+      tlen = strlen (text);
+
+*** ../bash-5.2/patchlevel.h   2020-06-22 14:51:03.000000000 -0400
+--- patchlevel.h       2020-10-01 11:01:28.000000000 -0400
+***************
+*** 26,30 ****
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 36
+  
+  #endif /* _PATCHLEVEL_H_ */
+--- 26,30 ----
+     looks for to find the patch level (for the sccs version string). */
+  
+! #define PATCHLEVEL 37
+  
+  #endif /* _PATCHLEVEL_H_ */