]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.2.0212: MS-Windows: version packing may overflow v9.2.0212
authorMao-Yining <mao.yining@outlook.com>
Fri, 20 Mar 2026 22:06:58 +0000 (22:06 +0000)
committerChristian Brabandt <cb@256bit.org>
Fri, 20 Mar 2026 22:06:58 +0000 (22:06 +0000)
Problem:  MS-Windows: version packing may overflow (after v9.2.0206)
Solution: Explicitly clamp the version components using min()
          (Mao-Yining).

The version components (major, minor, build) from RtlGetVersion are now
clamped to their maximum bit widths (8 bits, 8 bits, 15 bits) before
being packed into a 32-bit integer. This prevents overflow when storing
unexpectedly large values.

This fixes a regression introduced in patch 9.2.0206 where the previous
clamping logic was accidentally removed.

The MAKE_VER macro is simplified by removing bit masks, as clamping is
now done at the call site, making the macro clearer and reducing
redundant masking.

closes: #19769

Signed-off-by: Mao-Yining <mao.yining@outlook.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/os_mswin.c
src/os_win32.h
src/version.c

index 6c92428a0adfca6ad4ad640a344c5ddce29990df..be71fac73fe4952f25b148a345995ab565306892 100644 (file)
@@ -127,9 +127,9 @@ win_version_init(void)
 
     osver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
     pRtlGetVersion(&osver);
-    win_version =
-       MAKE_VER(osver.dwMajorVersion, osver.dwMinorVersion,
-                osver.dwBuildNumber);
+    win_version = MAKE_VER(min(osver.dwMajorVersion, 0xFF),
+           min(osver.dwMinorVersion, 0xFF),
+           min(osver.dwBuildNumber, 0xFFFF));
 }
 
 /*
index 6eaa951e7a1fcd025e504d594a758175d0298fef..6f395eede754c5c901b1aa42d81982942f4dcec5 100644 (file)
@@ -227,4 +227,4 @@ Trace(char *pszFormat, ...);
 
 // Windows Version
 #define MAKE_VER(major, minor, build) \
-    ((((major) & 0xFF) << 24) | (((minor) & 0xFF) << 16) | ((build) & 0x7FFF))
+    (((major) << 24) | ((minor) << 16) | (build))
index f6eee54534693005bf0ae9a0ef0a7e5a7fbdf37d..83c07847e0206ddece452129e6e8eb8043ec609c 100644 (file)
@@ -734,6 +734,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    212,
 /**/
     211,
 /**/