[PING] RE: 8250678: ModuleDescriptor.Version parsing treats empty segments inconsistently

yano-masanori at fujitsu.com yano-masanori at fujitsu.com
Tue Jan 12 07:31:37 UTC 2021


Hello,

Please reply if anyone can be a sponsor.

Regards,
Masanori Yano

> -----Original Message-----
> From: Yano, Masanori 
> Sent: Wednesday, December 23, 2020 5:01 PM
> To: 'core-libs-dev at openjdk.java.net' <core-libs-dev at openjdk.java.net>
> Subject: [PING] RE: 8250678: ModuleDescriptor.Version parsing treats empty
> segments inconsistently
> 
> Hello,
> 
> Please reply if anyone can be a sponsor.
> 
> Regards,
> Masanori Yano
> 
> > -----Original Message-----
> > From: Yano, Masanori
> > Sent: Wednesday, November 4, 2020 6:03 PM
> > To: 'core-libs-dev at openjdk.java.net' <core-libs-dev at openjdk.java.net>
> > Subject: 8250678: ModuleDescriptor.Version parsing treats empty
> > segments inconsistently
> >
> > Hello.
> >
> > I would like to contribute for JDK-8250678.
> >
> > The 'parse' method of ModuleDescriptor.Version class behaves
> > incorrectly when the input string contains consecutive delimiters.
> >
> > The 'parse' method treats strings as three sections, but the parsing
> > method differs between the method for the version sections and the ones for others.
> > In version sections, the 'parse' method takes a single character in a
> > loop and determines whether it is a delimiter. In pre and build
> > sections, the parse method takes two characters in a loop and determines whether
> the second character is the delimiter.
> > Therefore, if the string contains a sequence of delimiters in pre or
> > build section, the 'parse' method treats character at the odd-numbered
> > position as a token and the one at even-numbered as a delimiter
> >
> > A string containing consecutive delimiters is an incorrect version
> > string, but this behavior does not follow the API specification.
> > https://download.java.net/java/early_access/jdk16/docs/api/java.base/j
> > ava/lang/
> > module/ModuleDescriptor.Version.html
> >
> > Therefore, I propose to fix the parsing method of the pre section and
> > the build section in the same way as the version.
> >
> > Please sponsor the following change.
> >
> > diff -r bdc20ee1a68d
> > src/java.base/share/classes/java/lang/module/ModuleDescriptor.java
> > --- a/src/java.base/share/classes/java/lang/module/ModuleDescriptor.java
> > 	Fri Sep 04 23:51:26 2020 -0400
> > +++ b/src/java.base/share/classes/java/lang/module/ModuleDescriptor.ja
> > +++ va
> > 	Wed Oct 28 17:06:47 2020 +0900
> > @@ -1053,13 +1053,6 @@
> >
> >              while (i < n) {
> >                  c = v.charAt(i);
> > -                if (c >= '0' && c <= '9')
> > -                    i = takeNumber(v, i, pre);
> > -                else
> > -                    i = takeString(v, i, pre);
> > -                if (i >= n)
> > -                    break;
> > -                c = v.charAt(i);
> >                  if (c == '.' || c == '-') {
> >                      i++;
> >                      continue;
> > @@ -1068,6 +1061,10 @@
> >                      i++;
> >                      break;
> >                  }
> > +                if (c >= '0' && c <= '9')
> > +                    i = takeNumber(v, i, pre);
> > +                else
> > +                    i = takeString(v, i, pre);
> >              }
> >
> >              if (c == '+' && i >= n)
> > @@ -1075,17 +1072,14 @@
> >
> >              while (i < n) {
> >                  c = v.charAt(i);
> > +                if (c == '.' || c == '-' || c == '+') {
> > +                    i++;
> > +                    continue;
> > +                }
> >                  if (c >= '0' && c <= '9')
> >                      i = takeNumber(v, i, build);
> >                  else
> >                      i = takeString(v, i, build);
> > -                if (i >= n)
> > -                    break;
> > -                c = v.charAt(i);
> > -                if (c == '.' || c == '-' || c == '+') {
> > -                    i++;
> > -                    continue;
> > -                }
> >              }
> >
> >              this.version = v;
> > diff -r bdc20ee1a68d test/jdk/java/lang/module/VersionTest.java
> > --- a/test/jdk/java/lang/module/VersionTest.java	Fri Sep 04 23:51:26 2020
> > -0400
> > +++ b/test/jdk/java/lang/module/VersionTest.java	Wed Oct 28 17:06:47
> > 2020 +0900
> > @@ -148,6 +148,8 @@
> >              { "1",             "1.0.0" },
> >              { "1.0",           "1.0.0" },
> >              { "1.0-beta",      "1.0.0-beta" },
> > +            { "1.0-1.1",       "1.0-1..1" },
> > +            { "1.0-1+1",       "1.0-1.+1" },
> >
> >          };
> >      }
> >
> > Regards,
> > Masanori Yano


More information about the core-libs-dev mailing list