From 88c8c547d5fc380e5685c2b01ec564ccdf9b259a Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Thu, 30 May 2024 19:27:25 +0200 Subject: 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 Signed-off-by: Christian Brabandt --- src/strings.c | 8 ++++---- src/structs.h | 2 +- src/testdir/test_shell.vim | 4 ++++ src/version.c | 2 ++ 4 files changed, 11 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/strings.c b/src/strings.c index 9b66ee0e4a..6b2ff0a011 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 b5341e3bad..804581bf1b 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 7d91dff358..2ac559676f 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("'text'", shellescape("text")) + call assert_equal("'te\\xt'", shellescape("text", 1)) + call assert_equal("'te%xt'", shellescape("te%xt")) + call assert_equal("'te\\\\%xt'", shellescape("te%xt", 1)) call assert_equal("'te\nxt'", shellescape("te\nxt")) call assert_equal("'te\\\nxt'", shellescape("te\nxt", 1)) diff --git a/src/version.c b/src/version.c index bedc35bf2b..e90bd3074e 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, /**/ -- cgit v1.2.3