bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: PATCH] unquoted_glob_pattern_p: better recognition


From: Grisha Levit
Subject: Re: PATCH] unquoted_glob_pattern_p: better recognition
Date: Thu, 12 Oct 2023 16:11:09 -0700

On Sat, Oct 7, 2023 at 9:57 AM Chet Ramey <chet.ramey@case.edu> wrote:
>
> On 9/26/23 2:25 AM, Grisha Levit wrote:
> > A CTLESC-escaped character should be treated as such even if it follows an
> > unquoted backslash, same as in quote_string_for_globbing:
>
> Thanks for the report and patch.

Sorry I guess this part was incomplete, based on your earlier comment in [1].

If we want to preserve the behavior of unquoted backslash causing a following
quoted character to become unquoted after quote_string_for_globbing:

$ B=\\ bash-5.2 -O failglob -c ': $B"*"'
bash-5.2: line 1: no match: \*

then unquoted_glob_pattern_p needs to recognize that circumstance.

[1]: https://lists.gnu.org/archive/html/bug-bash/2023-10/msg00019.html

---
diff --git a/pathexp.c b/pathexp.c
index a050ca2c..873edc2c 100644
--- a/pathexp.c
+++ b/pathexp.c
@@ -104,11 +104,17 @@ unquoted_glob_pattern_p (char *string)
          continue;

        case '\\':
-         /* Even after an unquoted backslash, CTLESC either quotes the next
-            char or escapes a CTLESC or CTLNUL.  Either way, the character
-            after it is not an unquoted globbing char. */
+         /* A quoted character following an unquoted backslash will become
+            unquoted when passed through quote_string_for_globbing */
          if (*string == CTLESC)
-           string++;
+           {
+             string++;
+             /* If the CTLESC was quoting a CTLESC, skip it so that it's not
+                treated as a quoting character */
+             if (*string == CTLESC)
+               string++;
+           }
+         else
          /*FALLTHROUGH*/
        case CTLESC:
          if (*string++ == '\0')
-- 
2.42.0



reply via email to

[Prev in Thread] Current Thread [Next in Thread]