diff --git a/doc/pacman.8.txt b/doc/pacman.8.txt index 2a640f8f..59853812 100644 --- a/doc/pacman.8.txt +++ b/doc/pacman.8.txt @@ -86,7 +86,7 @@ You can also use `pacman -Su` to upgrade all packages that are out of date. See to determine which packages need upgrading. This behavior operates as follows: Alphanumeric: - 1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0 + 1.0a < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0 < 1.0.a < 1.0.1 Numeric: 1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0 + diff --git a/doc/vercmp.8.txt b/doc/vercmp.8.txt index a3bc5611..4b0490fa 100644 --- a/doc/vercmp.8.txt +++ b/doc/vercmp.8.txt @@ -26,7 +26,7 @@ numbers. It outputs values as follows: Version comparsion operates as follows: Alphanumeric: - 1.0a < 1.0alpha < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0 + 1.0a < 1.0b < 1.0beta < 1.0p < 1.0pre < 1.0rc < 1.0 < 1.0.a < 1.0.1 Numeric: 1 < 1.0 < 1.1 < 1.1.1 < 1.2 < 2.0 < 3.0.0 diff --git a/lib/libalpm/version.c b/lib/libalpm/version.c index 73d6a660..6b65a413 100644 --- a/lib/libalpm/version.c +++ b/lib/libalpm/version.c @@ -98,8 +98,8 @@ static int rpmvercmp(const char *a, const char *b) str1 = strdup(a); str2 = strdup(b); - one = str1; - two = str2; + one = ptr1 = str1; + two = ptr2 = str2; /* loop through each version segment of str1 and str2 and compare them */ while (*one && *two) { @@ -109,6 +109,11 @@ static int rpmvercmp(const char *a, const char *b) /* If we ran to the end of either, we are finished with the loop */ if (!(*one && *two)) break; + /* If the separator lengths were different, we are also finished */ + if ((one - ptr1) != (two - ptr2)) { + return (one - ptr1) < (two - ptr2) ? -1 : 1; + } + ptr1 = one; ptr2 = two; diff --git a/test/util/vercmptest.sh b/test/util/vercmptest.sh index 54ede04b..6b4bcbc2 100755 --- a/test/util/vercmptest.sh +++ b/test/util/vercmptest.sh @@ -118,6 +118,12 @@ runtest 1.5.1 1.5.b 1 runtest 1.5.b-1 1.5.b 0 runtest 1.5-1 1.5.b -1 +# same/similar content, differing separators +runtest 2.0 2_0 0 +runtest 2.0_a 2_0.a 0 +runtest 2.0a 2.0.a -1 +runtest 2___a 2_a 1 + # epoch included version comparisons runtest 0:1.0 0:1.0 0 runtest 0:1.0 0:1.1 -1