Mercurial > vim
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) |