Mercurial > vim
view src/INSTALLmac.txt @ 33815:08f9e1eac4cf v9.0.2123
patch 9.0.2123: Problem with initializing the length of range() lists
Commit: https://github.com/vim/vim/commit/df63da98d8dc284b1c76cfe1b17fa0acbd6094d8
Author: Christian Brabandt <cb@256bit.org>
Date: Thu Nov 23 20:14:28 2023 +0100
patch 9.0.2123: Problem with initializing the length of range() lists
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>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Thu, 23 Nov 2023 20:30:07 +0100 |
parents | 695b50472e85 |
children |
line wrap: on
line source
INSTALLmac.txt - Installation of Vim on Apple MacOS This file contains instructions for compiling Vim. If you already have an executable version of Vim, you don't need this. MacOS Classic is no longer supported. If you really want it use Vim 6.4. Only '/' is supported as path separator. ---------------------------------------------------------------------------- Prerequisites ---------------------------------------------------------------------------- Make sure you've installed Xcode and CommandLineTools. You can download Xcode from the Mac App Store, for free. To check for CommandLineTools open a terminal and do: $ make --version If not installed yet a window pops up instructing you to install the developer tools. If you don't have the source yet, best is to use git (which you need to install first), see http://www.vim.org/git.php Or you can download and unpack the Unix tar archive, see http://www.vim.org/download.php ---------------------------------------------------------------------------- Build and install the terminal version. ---------------------------------------------------------------------------- You can compile vim with the standard Unix routine: cd vim/src make make test sudo make install If you get an error "glibtool: command not found" search on stackoverflow for mac-osx-where-can-i-download-glibtool. With Homebrew, run: brew install libtool To build libtool from source: 1. Download the source code from https://www.gnu.org/software/libtool/. 2. Run these commands from the root of the source code directory: ./configure --program-prefix=g make sudo make install ---------------------------------------------------------------------------- Build and install the GUI version with X-Windows ---------------------------------------------------------------------------- NOTE: this probably no longer works, since Athena support has been removed. First, install XQuartz, which you can download from https://www.xquartz.org. To tell configure to use a GUI you can edit the Makefile and uncomment these two lines (remove the # at the start of the line): CONF_OPT_GUI = --enable-gui=athena CONF_OPT_DARWIN = --disable-darwin Do "make distclean" to start with a clean slate. Then build as with the terminal version above. Instead of "athena" you can try "gtk2" but you probably need to install GTK first. ---------------------------------------------------------------------------- Notes ---------------------------------------------------------------------------- Mac-specific configure options are explained in the Makefile: --disable-darwin --with-mac-arch