diff --git a/core/src/main/java/org/elasticsearch/plugins/PluginInfo.java b/core/src/main/java/org/elasticsearch/plugins/PluginInfo.java index 20b5fe28fff..c305893fa56 100644 --- a/core/src/main/java/org/elasticsearch/plugins/PluginInfo.java +++ b/core/src/main/java/org/elasticsearch/plugins/PluginInfo.java @@ -120,6 +120,7 @@ public class PluginInfo implements Streamable, ToXContent { if (javaVersionString == null) { throw new IllegalArgumentException("Property [java.version] is missing for jvm plugin [" + name + "]"); } + JarHell.checkVersionFormat(javaVersionString); JarHell.checkJavaVersion(name, javaVersionString); isolated = Boolean.parseBoolean(props.getProperty("isolated", "true")); classname = props.getProperty("classname"); diff --git a/core/src/test/java/org/elasticsearch/plugins/PluginInfoTests.java b/core/src/test/java/org/elasticsearch/plugins/PluginInfoTests.java index 64b2ae59312..58180b277f8 100644 --- a/core/src/test/java/org/elasticsearch/plugins/PluginInfoTests.java +++ b/core/src/test/java/org/elasticsearch/plugins/PluginInfoTests.java @@ -176,6 +176,25 @@ public class PluginInfoTests extends ESTestCase { } } + public void testReadFromPropertiesBadJavaVersionFormat() throws Exception { + String pluginName = "fake-plugin"; + Path pluginDir = createTempDir().resolve(pluginName); + writeProperties(pluginDir, + "description", "fake desc", + "name", pluginName, + "elasticsearch.version", Version.CURRENT.toString(), + "java.version", "1.7.0_80", + "classname", "FakePlugin", + "version", "1.0", + "jvm", "true"); + try { + PluginInfo.readFromProperties(pluginDir); + fail("expected bad java version format exception"); + } catch (IllegalStateException e) { + assertTrue(e.getMessage(), e.getMessage().equals("version string must be a sequence of nonnegative decimal integers separated by \".\"'s and may have leading zeros but was 1.7.0_80")); + } + } + public void testReadFromPropertiesBogusElasticsearchVersion() throws Exception { Path pluginDir = createTempDir().resolve("fake-plugin"); writeProperties(pluginDir, diff --git a/dev-tools/src/main/resources/plugin-metadata/plugin-descriptor.properties b/dev-tools/src/main/resources/plugin-metadata/plugin-descriptor.properties index 09b68b7a24d..67d139ede0a 100644 --- a/dev-tools/src/main/resources/plugin-metadata/plugin-descriptor.properties +++ b/dev-tools/src/main/resources/plugin-metadata/plugin-descriptor.properties @@ -58,6 +58,9 @@ jvm=${elasticsearch.plugin.jvm} classname=${elasticsearch.plugin.classname} # # 'java.version' version of java the code is built against +# use the system property java.specification.version +# version string must be a sequence of nonnegative decimal integers +# separated by "."'s and may have leading zeros java.version=${maven.compiler.target} # # 'elasticsearch.version' version of elasticsearch compiled against