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);
}
}
}
|