patch 9.1.0451: No test for escaping '<' with shellescape()

Commit: 
https://github.com/vim/vim/commit/88c8c547d5fc380e5685c2b01ec564ccdf9b259a
Author: zeertzjq <zeert...@outlook.com>
Date:   Thu May 30 19:27:25 2024 +0200

    patch 9.1.0451: No test for escaping '<' with shellescape()
    
    Problem:  No test for escaping '<' with shellescape()
    Solution: Add a test.  Use memcpy() in code to make it easier to
              understand.  Fix a typo (zeertzjq).
    
    closes: #14876
    
    Signed-off-by: zeertzjq <zeert...@outlook.com>
    Signed-off-by: Christian Brabandt <c...@256bit.org>

diff --git a/src/strings.c b/src/strings.c
index 9b66ee0e4..6b2ff0a01 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -269,12 +269,12 @@ vim_strsave_shellescape(char_u *string, int do_special, 
int do_newline)
                *d++ = *p++;
                continue;
            }
-           if (do_special && find_cmdline_var(p, &l) >= 0 && l > 0)
+           if (do_special && find_cmdline_var(p, &l) >= 0)
            {
                *d++ = '\';             // insert backslash
-               do                      // copy the var
-                   *d++ = *p++;
-               while (--l > 0);
+               memcpy(d, p, l);        // copy the var
+               d += l;
+               p += l;
                continue;
            }
            if (*p == '\' && fish_like)
diff --git a/src/structs.h b/src/structs.h
index b5341e3ba..804581bf1 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -4795,7 +4795,7 @@ typedef struct soffset
 typedef struct spat
 {
     char_u         *pat;       // the pattern (in allocated memory) or NULL
-    size_t         patlen;     // the length of the patten (0 is pat is NULL)
+    size_t         patlen;     // the length of the pattern (0 if pat is NULL)
     int                    magic;      // magicness of the pattern
     int                    no_scs;     // no smartcase for this pattern
     soffset_T      off;
diff --git a/src/testdir/test_shell.vim b/src/testdir/test_shell.vim
index 7d91dff35..2ac559676 100644
--- a/src/testdir/test_shell.vim
+++ b/src/testdir/test_shell.vim
@@ -158,6 +158,10 @@ func Test_shellescape()
   call assert_equal("'te\#xt'", shellescape("te#xt", 1))
   call assert_equal("'te!xt'", shellescape("te!xt"))
   call assert_equal("'te\!xt'", shellescape("te!xt", 1))
+  call assert_equal("'te<cword>xt'", shellescape("te<cword>xt"))
+  call assert_equal("'te\<cword>xt'", shellescape("te<cword>xt", 1))
+  call assert_equal("'te<cword>%xt'", shellescape("te<cword>%xt"))
+  call assert_equal("'te\<cword>\%xt'", shellescape("te<cword>%xt", 1))
 
   call assert_equal("'te
xt'", shellescape("te
xt"))
   call assert_equal("'te\
xt'", shellescape("te
xt", 1))
diff --git a/src/version.c b/src/version.c
index bedc35bf2..e90bd3074 100644
--- a/src/version.c
+++ b/src/version.c
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    451,
 /**/
     450,
 /**/

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_dev+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/E1sCjbJ-00H90W-Bk%40256bit.org.

Raspunde prin e-mail lui