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)
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 9b09caa..ef66aed 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -6458,19 +6458,26 @@
 	    x = TRUE;
 	    if (name[5] == '-'
 		    && STRLEN(name) >= 11
-		    && vim_isdigit(name[6])
-		    && vim_isdigit(name[8])
-		    && vim_isdigit(name[10]))
+		    && (name[6] >= '1' && name[6] <= '9'))
 	    {
-		int major = atoi((char *)name + 6);
-		int minor = atoi((char *)name + 8);
+		char	*end;
+		int	major, minor;
 
-		// Expect "patch-9.9.01234".
-		n = (major < VIM_VERSION_MAJOR
-		     || (major == VIM_VERSION_MAJOR
-			 && (minor < VIM_VERSION_MINOR
-			     || (minor == VIM_VERSION_MINOR
-				 && has_patch(atoi((char *)name + 10))))));
+		// 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".
+		    n = (major < VIM_VERSION_MAJOR
+			 || (major == VIM_VERSION_MAJOR
+			     && (minor < VIM_VERSION_MINOR
+				 || (minor == VIM_VERSION_MINOR
+				     && has_patch(atoi(end + 3))))));
+		}
 	    }
 	    else if (isdigit(name[5]))
 		n = has_patch(atoi((char *)name + 5));