vim: Fix of 10 CVEs
- CVE-2022-2182: in do_one_cmd(), after ";" sets curwin->w_cursor.lnum to ea.line2, call check_cursor() instead of check_cursor_lnum() so the column is validated too, and fall back to check_cursor_col() when ea.line2 is zero, preventing read past end-of-line on ":0;'{". - CVE-2022-2206: in check_shellsize(), clamp cmdline_row and msg_row to Rows - 1 after limit_screen_size() so a shrinking terminal cannot leave those values referencing freed screen rows. - CVE-2022-2257: in str2special(), when the byte is single-byte set *sp = str + (*str == NUL ? 0 : 1) so the caller cannot walk past the terminating NUL when a menu item ends in a modifier-only key. - CVE-2022-2849: in latin_ptr2len()/dbcs_ptr2len(), return 0 when *p == NUL so loops that advance by mb_ptr2len() cannot walk past the NUL terminator (matches the contract documented in src/globals.h). - CVE-2022-3352: in spell_load_lang(), snapshot curbuf before the SpellFileMissing autocommand and break out of the retry loop if the autocommand deleted/replaced curbuf, preventing a use-after-free on the cached "lang"/"curbuf" pointer. Uses sl.sl_lang (stack copy) for the apply_autocmds pattern to survive buffer deletion. - CVE-2023-2609: in get_register() (ops.c), treat y_current->y_array == NULL the same as y_size == 0 and set reg->y_array to NULL, so an invalid/NULL register contents cannot be walked as a valid string vector. - CVE-2021-3778: in find_match_text() (regexp_nfa.c), advance by utf_ptr2len(regline + col + len2) unde
- Products
- vim-X11, vim-common, vim-enhanced, vim-filesystem, vim-minimal
- Affected versions
- Not specified
- Fixed versions
- 2:7.4.629-8.0.1.el7_9.tuxcare.els9
- CVEs
- CVE-2021-3778, CVE-2022-1616, CVE-2022-1897, CVE-2022-2125, CVE-2022-2182, CVE-2022-2206, CVE-2022-2257, CVE-2022-2849, CVE-2022-3352, CVE-2023-2609
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 31 Oct 2026, 14:07 UTC · Revision 1
Source evidence
- CVE-2022-2182: in do_one_cmd(), after ";" sets curwin->w_cursor.lnum to ea.line2, call check_cursor() instead of check_cursor_lnum() so the column is validated too, and fall back to check_cursor_col() when ea.line2 is zero, preventing read past end-of-line on ":0;'{". - CVE-2022-2206: in check_shellsize(), clamp cmdline_row and msg_row to Rows - 1 after limit_screen_size() so a shrinking terminal cannot leave those values referencing freed screen rows. - CVE-2022-2257: in str2special(), when the byte is single-byte set *sp = str + (*str == NUL ? 0 : 1) so the caller cannot walk past the terminating NUL when a menu item ends in a modifier-only key. - CVE-2022-2849: in latin_ptr2len()/dbcs_ptr2len(), return 0 when *p == NUL so loops that advance by mb_ptr2len() cannot walk past the NUL terminator (matches the contract documented in src/globals.h). - CVE-2022-3352: in spell_load_lang(), snapshot curbuf before the SpellFileMissing autocommand and break out of the retry loop if the autocommand deleted/replaced curbuf, preventing a use-after-free on the cached "lang"/"curbuf" pointer. Uses sl.sl_lang (stack copy) for the apply_autocmds pattern to survive buffer deletion. - CVE-2023-2609: in get_register() (ops.c), treat y_current->y_array == NULL the same as y_size == 0 and set reg->y_array to NULL, so an invalid/NULL register contents cannot be walked as a valid string vector. - CVE-2021-3778: in find_match_text() (regexp_nfa.c), advance by utf_ptr2len(regline + col + len2) unde
osv:CLSA-2026-1777540266
vim-X11
Fixed versions: 2:7.4.629-8.0.1.el7_9.tuxcare.els9
vim-common
Fixed versions: 2:7.4.629-8.0.1.el7_9.tuxcare.els9
vim-enhanced
Fixed versions: 2:7.4.629-8.0.1.el7_9.tuxcare.els9
vim-filesystem
Fixed versions: 2:7.4.629-8.0.1.el7_9.tuxcare.els9
vim-minimal
Fixed versions: 2:7.4.629-8.0.1.el7_9.tuxcare.els9
Complete source record
{
"id": "ccd0c0fa2fcc2079652111dfc3c2071b460d1bb08958623bc829c9f1df9c9597",
"url": "https://osv.dev/vulnerability/CLSA-2026-1777540266",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "vim: Fix of 10 CVEs",
"summary": "- CVE-2022-2182: in do_one_cmd(), after \";\" sets curwin->w_cursor.lnum to ea.line2, call check_cursor() instead of check_cursor_lnum() so the column is validated too, and fall back to check_cursor_col() when ea.line2 is zero, preventing read past end-of-line on \":0;'{\". - CVE-2022-2206: in check_shellsize(), clamp cmdline_row and msg_row to Rows - 1 after limit_screen_size() so a shrinking terminal cannot leave those values referencing freed screen rows. - CVE-2022-2257: in str2special(), when the byte is single-byte set *sp = str + (*str == NUL ? 0 : 1) so the caller cannot walk past the terminating NUL when a menu item ends in a modifier-only key. - CVE-2022-2849: in latin_ptr2len()/dbcs_ptr2len(), return 0 when *p == NUL so loops that advance by mb_ptr2len() cannot walk past the NUL terminator (matches the contract documented in src/globals.h). - CVE-2022-3352: in spell_load_lang(), snapshot curbuf before the SpellFileMissing autocommand and break out of the retry loop if the autocommand deleted/replaced curbuf, preventing a use-after-free on the cached \"lang\"/\"curbuf\" pointer. Uses sl.sl_lang (stack copy) for the apply_autocmds pattern to survive buffer deletion. - CVE-2023-2609: in get_register() (ops.c), treat y_current->y_array == NULL the same as y_size == 0 and set reg->y_array to NULL, so an invalid/NULL register contents cannot be walked as a valid string vector. - CVE-2021-3778: in find_match_text() (regexp_nfa.c), advance by utf_ptr2len(regline + col + len2) unde",
"evidence": "osv:CLSA-2026-1777540266",
"products": [
{
"name": {
"value": "vim-X11",
"evidence": "/affected/0/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2:7.4.629-8.0.1.el7_9.tuxcare.els9",
"evidence": "/affected/0/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "vim-common",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2:7.4.629-8.0.1.el7_9.tuxcare.els9",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "vim-enhanced",
"evidence": "/affected/2/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2:7.4.629-8.0.1.el7_9.tuxcare.els9",
"evidence": "/affected/2/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "vim-filesystem",
"evidence": "/affected/3/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2:7.4.629-8.0.1.el7_9.tuxcare.els9",
"evidence": "/affected/3/ranges"
}
],
"affected_versions": []
},
{
"name": {
"value": "vim-minimal",
"evidence": "/affected/4/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "2:7.4.629-8.0.1.el7_9.tuxcare.els9",
"evidence": "/affected/4/ranges"
}
],
"affected_versions": []
}
],
"severity": "unknown",
"structured": {
"id": "CLSA-2026-1777540266",
"aliases": [
"CLSA-2026-1777540266"
],
"affected": [
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2:7.4.629-8.0.1.el7_9.tuxcare.els9"
}
]
}
],
"package": {
"name": "vim-X11",
"purl": "pkg:rpm/tuxcare/vim-X11?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1777540266.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2:7.4.629-8.0.1.el7_9.tuxcare.els9"
}
]
}
],
"package": {
"name": "vim-common",
"purl": "pkg:rpm/tuxcare/vim-common?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1777540266.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2:7.4.629-8.0.1.el7_9.tuxcare.els9"
}
]
}
],
"package": {
"name": "vim-enhanced",
"purl": "pkg:rpm/tuxcare/vim-enhanced?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1777540266.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2:7.4.629-8.0.1.el7_9.tuxcare.els9"
}
]
}
],
"package": {
"name": "vim-filesystem",
"purl": "pkg:rpm/tuxcare/vim-filesystem?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1777540266.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "0"
},
{
"fixed": "2:7.4.629-8.0.1.el7_9.tuxcare.els9"
}
]
}
],
"package": {
"name": "vim-minimal",
"purl": "pkg:rpm/tuxcare/vim-minimal?distro=oraclelinux-7",
"ecosystem": "TuxCare:OracleLinux:7"
},
"database_specific": {
"source": "https://github.com/cloudlinux/tuxcare-osv/tree/main/data/els_os/oraclelinux7els/CLSA-2026-1777540266.json"
}
}
],
"modified": "2026-10-21T10:48:13.129554047Z",
"provider": "osv",
"upstream": [
"CVE-2021-3778",
"CVE-2022-1616",
"CVE-2022-1897",
"CVE-2022-2125",
"CVE-2022-2182",
"CVE-2022-2206",
"CVE-2022-2257",
"CVE-2022-2849",
"CVE-2022-3352",
"CVE-2023-2609"
],
"references": [
"https://errata.tuxcare.com/els_os/oraclelinux7els/CLSA-2026-1777540266.html"
]
},
"related_cves": [
{
"value": "CVE-2021-3778",
"evidence": "/upstream"
},
{
"value": "CVE-2022-1616",
"evidence": "/upstream"
},
{
"value": "CVE-2022-1897",
"evidence": "/upstream"
},
{
"value": "CVE-2022-2125",
"evidence": "/upstream"
},
{
"value": "CVE-2022-2182",
"evidence": "/upstream"
},
{
"value": "CVE-2022-2206",
"evidence": "/upstream"
},
{
"value": "CVE-2022-2257",
"evidence": "/upstream"
},
{
"value": "CVE-2022-2849",
"evidence": "/upstream"
},
{
"value": "CVE-2022-3352",
"evidence": "/upstream"
},
{
"value": "CVE-2023-2609",
"evidence": "/upstream"
}
],
"security_relevant": true,
"severity_evidence": null
},
"source_id": "core-osv",
"document_id": 392883,
"published_at": "2026-04-30T09:11:11+00:00"
}