]> Savannah Git Hosting - gnulib.git/commitdiff
quotearg: fix shell-escape quoting with single quotes
authorPádraig Brady <P@draigBrady.com>
Wed, 3 Apr 2024 14:46:47 +0000 (15:46 +0100)
committerBruno Haible <bruno@clisp.org>
Mon, 8 Apr 2024 11:12:54 +0000 (13:12 +0200)
With shell-escape quoting, we misquoted strings
where the first and last characters required escaping,
while the string also contained single quotes.

* lib/quotearg.c (quotearg_buffer_restyled): Ensure that
pending_shell_escape_end is reset to the initial state
when reprocessing input due to single quotes.
Reported by Grisha Levit

ChangeLog
lib/quotearg.c

index e214c08e27332ef1163c3e2d98014d6e6941884f..306e4a610b8d8ab7e434acd94dc10ba951435551 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2024-04-03  Pádraig Brady  <P@draigBrady.com>
+
+       quotearg: fix shell-escape quoting with single quotes
+       With shell-escape quoting, we misquoted strings
+       where the first and last characters required escaping,
+       while the string also contained single quotes.
+
+       * lib/quotearg.c (quotearg_buffer_restyled): Ensure that
+       pending_shell_escape_end is reset to the initial state
+       when reprocessing input due to single quotes.
+       Reported by Grisha Levit
+
 2024-04-02  Pádraig Brady  <P@draigBrady.com>
 
        renameatu: handle ENOSYS from renameatx_np
index c4133f10d6dc898790db31eb6e94bc5905cf7724..68b187926ec2b03f49f7b176db099bf492737568 100644 (file)
@@ -1,6 +1,6 @@
 /* quotearg.c - quote arguments for output
 
-   Copyright (C) 1998-2002, 2004-2023 Free Software Foundation, Inc.
+   Copyright (C) 1998-2002, 2004-2024 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -259,7 +259,6 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
   bool backslash_escapes = false;
   bool unibyte_locale = MB_CUR_MAX == 1;
   bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0;
-  bool pending_shell_escape_end = false;
   bool encountered_single_quote = false;
   bool all_c_and_shell_quote_compat = true;
 
@@ -302,7 +301,8 @@ quotearg_buffer_restyled (char *buffer, size_t buffersize,
       } \
     while (0)
 
- process_input:
+ process_input: ;
+  bool pending_shell_escape_end = false;
 
   switch (quoting_style)
     {