From 7cf3221fa34eda4ee42a40e71088628e6a0b3491 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 13 Dec 2012 15:20:19 +0100 Subject: [PATCH] IDEA-97381 (Cloneable class in secure context wrongly prompts for generic parameters) --- .../CloneableClassInSecureContextInspection.java | 15 ++++++--------- .../CloneableClassInSecureContext.java | 6 ++++++ .../expected.xml | 9 +++++++++ ...oneableClassInSecureContextInspectionTest.java | 10 ++++++++++ 4 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/security/cloneable_class_in_secure_context/CloneableClassInSecureContext.java create mode 100644 plugins/InspectionGadgets/test/com/siyeh/igtest/security/cloneable_class_in_secure_context/expected.xml create mode 100644 plugins/InspectionGadgets/testsrc/com/siyeh/ig/security/CloneableClassInSecureContextInspectionTest.java diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/security/CloneableClassInSecureContextInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/security/CloneableClassInSecureContextInspection.java index 14b9ef86c58b..45cd5366c400 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/security/CloneableClassInSecureContextInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/security/CloneableClassInSecureContextInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2007 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2012 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package com.siyeh.ig.security; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiTypeParameter; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; @@ -28,27 +29,23 @@ public class CloneableClassInSecureContextInspection extends BaseInspection { @NotNull public String getDisplayName() { - return InspectionGadgetsBundle.message( - "cloneable.class.in.secure.context.display.name"); + return InspectionGadgetsBundle.message("cloneable.class.in.secure.context.display.name"); } @NotNull protected String buildErrorString(Object... infos) { - return InspectionGadgetsBundle.message( - "cloneable.class.in.secure.context.problem.descriptor"); + return InspectionGadgetsBundle.message("cloneable.class.in.secure.context.problem.descriptor"); } public BaseInspectionVisitor buildVisitor() { return new CloneableClassInSecureContextVisitor(); } - private static class CloneableClassInSecureContextVisitor - extends BaseInspectionVisitor { + private static class CloneableClassInSecureContextVisitor extends BaseInspectionVisitor { @Override public void visitClass(@NotNull PsiClass aClass) { - // no call to super, so it doesn't drill down - if (aClass.isInterface() || aClass.isAnnotationType()) { + if (aClass.isInterface() || aClass.isAnnotationType() || aClass instanceof PsiTypeParameter) { return; } if (!CloneUtils.isCloneable(aClass)) { diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/security/cloneable_class_in_secure_context/CloneableClassInSecureContext.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/security/cloneable_class_in_secure_context/CloneableClassInSecureContext.java new file mode 100644 index 000000000000..699651d95680 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/security/cloneable_class_in_secure_context/CloneableClassInSecureContext.java @@ -0,0 +1,6 @@ +package com.siyeh.igtest.security.cloneable_class_in_secure_context; + +class CloneableClassInSecureContext implements Cloneable { +} +interface EventListener { +} \ No newline at end of file diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/security/cloneable_class_in_secure_context/expected.xml b/plugins/InspectionGadgets/test/com/siyeh/igtest/security/cloneable_class_in_secure_context/expected.xml new file mode 100644 index 000000000000..cf81b3189e69 --- /dev/null +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/security/cloneable_class_in_secure_context/expected.xml @@ -0,0 +1,9 @@ + + + + CloneableClassInSecureContext.java + 3 + Cloneable class in secure context + Class <code>CloneableClassInSecureContext</code> may be cloned, compromising security #loc + + \ No newline at end of file diff --git a/plugins/InspectionGadgets/testsrc/com/siyeh/ig/security/CloneableClassInSecureContextInspectionTest.java b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/security/CloneableClassInSecureContextInspectionTest.java new file mode 100644 index 000000000000..268c30009f62 --- /dev/null +++ b/plugins/InspectionGadgets/testsrc/com/siyeh/ig/security/CloneableClassInSecureContextInspectionTest.java @@ -0,0 +1,10 @@ +package com.siyeh.ig.security; + +import com.siyeh.ig.IGInspectionTestCase; + +public class CloneableClassInSecureContextInspectionTest extends IGInspectionTestCase { + + public void test() throws Exception { + doTest("com/siyeh/igtest/security/cloneable_class_in_secure_context", new CloneableClassInSecureContextInspection()); + } +} \ No newline at end of file