Problem: Ubsan reports errors for integer overflow.
Solution: Define macros for minimum and maximum values. Select an
expression based on the value. (Mike Williams)
7a40ea2138
Based on comments it appears that some non-printable characters intended to be
shown as `|x` (0xA0..0xFE) and some as `~x` (0x80..0x9F, 0xFF, excluding
previous). But this never happens because this is being catched by condition `c
>= 0x80` above which makes them be represented as `<A0>`. Since I find this
variant more useful and it additionally is backwards compatible (Vim does the
same thing) I just dropped dead branches.
Problem: When virtcol() gets a column that is not the first byte of a
multi-byte character the result is unpredictable. (Christian
Ludwig)
Solution: Correct the column to the first byte of a multi-byte character.
Change the utf-8 test to new style.
0c0590d982Closes#6269
Problem: Asan detects a memory error when EXITFREE is defined. (Dominique
Pelle)
Solution: In getvcol() check for ml_get_buf() returning an empty string.
Also skip adjusting the scroll position. Set "exiting" in
mch_exit() for all systems.
955f198fc5
Eliminate mb_init():
Set "enc_utf" and "has_mbyte" early. Eliminate "enc_unicode" and "enc_latin1like".
init_chartab() and screenalloc() are already invoked elsewhere
in the initialization process.
The EncodingChanged autocmd cannot be triggered.
At initialization, there is no spellfiles to reload
Closes#5449
A file containing the string "vim" followed by a very large number in a modeline
location will trigger an overflow in getdigits() which is called by
chk_modeline() when trying to parse the version number.
Add getdigits_safe(), which does not assert overflows, but reports them to the
caller.
move `call_shell` to misc1.c
Move some fns to state.c
Move some fns to option.c
Move some fns to memline.c
Move `vim_chdir*` fns to file_search.c
Move some fns to new module, bytes.c
Move some fns to fileio.c
strtoimax is only required to set errno if there is an
underflow/overflow. In those conditions, strtoimax returns
INTMAX_MIN/INTMAX_MAX respectively, so that's the only time we should be
checking the value of errno.
Even in those conditions, errno needs to be set to a known good value
before calling strtoimax to differentiate between "value is actually
INTMAX_MAX/MIN" and "value over/underflows".
Closes#5279
Reasons:
- One does not have to do `s[len] = NUL` to work with these functions if they do
not need to replace the whole string: thus `s` may be const.
- One does not have to save/restore p_cpo to work with them.
- Remove abstract_ui global, now it is always active
- Remove some terminal handling code
- Remove unused functions
- Remove HAVE_TGETENT/TERMINFO/TERMIOS/IOCTL #ifdefs
- Remove tgetent/terminfo from version.c
- Remove curses/terminfo dependencies
- Only start/stop termcap when starting/exiting the program
- msg_use_printf will return true if there are no attached UIs(
messages will be written to stdout)
- Remove `ex_winpos`(implement `:winpos` with `ex_ni`)
Problem : Operands don't affect results (CONSTANT_EXPRESSION_RESULT).
Diagnostic : Harmless issue.
Rationale : n >= LONG_MIN, n being intmax_t, is always true for
architectures where sizeof(intmax_t) == sizeof(long).
Resolution : Add sizes check.