php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #80758
Patch patch revision 2021-02-16 19:14 UTC by brad dot jorsch at automattic dot com

Patch patch for *General Issues Bug #80758

Patch version 2021-02-16 19:14 UTC

Return to Bug #80758 | Download this patch
Patch Revisions:

Developer: brad.jorsch@automattic.com

diff --git a/ext/standard/tests/versioning/version_compare.phpt b/ext/standard/tests/versioning/version_compare.phpt
index 07550dd410..b157ac2cc3 100644
--- a/ext/standard/tests/versioning/version_compare.phpt
+++ b/ext/standard/tests/versioning/version_compare.phpt
@@ -17,6 +17,10 @@ test("1", "2");
 test("10", "2");
 test("1.0", "1.1");
 test("1.2", "1.0.1");
+test("1.0.*", "1.0.*");
+test("1.0", "1.0.*");
+test("1.0 alpha", "1.0 beta");
+test("1.0.apple", "1.0.coconut");
 foreach ($special_forms as $f1) {
     foreach ($special_forms as $f2) {
     test("1.0$f1", "1.0$f2");
@@ -57,6 +61,10 @@ TESTING COMPARE
 10 > 2
 1.0 < 1.1
 1.2 > 1.0.1
+1.0.* = 1.0.*
+1.0 > 1.0.*
+1.0 alpha < 1.0 beta
+1.0.apple = 1.0.coconut
 1.0-dev = 1.0-dev
 1.0-dev < 1.0a1
 1.0-dev < 1.0b1
diff --git a/ext/standard/versioning.c b/ext/standard/versioning.c
index f4f20c9850..285e86d94e 100644
--- a/ext/standard/versioning.c
+++ b/ext/standard/versioning.c
@@ -58,7 +58,9 @@ php_canonicalize_version(const char *version)
 			if (lq != '.') {
 				*q++ = '.';
 			}
-			*q++ = *p;
+			if (isalnum(*p)) {
+				*q++ = *p;
+			}
 		} else if (!isalnum(*p)) {
 			if (lq != '.') {
 				*q++ = '.';
@@ -100,13 +102,13 @@ compare_special_version_forms(char *form1, char *form2)
 	special_forms_t *pp;
 
 	for (pp = special_forms; pp && pp->name; pp++) {
-		if (strncmp(form1, pp->name, strlen(pp->name)) == 0) {
+		if (strcmp(form1, pp->name) == 0) {
 			found1 = pp->order;
 			break;
 		}
 	}
 	for (pp = special_forms; pp && pp->name; pp++) {
-		if (strncmp(form2, pp->name, strlen(pp->name)) == 0) {
+		if (strcmp(form2, pp->name) == 0) {
 			found2 = pp->order;
 			break;
 		}
@@ -145,7 +147,7 @@ php_version_compare(const char *orig_ver1, const char *orig_ver2)
 	}
 	p1 = n1 = ver1;
 	p2 = n2 = ver2;
-	while (*p1 && *p2 && n1 && n2) {
+	while (n1 && n2) {
 		if ((n1 = strchr(p1, '.')) != NULL) {
 			*n1 = '\0';
 		}
@@ -163,9 +165,9 @@ php_version_compare(const char *orig_ver1, const char *orig_ver2)
 		} else {
 			/* mix of names and numbers */
 			if (isdigit(*p1)) {
-				compare = compare_special_version_forms("#N#", p2);
+				compare = compare_special_version_forms("#", p2);
 			} else {
-				compare = compare_special_version_forms(p1, "#N#");
+				compare = compare_special_version_forms(p1, "#");
 			}
 		}
 		if (compare != 0) {
@@ -183,13 +185,13 @@ php_version_compare(const char *orig_ver1, const char *orig_ver2)
 			if (isdigit(*p1)) {
 				compare = 1;
 			} else {
-				compare = php_version_compare(p1, "#N#");
+				compare = php_version_compare(p1, "#");
 			}
 		} else if (n2 != NULL) {
 			if (isdigit(*p2)) {
 				compare = -1;
 			} else {
-				compare = php_version_compare("#N#", p2);
+				compare = php_version_compare("#", p2);
 			}
 		}
 	}
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Apr 25 11:01:30 2024 UTC