From afc13b29a20036ffbdabc13753e952807be7e91e Mon Sep 17 00:00:00 2001 From: Andreas Dangel Date: Mon, 24 Nov 2014 20:18:44 +0100 Subject: [PATCH] #1285 Prevent to modify the System environment --- .../sourceforge/pmd/cpd/CPDConfiguration.java | 17 ++++++----------- .../pmd/cpd/CPDCommandLineInterfaceTest.java | 3 ++- .../net/sourceforge/pmd/cpd/clitest/File1.java | 2 +- .../net/sourceforge/pmd/cpd/clitest/File2.java | 2 +- src/site/markdown/overview/changelog.md | 1 + 5 files changed, 11 insertions(+), 14 deletions(-) diff --git a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java index 8a0a66866e..ebedcbb637 100644 --- a/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java +++ b/pmd-core/src/main/java/net/sourceforge/pmd/cpd/CPDConfiguration.java @@ -48,7 +48,6 @@ public class CPDConfiguration extends AbstractConfiguration { */ private Renderer renderer; - @Parameter(names = "--encoding", description = "Characterset to use when processing files", required = false) private String encoding; @Parameter(names = "--ignore-literals", description = "Ignore number values and string contents when comparing text", required = false) @@ -103,8 +102,10 @@ public class CPDConfiguration extends AbstractConfiguration { } + @Parameter(names = "--encoding", description = "Characterset to use when processing files", required = false) public void setEncoding(String encoding) { this.encoding = encoding; + setSourceEncoding(encoding); } public SourceCode sourceCodeFor(File file) { @@ -117,11 +118,6 @@ public class CPDConfiguration extends AbstractConfiguration { } public void postContruct() { - if (getEncoding() != null) { - super.setSourceEncoding(getEncoding()); - if (!getEncoding().equals(System.getProperty("file.encoding"))) - System.setProperty("file.encoding", getEncoding()); - } if ( this.getLanguage() == null ) { this.setLanguage(CPDConfiguration.getLanguageFromString(DEFAULT_LANGUAGE)); } @@ -129,15 +125,15 @@ public class CPDConfiguration extends AbstractConfiguration { this.setRendererName(DEFAULT_RENDERER); } if ( this.getRenderer() == null ) { - this.setRenderer(getRendererFromString(getRendererName())); + this.setRenderer(getRendererFromString(getRendererName(), this.getEncoding())); } } - public static Renderer getRendererFromString(String name /* , String encoding */) { + public static Renderer getRendererFromString(String name, String encoding) { if (name.equalsIgnoreCase(DEFAULT_RENDERER) || name.equals("")) { return new SimpleRenderer(); } else if ("xml".equals(name)) { - return new XMLRenderer(); + return new XMLRenderer(encoding); } else if ("csv".equals(name)) { return new CSVRenderer(); } else if ("vs".equals(name)) { @@ -157,7 +153,7 @@ public class CPDConfiguration extends AbstractConfiguration { } public static void setSystemProperties(CPDConfiguration configuration) { - Properties properties = System.getProperties(); + Properties properties = new Properties(); if (configuration.isIgnoreLiterals()) { properties.setProperty(Tokenizer.IGNORE_LITERALS, "true"); } else { @@ -173,7 +169,6 @@ public class CPDConfiguration extends AbstractConfiguration { } else { properties.remove(Tokenizer.IGNORE_ANNOTATIONS); } - System.setProperties(properties); configuration.getLanguage().setProperties(properties); } diff --git a/pmd-java/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java b/pmd-java/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java index 2211aa8068..152d057add 100644 --- a/pmd-java/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java +++ b/pmd-java/src/test/java/net/sourceforge/pmd/cpd/CPDCommandLineInterfaceTest.java @@ -45,7 +45,7 @@ public class CPDCommandLineInterfaceTest { runCPD("--minimum-tokens", "34", "--language", "java", "--files", "src/test/resources/net/sourceforge/pmd/cpd/clitest/", "--ignore-identifiers"); String out = bufferStdout.toString("UTF-8"); - Assert.assertTrue(out.contains("Found a 7 line (34 tokens) duplication")); + Assert.assertTrue(out.contains("Found a 7 line (36 tokens) duplication")); } /** @@ -84,6 +84,7 @@ public class CPDCommandLineInterfaceTest { String out = bufferStdout.toString("UTF-8"); Assert.assertTrue(out.startsWith("")); + Assert.assertTrue(out.contains("System.out.println(i + \"ä\");")); } /** diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/cpd/clitest/File1.java b/pmd-java/src/test/resources/net/sourceforge/pmd/cpd/clitest/File1.java index 9e810060c6..0f0ddeee13 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/cpd/clitest/File1.java +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/cpd/clitest/File1.java @@ -1,7 +1,7 @@ public class File1 { public void dup() { for (int i = 0; i < 10; i++) { - System.out.println(i); + System.out.println(i + "ä"); } } } \ No newline at end of file diff --git a/pmd-java/src/test/resources/net/sourceforge/pmd/cpd/clitest/File2.java b/pmd-java/src/test/resources/net/sourceforge/pmd/cpd/clitest/File2.java index 03ef25f631..12fab4b42f 100644 --- a/pmd-java/src/test/resources/net/sourceforge/pmd/cpd/clitest/File2.java +++ b/pmd-java/src/test/resources/net/sourceforge/pmd/cpd/clitest/File2.java @@ -1,7 +1,7 @@ public class File2 { public void dup() { for (int j = 0; j < 10; j++) { - System.out.println(j); + System.out.println(j + "ä"); } } } \ No newline at end of file diff --git a/src/site/markdown/overview/changelog.md b/src/site/markdown/overview/changelog.md index 7ae1ac31e1..c55b618bba 100644 --- a/src/site/markdown/overview/changelog.md +++ b/src/site/markdown/overview/changelog.md @@ -15,3 +15,4 @@ * [#1280](https://sourceforge.net/p/pmd/bugs/1280/): False Positive in UnusedImports when import used in javadoc * [#1281](https://sourceforge.net/p/pmd/bugs/1281/): UnusedPrivateMethod incorrectly flagged for methods nested private classes * [#1282](https://sourceforge.net/p/pmd/bugs/1282/): False Positive with implicit String.valuesOf() (Java) +* [#1285](https://sourceforge.net/p/pmd/bugs/1285/): Prevent to modify the System environment