summaryrefslogtreecommitdiffstats
path: root/src
AgeCommit message (Collapse)Author
2023-12-14patch 9.0.2166: Memory leak in Configure Script when checking GTKv9.0.2166Zdenek Dohnal
Problem: Memory leak in Configure Script when checking GTK Solution: Free the allocated memory If the memory is not freed, GTK GUI VIM cannot be build with address sanitizer for debugging purposes - configure script will report missing GTK, because the testing file compilation fails due reported memory leak. closes: #13672 Signed-off-by: Zdenek Dohnal <zdohnal@redhat.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-14patch 9.0.2165: Vim9: can simplify arg type checking codev9.0.2165Ernie Rael
Problem: Vim9: can simplify arg type checking code Solution: In `f_argcheck` array use `arg_any`, instead of NULL closes: #13674 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-14patch 9.0.2164: Vim9: can use type a func arg/return valuev9.0.2164Ernie Rael
Problem: Vim9: can use type a func arg/return value Solution: Check if using type as function argument or return value closes: #13675 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-14patch 9.0.2163: Vim9: type can be assigned to list/dictv9.0.2163Ernie Rael
Problem: Vim9: type can be assigned to list/dict Solution: Prevent assigning a `type` to a `list` or `dict` closes: #13683 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-14patch 9.0.2162: Vim9: type documentation out-datedv9.0.2162Yegappan Lakshmanan
Problem: Vim9: type documentation out-dated Solution: Update documentation, fix typo in type alias definition closes: #13684 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-14patch 9.0.2161: Vim9: not able to use imported interfaces and classesv9.0.2161Yegappan Lakshmanan
Problem: Vim9: not able to use imported interfaces and classes Solution: Detect imported class/interfaces names correclty fixes: #13661 closes: #13685 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-12patch 9.0.2160: instanceof() should use varargs as second argv9.0.2160Ernie Rael
Problem: instanceof() should use varargs as second arg Solution: Modify `instanceof()` to use varargs instead of list Modify `instanceof()` to use varargs instead of list Valid `instanceof()` arguments are `type`s. A `type` is not a value; it cannot be added to a list. This change is non-compatible with the current usage of instanceof; but instanceof is relatively new and it's a trivial change. fixes: #13421 closes: #13644 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-12patch 9.0.2159: screenpos() may crash with neg. columnv9.0.2159zeertzjq
Problem: screenpos() may crash with neg. column Solution: validate and correct column closes: #13669 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-11patch 9.0.2158: [security]: use-after-free in check_argument_typev9.0.2158Christian Brabandt
Problem: [security]: use-after-free in check_argument_type Solution: Reset function type pointer when freeing the function type list function pointer fp->uf_func_type may point to the same memory, that was allocated for fp->uf_type_list. However, when cleaning up a function definition (e.g. because it was invalid), fp->uf_type_list will be freed, but fp->uf_func_type may still point to the same (now) invalid memory address. So when freeing the fp->uf_type_list, check if fp->func_type points to any of those types and if it does, reset the fp->uf_func_type pointer to the t_func_any (default) type pointer closes: #13652 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-11patch 9.0.2157: Vim9: incorrectly parses :def func definitionsv9.0.2157Christian Brabandt
Problem: Vim9: incorrectly parses :def func definitions Solution: check for more context when parsing function args Signed-off-by: Christian Brabandt <cb@256bit.org> Incorrectly parses def function definitions Vim currently allows to define the following vim9 function: def Func(f= ) enddef It currently thinks a Lambda is following the `=` but it doesn't check, that there is actually an expression following. So when such a think is encountered, remember that an expression should be following. If no expression is coming in the next few lines, fail parsing the function arguments, which will Vim no longer accept such a function. Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-11patch 9.0.2156: Vim9: can use typealias in assignmentv9.0.2156Ernie Rael
Problem: Vim9: can use typealias in an assignment Solution: Generate errors when class/typealias involved in the rhs of an assignment closes: #13637 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org> Generate errors when class/typealias involved in assignment.
2023-12-08patch 9.0.2155: Vim9: type not kept when assigning varsv9.0.2155Yegappan Lakshmanan
Problem: Vim9: type not kept when assigning vars Solution: When assigning a List or a Dict value to a variable of type 'any', keep the type closes: #13639 closes: #13646 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-08patch 9.0.2154: The option[] array is not sortedv9.0.2154zeertzjq
Problem: The options[] array is not sorted alphabetically. Solution: Sort it alphabetically. Add a test. Avoid unnecessary loop iterations in findoption(). closes: #13648 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-05patch 9.0.2153: no support to build on OpenVMSv9.0.2153Zoltan Arpadffy
Problem: no support to build on OpenVMS Solution: Add OpenVMS X86_64 platform port closes: #13623 Co-authored-by: errael <errael@raelity.com> Co-authored-by: K.Takata <kentkt@csc.jp> Signed-off-by: Zoltan Arpadffy <zoltan.arpadffy@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-05patch 9.0.2152: Using type unknown for List/Dict containersv9.0.2152Yegappan Lakshmanan
Problem: Using type unknown for List/Dict containers Solution: Use 'any' instead fixes: #13582 closes: #13625 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-05patch 9.0.2151: 'breakindent' is not drawn after diff filler linesv9.0.2151zeertzjq
Problem: 'breakindent' is not drawn after diff filler lines. Solution: Correct check for whether 'breakindent' should be drawn. closes: #13624 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-05patch 9.0.2150: Using int for errbuflen in option funcsv9.0.2150Mike Williams
Problem: Using int for errbuflen in option funcs Solution: Use size_t for errbuflen in string option functions Use size_t for errbuflen in string option functions This started as size_t to int warning on Windows in do_set_option_string(). Other option setting functions are using size_t for errbuflen so I changed the type in the argument list and then chased further compiler warnings into the string option functions in optionstr.c changing ints to size_t as I went. I also changed the type of os_errbuflen in optset_T to size_t and updated related argument lists in optionstr.c, as well as updating set_string_option() to also use size_t for errbuflen for consistency with other string option setting functions. closes: #13628 Signed-off-by: Mike Williams <mikew@globalgraphics.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-04patch 9.0.2149: [security]: use-after-free in exec_instructions()v9.0.2149Christian Brabandt
Problem: [security]: use-after-free in exec_instructions() Solution: get tv pointer again [security]: use-after-free in exec_instructions() exec_instructions may access freed memory, if the GA_GROWS_FAILS() re-allocates memory. When this happens, the typval tv may still point to now already freed memory. So let's get that pointer again and compare it with tv. If those two pointers differ, tv is now invalid and we have to refresh the tv pointer. closes: #13621 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-04patch 9.0.2148: Vim does not detect pacman.log filev9.0.2148Ronan Pigott
Problem: Vim does not detect pacman.log file Solution: Detect pacmanlogs and add syntax highlighting pacman.log is a filetype common to Arch Liux and related distributions. Add some simple syntax highlighting for the pacmanlog filetype. closes: #13618 Signed-off-by: Ronan Pigott <ronan@rjp.ie> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-04patch 9.0.2147: Type check tests fail without the channel featurev9.0.2147Yegappan Lakshmanan
Problem: Type check tests fail without the channel feature Solution: only run tests, when Vim was build with +channel fixes: #13617 closes: #13619 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-03patch 9.0.2146: text-property without type errors when joiningv9.0.2146Christian Brabandt
Problem: text-property without type errors when joining Solution: count all text-properties, with or without type before joining lines Error when joining lines with text properties without a proper type When joining lines, we need to consider all text properties that are attached to a line, even when those text properties are invalid and do not have a type attached to them. However, since patch v9.0.0993 (commit: 89469d157aea01513bde826b4519dd6b5fbceae4) those text properties won't be counted when joining lines and therefore this will cause the adjustment for text properties on joining to go wrong (and may later cause SIGABRT with an invalid free pointer) I am not sure, why the condition to not count text properties with a valid type was added in patch v9.0.993, because no test fails if those condition is removed. So let's just remove this condition and add a test that verifies, that we are able to join lines, even when the text properties attached to it do not have a valid type. fixes: #13609 closes: #13614 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-03patch 9.0.2145: wrong scrolling in insert mode with smoothscrollv9.0.2145zeertzjq
Problem: Wrong scrolling in Insert mode with 'smoothscroll' at the bottom of the window. Solution: Don't use set_topline() when 'smoothscroll' is set. fixes: #13612 closes: #13613 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-03patch 9.0.2144: Text properties causes wrong line wrappingv9.0.2144zeertzjq
Problem: Text properties causes wrong line wrapping to be drawn. Solution: Find the index of the last text property that inserts text. closes: #13611 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-03CI: disable the test_terminal_resize2() test for GH CI in gui mode (#13615)Christian Brabandt
becaues it tends to time-out CI for unknown reasons. related: #13566 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-01patch 9.0.2143: [security]: buffer-overflow in ex_substitutev9.0.2143Christian Brabandt
Problem: [security]: buffer-overflow in ex_substitute Solution: clear memory after allocating When allocating the new_start pointer in ex_substitute() the memory pointer points to some garbage that the following for loop in ex_cmds.c:4743 confuses and causes it to accessing the new_start pointer beyond it's size, leading to a buffer-overlow. So fix this by using alloc_clear() instead of alloc(), which will clear the memory by NUL and therefore cause the loop to terminate correctly. Reported by @henices, thanks! closes: #13596 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-01patch 9.0.2142: [security]: stack-buffer-overflow in option callback functionsv9.0.2142Christian Brabandt
Problem: [security]: stack-buffer-overflow in option callback functions Solution: pass size of errbuf down the call stack, use snprintf() instead of sprintf() We pass the error buffer down to the option callback functions, but in some parts of the code, we simply use sprintf(buf) to write into the error buffer, which can overflow. So let's pass down the length of the error buffer and use sprintf(buf, size) instead. Reported by @henices, thanks! Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-01patch 9.0.2141: [security]: buffer-overflow in suggest_trie_walkv9.0.2141Christian Brabandt
Problem: [security]: buffer-overflow in suggest_trie_walk Solution: Check n before using it as index into byts array Basically, n as an index into the byts array, can point to beyond the byts array. So let's double check, that n is within the expected range after incrementing it from sp->ts_curi and bail out if it would be invalid. Reported by @henices, thanks! Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-01patch 9.0.2140: [security]: use-after-free in win-enterv9.0.2140Christian Brabandt
Problem: [security]: use-after-free in win-enter Solution: validate window pointer before calling win_enter() win_goto() may stop visual mode, if it is active. However, this may in turn trigger the ModeChanged autocommand, which could potentially free the wp pointer which was valid before now became stale and points to now freed memory. So before calling win_enter(), let's verify one more time, that the wp pointer still points to a valid window structure. Reported by @henices, thanks! Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-01patch 9.0.2139: html.angular ft is problematicv9.0.2139Christian Brabandt
Problem: html.angular ft is problematic Solution: partly revert v9.0.2137 The html.angular filetype causes issues and does not trigger FileType autocommands for the html or angular filetypes. So let's roll back that particular change and detect this only as html file related: https://github.com/vim/vim/pull/13594#issuecomment-1834465890 closes: #13604 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-12-01CI: disable the test_terminal_resize() test for GH CI in GUI (#13603)Christian Brabandt
fixes: #13566 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-30patch 9.0.2138: Overflow logic requires long longv9.0.2138Ernie Rael
Problem: Overflow logic requires long long Solution: Define vimlong_T data type to make life easier for porters closes: #13598 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-30patch 9.0.2137: Can't detect angular & mustache filetypesv9.0.2137ObserverOfTime
Problem: Can't detect angular & mustache filetypes Solution: Detect *.mustache as Mustache filetype; detect *.component.html as html.angular filetype closes: #13594 Signed-off-by: ObserverOfTime <chronobserver@disroot.org> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-28patch 9.0.2136: MSVC errorformat can be improvedv9.0.2136Shawn Hatori
Problem: MSVC errorformat can be improved Solution: parse error type and column number in MSVC errorformat closes: #13587 Signed-off-by: Shawn Hatori <shawn.hatori@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-28patch 9.0.2135: No test for mode() when executing Ex commandsv9.0.2135zeertzjq
Problem: No test for mode() when executing Ex commands Solution: Add some test cases and simplify several other test cases. Also add a few more test cases for ModeChanged. closes: #13588 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-27patch 9.0.2134: ml_get error when scrollingv9.0.2134Christian Brabandt
Problem: ml_get error when scrolling after delete Solution: mark topline to be validated in main_loop if it is larger than current buffers line count reset_lnums() is called after e.g. TextChanged autocommands and it may accidentally cause curwin->w_topline to become invalid, e.g. if the autocommand has deleted some lines. So verify that curwin->w_topline points to a valid line and if not, mark the window to have w_topline recalculated in main_loop() in update_topline() after reset_lnums() returns. fixes: #13568 fixes: #13578 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-27patch 9.0.2133: Cannot detect overstrike mode in Cmdline modev9.0.2133Sam-programs
Problem: Cannot detect overstrike mode in Cmdline mode Solution: Make mode() return "cr" for overstrike closes: #13569 Signed-off-by: Sam-programs <None> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-27patch 9.0.2132: Duplicate Netbeans Error Messagev9.0.2132Christian Brabandt
Problem: Duplicate Netbeans Error Message Solution: Remove duplicate message We have 2 error Messages used for the Netbeans interface: - EXTERN char e_invalid_buffer_identifier_in_close[] INIT(= N_("E648: Invalid buffer identifier in close")); - EXTERN char e_invalid_buffer_identifier_in_close_2[] INIT(= N_("E649: Invalid buffer identifier in close")); Since the error message is exactly the same, get rid of the second message. closes: #13584 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-27patch 9.0.2131: not all nushell files detectedv9.0.2131Daniel Buch Hansen
Problem: not all nushell files detected Solution: use *.nu to detect nushell files closes: #13586 Signed-off-by: Daniel Buch Hansen <boogiewasthere@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-27translation(de): Updated German translations (#13585)Christian Brabandt
Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-26translation(it): updated Italian translationAntonio Giovanni Colombo
Signed-off-by: Antonio Giovanni Colombo <azc100@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-25patch 9.0.2130: some errors with translation Makefilesv9.0.2130Ken Takata
Problem: some errors with translation Makefiles Solution: fix issues Update src/po/ makefiles after 9.0.2127 * Change how to check `%LANGUAGE%`. Check it only when needed. * Add double quotes to where `GETTEXT_PATH` is used. Before 9.0.2127, this worked: `nmake -f Make_mvc.mak GETTEXT_PATH="\"C:\Program Files\Git\usr\bin\""` (which was a bit tricky.) 9.0.2127 broke this and syntax error occurred. This doesn't work either in 9.0.2127: `nmake -f Make_mvc.mak GETTEXT_PATH="C:\Program Files\Git\usr\bin"` With this Commit, this works: `nmake -f Make_mvc.mak GETTEXT_PATH="C:\Program Files\Git\usr\bin"` * Better error report for the `check` target. Show the line number of the error. (Imported from vim-jp/lang-ja.) closes: #13567 Signed-off-by: Ken Takata <kentkt@csc.jp> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-25patch 9.0.2129: [security]: use-after-free in call_dfunc()v9.0.2129mityu
Problem: [security]: use-after-free in call_dfunc() Solution: Refresh dfunc pointer closes: #13571 This Commit fixes a SEGV caused by a use-after-free bug in call_dfunc(). When calling check_ufunc_arg_types() from the call_dfunc() it may cause def functions to be re-compiled and if there are too many def functions, the def_functions array will be re-allocated. Which means, that the dfunc pointer in call_dfunc() now starts pointing to freed memory. So we need to reset the dfunc pointer after calling check_ufunc_arg_types(). Let's also add a test, to ensure we do not regress. Signed-off-by: mityu <mityu.mail@gmail.com> Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-25patch 9.0.2128: runtime(swig): add syntax and filetype pluginsv9.0.2128Julien Marrec
Add syntax and filetype plugins for SWIG (Simplified Wrapper Interface Generator) description files. The default syntax for .i files highlights comments in a reverse color scheme which doesn't look well. This syntax builds on vim's c++ syntax by adding highlighting for common swig directives and user defined directives. For an alternative syntax, see vimscript #1247 (which I found after writing this). closes: #13562 Co-authored-by: Matěj Cepl <mcepl@cepl.eu> Co-authored-by: Julien Marrec <julien.marrec@gmail.com> Signed-off-by: Julien Marrec <julien.marrec@gmail.com> Signed-off-by: Doug Kearns <dougkearns@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-23patch 9.0.2127: translation Makefiles can be improvedv9.0.2127RestorerZ
Problem: translation Makefiles can be improved Solution: Modified and extended po-related Makefiles and related files closes: #13518 Signed-off-by: RestorerZ <restorer@mail2k.ru> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-23patch 9.0.2126: unused assignments when checking 'listchars'v9.0.2126zeertzjq
Problem: Unused assignments when checking the value of 'listchars'. Solution: Loop only once when just checking the value. Add a test to check that this change doesn't cause double-free. closes: #13559 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-23patch 9.0.2125: File info disappears when 'cmdheight' has decreasedv9.0.2125zeertzjq
Problem: File info disappears immediately when 'cmdheight' has just decreased due to switching tabpage and 'shortmess' doesn't contain 'o' or 'O'. Solution: Make sure msg_row isn't smaller than cmdline_row. fixes: #13560 closes: #13561 Signed-off-by: zeertzjq <zeertzjq@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-23patch 9.0.2124: INT overflow detection logic can be simplifiedv9.0.2124Ernie Rael
Problem: INT overflow logic can be simplified Solution: introduce trim_to_int() function closes: #13556 Signed-off-by: Ernie Rael <errael@raelity.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-23patch 9.0.2123: Problem with initializing the length of range() listsv9.0.2123Christian Brabandt
Problem: Problem with initializing the length of range() lists Solution: Set length explicitly when it shouldn't contain any items range() may cause a wrong calculation of list length, which may later then cause a segfault in list_find(). This is usually not a problem, because range_list_materialize() calculates the length, when it materializes the list. In addition, in list_find() when the length of the range was wrongly initialized, it may seem to be valid, so the check for list index out-of-bounds will not be true, because it is called before the list is actually materialized. And so we may eventually try to access a null pointer, causing a segfault. So this patch does 3 things: - In f_range(), when we know that the list should be empty, explicitly set the list->lv_len value to zero. This should happen, when start is larger than end (in case the stride is positive) or end is larger than start when the stride is negative. This should fix the underlying issue properly. However, - as a safety measure, let's check that the requested index is not out of range one more time, after the list has been materialized and return NULL in case it suddenly is. - add a few more tests to verify the behaviour. fixes: #13557 closes: #13563 Co-authored-by: Tim Pope <tpope@github.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-22patch 9.0.2122: [security]: prevent overflow in indentingv9.0.2122Christian Brabandt
Problem: [security]: prevent overflow in indenting Solution: use long long and remove cast to (int) The shiftwidth option values are defined as being long. However, when calculating the actual amount of indent, we cast down to (int), which may cause the shiftwidth value to become negative and later it may even cause Vim to try to allocate a huge amount of memory. We already use long and long long variable types to calculate the indent (and detect possible overflows), so the cast to (int) seems superfluous and can be safely removed. So let's just remove the (int) cast and calculate the indent using longs. Additionally, the 'shiftwidth' option value is also used when determining the actual 'cino' options. There it can again cause another overflow, so make sure it is safe in parse_cino() as well. fixes: #13554 closes: #13555 Signed-off-by: Christian Brabandt <cb@256bit.org>
2023-11-22patch 9.0.2121: [security]: use-after-free in ex_substitutev9.0.2121Christian Brabandt
Problem: [security]: use-after-free in ex_substitute Solution: always allocate memory closes: #13552 A recursive :substitute command could cause a heap-use-after free in Vim (CVE-2023-48706). The whole reproducible test is a bit tricky, I can only reproduce this reliably when no previous substitution command has been used yet (which is the reason, the test needs to run as first one in the test_substitute.vim file) and as a combination of the `:~` command together with a :s command that contains the special substitution atom `~\=` which will make use of a sub-replace special atom and calls a vim script function. There was a comment in the existing :s code, that already makes the `sub` variable allocate memory so that a recursive :s call won't be able to cause any issues here, so this was known as a potential problem already. But for the current test-case that one does not work, because the substitution does not start with `\=` but with `~\=` (and since there does not yet exist a previous substitution atom, Vim will simply increment the `sub` pointer (which then was not allocated dynamically) and later one happily use a sub-replace special expression (which could then free the `sub` var). The following commit fixes this, by making the sub var always using allocated memory, which also means we need to free the pointer whenever we leave the function. Since sub is now always an allocated variable, we also do no longer need the sub_copy variable anymore, since this one was used to indicated when sub pointed to allocated memory (and had therefore to be freed on exit) and when not. Github Security Advisory: https://github.com/vim/vim/security/advisories/GHSA-c8qm-x72m-q53q Signed-off-by: Christian Brabandt <cb@256bit.org>