Details
-
Bug
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
3.8.7, 3.9.0
-
None
Description
The canonicalization logic for versions is incorrect.
Using the method ComparableVersion#getCanonical as in new ComparableVersion(input).getCanonical(), the following results can be observed:
Input | 3.8.6 Output | 3.8.6 OK? | 3.9.0 Output | 3.9.0 OK? |
---|---|---|---|---|
1 | 1 | yes | 1 | yes |
0.1 | 0.1 | yes | 0.1 | yes |
0-1 | 1 | no | 1 | no |
1.x | 1.x | yes | 1-x | maybe* |
1-x | 1-x | yes | 1-x | yes |
0.x | 0.x | yes | x | no |
0-x | x | no | x | no |
x | x | yes | x | yes |
0.rc | 0.rc | yes | rc | no |
The "OK?" columns indicate whether parsing the canonical version string will yield a ComparableVersion instance that is equal to one constructed from the original input, i.e. it's internally consistent.
The "maybe*" item indicates that starting with 3.9.0, version `1.x` is now considered to be equal to `1-x`. I'm not sure if this is a bug or not, or was intentional or not, but it is definitely a change.
These canonicalizations seem to have gotten less consistent in the move to 3.9.0.