diff --git a/zeppelin-web/src/app/interpreter/interpreter.controller.js b/zeppelin-web/src/app/interpreter/interpreter.controller.js index 4be35ef6c8e..60cb0f7b7f1 100644 --- a/zeppelin-web/src/app/interpreter/interpreter.controller.js +++ b/zeppelin-web/src/app/interpreter/interpreter.controller.js @@ -325,6 +325,15 @@ angular.module('zeppelinWebApp').controller('InterpreterCtrl', return; } + if (!$scope.newInterpreterSetting.name.indexOf('.') >= 0) { + BootstrapDialog.alert({ + closable: true, + title: 'Add interpreter', + message: '\'.\' is invalid for interpreter name' + }); + return; + } + if (_.findIndex($scope.interpreterSettings, {'name': $scope.newInterpreterSetting.name}) >= 0) { BootstrapDialog.alert({ closable: true, diff --git a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java index 30411d122b4..30b015368d3 100644 --- a/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java +++ b/zeppelin-zengine/src/main/java/org/apache/zeppelin/interpreter/InterpreterFactory.java @@ -506,6 +506,9 @@ private boolean findDefaultInterpreter(List infos) { public InterpreterSetting createNewSetting(String name, String group, List dependencies, InterpreterOption option, Properties p) throws IOException { + if (name.indexOf(".") >= 0) { + throw new IOException("'.' is invalid for InterpreterSetting name."); + } InterpreterSetting setting = createFromInterpreterSettingRef(group); setting.setName(name); setting.setGroup(group); diff --git a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java index c3440828a60..5e44d62c05a 100644 --- a/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java +++ b/zeppelin-zengine/src/test/java/org/apache/zeppelin/interpreter/InterpreterFactoryTest.java @@ -157,4 +157,14 @@ public void testInterpreterAliases() throws IOException, RepositoryException { assertEquals("className1", factory.getInterpreter("note", "test-group1").getClassName()); assertEquals("className1", factory.getInterpreter("note", "group1").getClassName()); } + + @Test + public void testInvalidInterpreterSettingName() { + try { + factory.createNewSetting("new.mock1", "mock1", new LinkedList(), new InterpreterOption(false), new Properties()); + fail("expect fail because of invalid InterpreterSetting Name"); + } catch (IOException e) { + assertEquals("'.' is invalid for InterpreterSetting name.", e.getMessage()); + } + } }