refactor: use flexible arrays instead of the length-of-one trick (#22072)

The "length-of-one" trick, where the last element of a struct is an
array of size 1, but extra size is allocated when calling malloc where
it uses more than 1 element in the array, cause problems with some
compilers. Some compilers set _FORTIFY_SOURCE=2 by default which
incorrectly considers it as an overflow. More information:
https://github.com/neovim/neovim/issues/223#issuecomment-1413828554

Using flexible array members allows us to to properly convey to the
compiler that its size may be larger than 1. This also enables us to
remove lengthy workarounds that are unreliable, as they depend on
CMAKE_BUILD_TYPE which isn't defined for multi-config generators.

Closes: https://github.com/neovim/neovim/issues/223
This commit is contained in:
dundargoc
2023-02-02 23:56:25 +01:00
committed by GitHub
parent 0ea4156464
commit ebd2372f92
11 changed files with 11 additions and 53 deletions

View File

@@ -64,7 +64,7 @@ struct msgchunk_S {
char sb_eol; // true when line ends after this text
int sb_msg_col; // column in which text starts
int sb_attr; // text attributes
char sb_text[1]; // text to be displayed, actually longer
char sb_text[]; // text to be displayed
};
// Magic chars used in confirm dialog strings