comparison src/evalfunc.c @ 29544:80b4c435450a v9.0.0113

patch 9.0.0113: has() is not strict about parsing the patch version Commit: https://github.com/vim/vim/commit/d90f91fe3075bb51668ed926182b2163da9df001 Author: K.Takata <kentkt@csc.jp> Date: Sat Jul 30 15:43:59 2022 +0100 patch 9.0.0113: has() is not strict about parsing the patch version Problem: has() is not strict about parsing the patch version. Solution: Check the version more strictly. (Ken Takata, closes https://github.com/vim/vim/issues/10752)
author Bram Moolenaar <Bram@vim.org>
date Sat, 30 Jul 2022 16:45:05 +0200
parents 9b8ab82e3b0b
children 691c8adef6f3
comparison
equal deleted inserted replaced
29543:b679513dc17c 29544:80b4c435450a
6456 if (STRNICMP(name, "patch", 5) == 0) 6456 if (STRNICMP(name, "patch", 5) == 0)
6457 { 6457 {
6458 x = TRUE; 6458 x = TRUE;
6459 if (name[5] == '-' 6459 if (name[5] == '-'
6460 && STRLEN(name) >= 11 6460 && STRLEN(name) >= 11
6461 && vim_isdigit(name[6]) 6461 && (name[6] >= '1' && name[6] <= '9'))
6462 && vim_isdigit(name[8])
6463 && vim_isdigit(name[10]))
6464 { 6462 {
6465 int major = atoi((char *)name + 6); 6463 char *end;
6466 int minor = atoi((char *)name + 8); 6464 int major, minor;
6467 6465
6468 // Expect "patch-9.9.01234". 6466 // This works for patch-8.1.2, patch-9.0.3, patch-10.0.4, etc.
6469 n = (major < VIM_VERSION_MAJOR 6467 // Not for patch-9.10.5.
6470 || (major == VIM_VERSION_MAJOR 6468 major = (int)strtoul((char *)name + 6, &end, 10);
6471 && (minor < VIM_VERSION_MINOR 6469 if (*end == '.' && vim_isdigit(end[1])
6472 || (minor == VIM_VERSION_MINOR 6470 && end[2] == '.' && vim_isdigit(end[3]))
6473 && has_patch(atoi((char *)name + 10)))))); 6471 {
6472 minor = atoi(end + 1);
6473
6474 // Expect "patch-9.9.01234".
6475 n = (major < VIM_VERSION_MAJOR
6476 || (major == VIM_VERSION_MAJOR
6477 && (minor < VIM_VERSION_MINOR
6478 || (minor == VIM_VERSION_MINOR
6479 && has_patch(atoi(end + 3))))));
6480 }
6474 } 6481 }
6475 else if (isdigit(name[5])) 6482 else if (isdigit(name[5]))
6476 n = has_patch(atoi((char *)name + 5)); 6483 n = has_patch(atoi((char *)name + 5));
6477 } 6484 }
6478 else if (STRICMP(name, "vim_starting") == 0) 6485 else if (STRICMP(name, "vim_starting") == 0)