platform: avoid returning corrupted plugin descriptor
authorRoman Shevchenko <roman.shevchenko@jetbrains.com>
Wed, 17 Dec 2014 16:13:30 +0000 (17:13 +0100)
committerRoman Shevchenko <roman.shevchenko@jetbrains.com>
Wed, 17 Dec 2014 16:13:30 +0000 (17:13 +0100)
java/java-tests/testData/ide/plugins/pluginDescriptor/malformed/META-INF/plugin.xml [new file with mode: 0644]
platform/core-impl/src/com/intellij/ide/plugins/PluginManagerCore.java
platform/platform-tests/testSrc/com/intellij/ide/plugins/PluginDescriptorTest.java

diff --git a/java/java-tests/testData/ide/plugins/pluginDescriptor/malformed/META-INF/plugin.xml b/java/java-tests/testData/ide/plugins/pluginDescriptor/malformed/META-INF/plugin.xml
new file mode 100644 (file)
index 0000000..17843c7
--- /dev/null
@@ -0,0 +1 @@
+oops
\ No newline at end of file
index 842478c2d8ccd43e6444eb30c2e272914465d32b..1922fb6cfcbbd055ae5626d276e05c17a0eddba0 100644 (file)
@@ -556,23 +556,27 @@ public class PluginManagerCore {
 
   @Nullable
   static IdeaPluginDescriptorImpl loadDescriptorFromDir(@NotNull File file, @NotNull String fileName) {
-    IdeaPluginDescriptorImpl descriptor = null;
     File descriptorFile = new File(file, META_INF + File.separator + fileName);
     if (descriptorFile.exists()) {
-      descriptor = new IdeaPluginDescriptorImpl(file);
       try {
+        IdeaPluginDescriptorImpl descriptor = new IdeaPluginDescriptorImpl(file);
         descriptor.readExternal(descriptorFile.toURI().toURL());
+        return descriptor;
       }
-      catch (Exception e) {
-        System.err.println("Cannot load: " + descriptorFile.getAbsolutePath());
-        e.printStackTrace();
+      catch (XmlSerializationException e) {
+        getLogger().info("Cannot load " + file, e);
+        prepareLoadingPluginsErrorMessage("File '" + file.getName() + "' contains invalid plugin descriptor.");
+      }
+      catch (Throwable e) {
+        getLogger().info("Cannot load " + file, e);
       }
     }
-    return descriptor;
+
+    return null;
   }
 
   @Nullable
-  static IdeaPluginDescriptorImpl loadDescriptorFromJar(@NotNull File file, @NotNull @NonNls String fileName) {
+  static IdeaPluginDescriptorImpl loadDescriptorFromJar(@NotNull File file, @NotNull String fileName) {
     try {
       String fileURL = StringUtil.replace(file.toURI().toASCIIString(), "!", "%21");
       URL jarURL = new URL("jar:" + fileURL + "!/META-INF/" + fileName);
@@ -593,7 +597,7 @@ public class PluginManagerCore {
     }
     catch (XmlSerializationException e) {
       getLogger().info("Cannot load " + file, e);
-      prepareLoadingPluginsErrorMessage("Plugin file " + file.getName() + " contains invalid plugin descriptor file.");
+      prepareLoadingPluginsErrorMessage("File '" + file.getName() + "' contains invalid plugin descriptor.");
     }
     catch (Throwable e) {
       getLogger().info("Cannot load " + file, e);
@@ -607,9 +611,8 @@ public class PluginManagerCore {
     return loadDescriptorFromJar(file, PLUGIN_XML);
   }
 
-  @SuppressWarnings({"HardCodedStringLiteral"})
   @Nullable
-  public static IdeaPluginDescriptorImpl loadDescriptor(final File file, @NonNls final String fileName) {
+  public static IdeaPluginDescriptorImpl loadDescriptor(@NotNull final File file, @NotNull String fileName) {
     IdeaPluginDescriptorImpl descriptor = null;
 
     if (file.isDirectory()) {
index fd4a052a8933f02b276ab6d3fd9d28598bfa2e72..72dbbb82e6e5171bc837c557fc51c8c8c6ecbf5d 100644 (file)
@@ -1,21 +1,50 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
 package com.intellij.ide.plugins;
 
 import com.intellij.openapi.application.ex.PathManagerEx;
-import junit.framework.TestCase;
+import org.junit.Test;
 
 import java.io.File;
 
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 /**
  * @author Dmitry Avdeev
- *         Date: 7/14/11
  */
-public class PluginDescriptorTest extends TestCase {
+public class PluginDescriptorTest {
+  private static String getTestDataPath() {
+    return PathManagerEx.getTestDataPath() + "/ide/plugins/pluginDescriptor";
+  }
 
-  public void testDescriptorLoading() throws Exception {
-    String path = PathManagerEx.getTestDataPath().replace(File.separatorChar, '/') + "/ide/plugins/pluginDescriptor";
-    File file = new File(path + "/asp.jar");
+  @Test
+  public void testDescriptorLoading() {
+    File file = new File(getTestDataPath(), "asp.jar");
     assertTrue(file + " not exist", file.exists());
-    IdeaPluginDescriptorImpl descriptor = PluginManager.loadDescriptorFromJar(file);
+    IdeaPluginDescriptorImpl descriptor = PluginManagerCore.loadDescriptorFromJar(file);
     assertNotNull(descriptor);
   }
+
+  @Test
+  public void testInvalidFileDescriptor() {
+    File file = new File(getTestDataPath(), "malformed");
+    assertTrue(file + " not exist", file.exists());
+    IdeaPluginDescriptorImpl descriptor = PluginManagerCore.loadDescriptorFromDir(file, PluginManagerCore.PLUGIN_XML);
+    assertNull(descriptor);
+  }
 }