mirror of
https://github.com/neovim/neovim.git
synced 2025-10-17 23:31:51 +00:00
mark: Fix out-of-bounds array access when iterating over global marks
This commit is contained in:
@@ -1203,12 +1203,14 @@ const void *mark_global_iter(const void *const iter, char *const name,
|
|||||||
const xfmark_T *iter_mark = (iter == NULL
|
const xfmark_T *iter_mark = (iter == NULL
|
||||||
? &(namedfm[0])
|
? &(namedfm[0])
|
||||||
: (const xfmark_T *const) iter);
|
: (const xfmark_T *const) iter);
|
||||||
while (!iter_mark->fmark.mark.lnum
|
while ((size_t) (iter_mark - &(namedfm[0])) < ARRAY_SIZE(namedfm)
|
||||||
&& (size_t) (iter_mark - &(namedfm[0])) < ARRAY_SIZE(namedfm)) {
|
&& !iter_mark->fmark.mark.lnum) {
|
||||||
iter_mark++;
|
iter_mark++;
|
||||||
}
|
}
|
||||||
if (!iter_mark->fmark.mark.lnum) {
|
if ((size_t) (iter_mark - &(namedfm[0])) == ARRAY_SIZE(namedfm)
|
||||||
*fm = (xfmark_T) {.fmark = {.mark = {.lnum = 0}}};
|
|| !iter_mark->fmark.mark.lnum) {
|
||||||
|
*fm = (xfmark_T) { .fmark = { .mark = { .lnum = 0 } } };
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
size_t iter_off = (size_t) (iter_mark - &(namedfm[0]));
|
size_t iter_off = (size_t) (iter_mark - &(namedfm[0]));
|
||||||
*name = (char) (iter_off < NMARKS
|
*name = (char) (iter_off < NMARKS
|
||||||
|
Reference in New Issue
Block a user