mirror of
				https://github.com/vim/vim.git
				synced 2025-10-30 09:47:20 -04:00 
			
		
		
		
	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 #10752)
This commit is contained in:
		| @@ -6458,19 +6458,26 @@ f_has(typval_T *argvars, typval_T *rettv) | |||||||
| 	    x = TRUE; | 	    x = TRUE; | ||||||
| 	    if (name[5] == '-' | 	    if (name[5] == '-' | ||||||
| 		    && STRLEN(name) >= 11 | 		    && STRLEN(name) >= 11 | ||||||
| 		    && vim_isdigit(name[6]) | 		    && (name[6] >= '1' && name[6] <= '9')) | ||||||
| 		    && vim_isdigit(name[8]) |  | ||||||
| 		    && vim_isdigit(name[10])) |  | ||||||
| 	    { | 	    { | ||||||
| 		int major = atoi((char *)name + 6); | 		char	*end; | ||||||
| 		int minor = atoi((char *)name + 8); | 		int	major, minor; | ||||||
|  |  | ||||||
|  | 		// This works for patch-8.1.2, patch-9.0.3, patch-10.0.4, etc. | ||||||
|  | 		// Not for patch-9.10.5. | ||||||
|  | 		major = (int)strtoul((char *)name + 6, &end, 10); | ||||||
|  | 		if (*end == '.' && vim_isdigit(end[1]) | ||||||
|  | 			&& end[2] == '.' && vim_isdigit(end[3])) | ||||||
|  | 		{ | ||||||
|  | 		    minor = atoi(end + 1); | ||||||
|  |  | ||||||
| 		    // Expect "patch-9.9.01234". | 		    // Expect "patch-9.9.01234". | ||||||
| 		    n = (major < VIM_VERSION_MAJOR | 		    n = (major < VIM_VERSION_MAJOR | ||||||
| 			 || (major == VIM_VERSION_MAJOR | 			 || (major == VIM_VERSION_MAJOR | ||||||
| 			     && (minor < VIM_VERSION_MINOR | 			     && (minor < VIM_VERSION_MINOR | ||||||
| 				 || (minor == VIM_VERSION_MINOR | 				 || (minor == VIM_VERSION_MINOR | ||||||
| 				 && has_patch(atoi((char *)name + 10)))))); | 				     && has_patch(atoi(end + 3)))))); | ||||||
|  | 		} | ||||||
| 	    } | 	    } | ||||||
| 	    else if (isdigit(name[5])) | 	    else if (isdigit(name[5])) | ||||||
| 		n = has_patch(atoi((char *)name + 5)); | 		n = has_patch(atoi((char *)name + 5)); | ||||||
|   | |||||||
| @@ -35,13 +35,22 @@ func Test_version() | |||||||
|   call assert_true(has('patch-6.9.999')) |   call assert_true(has('patch-6.9.999')) | ||||||
|   call assert_true(has('patch-7.1.999')) |   call assert_true(has('patch-7.1.999')) | ||||||
|   call assert_true(has('patch-7.4.123')) |   call assert_true(has('patch-7.4.123')) | ||||||
|  |   call assert_true(has('patch-7.4.123 ')) " Traling space can be allowed. | ||||||
|  |  | ||||||
|   call assert_false(has('patch-7')) |   call assert_false(has('patch-7')) | ||||||
|   call assert_false(has('patch-7.4')) |   call assert_false(has('patch-7.4')) | ||||||
|   call assert_false(has('patch-7.4.')) |   call assert_false(has('patch-7.4.')) | ||||||
|   call assert_false(has('patch-9.1.0')) |   call assert_false(has('patch-9.1.0')) | ||||||
|   call assert_false(has('patch-9.9.1')) |   call assert_false(has('patch-9.9.1')) | ||||||
|  |  | ||||||
|   call assert_false(has('patch-abc')) |   call assert_false(has('patch-abc')) | ||||||
|  |   call assert_false(has('patchabc')) | ||||||
|  |  | ||||||
|  |   call assert_false(has('patch-8x001')) | ||||||
|  |   call assert_false(has('patch-9X0X0')) | ||||||
|  |   call assert_false(has('patch-9-0-0')) | ||||||
|  |   call assert_false(has('patch-09.0.0')) | ||||||
|  |   call assert_false(has('patch-9.00.0')) | ||||||
| endfunc | endfunc | ||||||
|  |  | ||||||
| func Test_op_ternary() | func Test_op_ternary() | ||||||
|   | |||||||
| @@ -735,6 +735,8 @@ static char *(features[]) = | |||||||
|  |  | ||||||
| static int included_patches[] = | static int included_patches[] = | ||||||
| {   /* Add new patch number below this line */ | {   /* Add new patch number below this line */ | ||||||
|  | /**/ | ||||||
|  |     113, | ||||||
| /**/ | /**/ | ||||||
|     112, |     112, | ||||||
| /**/ | /**/ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user