# HG changeset patch # User bchristi # Date 1516234515 28800 # Node ID fb978155215deac8284cbedd01e716f848163214 # Parent 050352ed64d579b3b6cb207a118b4889a6a4f37f 8194879: Runtime.Version parses string which does not conform to spec without throwing IAE Reviewed-by: alanb, iris, rriggs diff -r 050352ed64d5 -r fb978155215d src/java.base/share/classes/java/lang/Runtime.java --- a/src/java.base/share/classes/java/lang/Runtime.java Wed Jan 17 15:17:50 2018 -0800 +++ b/src/java.base/share/classes/java/lang/Runtime.java Wed Jan 17 16:15:15 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 1995, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1995, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1099,16 +1099,23 @@ m.group(VersionPattern.OPT_GROUP)); // empty '+' - if ((m.group(VersionPattern.PLUS_GROUP) != null) - && !build.isPresent()) { - if (optional.isPresent()) { - if (pre.isPresent()) - throw new IllegalArgumentException("'+' found with" - + " pre-release and optional components:'" + s - + "'"); + if (!build.isPresent()) { + if (m.group(VersionPattern.PLUS_GROUP) != null) { + if (optional.isPresent()) { + if (pre.isPresent()) + throw new IllegalArgumentException("'+' found with" + + " pre-release and optional components:'" + s + + "'"); + } else { + throw new IllegalArgumentException("'+' found with neither" + + " build or optional components: '" + s + "'"); + } } else { - throw new IllegalArgumentException("'+' found with neither" - + " build or optional components: '" + s + "'"); + if (optional.isPresent() && !pre.isPresent()) { + throw new IllegalArgumentException("optional component" + + " must be preceeded by a pre-release component" + + " or '+': '" + s + "'"); + } } } return new Version(List.of(version), pre, build, optional); diff -r 050352ed64d5 -r fb978155215d test/jdk/java/lang/Runtime/Version/Basic.java --- a/test/jdk/java/lang/Runtime/Version/Basic.java Wed Jan 17 15:17:50 2018 -0800 +++ b/test/jdk/java/lang/Runtime/Version/Basic.java Wed Jan 17 16:15:15 2018 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2015, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -24,7 +24,7 @@ /* * @test * @summary Unit test for java.lang.Runtime.Version - * @bug 8072379 8144062 8161236 8160956 + * @bug 8072379 8144062 8161236 8160956 8194879 */ import java.lang.Runtime.Version; @@ -115,6 +115,7 @@ tryCatch("9-pre+-opt", IAE); tryCatch("1.4142+-", IAE); tryCatch("2.9979+-%", IAE); + tryCatch("10--ea", IAE); //// Test for Runtime.version() testVersion();