[java] Rename new rule to UseIOStreamsWithApacheCommonsFileItem
This commit is contained in:
@ -58,58 +58,6 @@ sb.append('a'); // use this instead
|
|||||||
</example>
|
</example>
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
<rule name="AvoidApacheCommonsFileItemNonStreaming"
|
|
||||||
since="6.17.0"
|
|
||||||
language="java"
|
|
||||||
message="Avoid memory intensive FileItem.get and FileItem.getString"
|
|
||||||
class="net.sourceforge.pmd.lang.rule.XPathRule"
|
|
||||||
typeResolution="true"
|
|
||||||
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_performance.html#avoidapachecommonsfileitemnonstreaming">
|
|
||||||
<description>
|
|
||||||
Problem: Use of FileItem.get and FileItem.getString could exhaust memory since they load the entire file into memory
|
|
||||||
Solution: Use streaming methods and buffering.
|
|
||||||
</description>
|
|
||||||
<priority>2</priority>
|
|
||||||
<properties>
|
|
||||||
<property name="version" value="1.0"/>
|
|
||||||
<property name="xpath">
|
|
||||||
<value>
|
|
||||||
<![CDATA[
|
|
||||||
//PrimaryPrefix/Name
|
|
||||||
[ends-with(@Image, '.get') or ends-with(@Image, '.getString')]
|
|
||||||
[
|
|
||||||
starts-with(@Image, concat(
|
|
||||||
ancestor::MethodDeclaration//FormalParameter/Type/ReferenceType/ClassOrInterfaceType[typeIs('org.apache.commons.fileupload.FileItem')]/../../..//VariableDeclaratorId/@Image,
|
|
||||||
'.')
|
|
||||||
) or
|
|
||||||
starts-with(@Image, concat(
|
|
||||||
ancestor::MethodDeclaration//LocalVariableDeclaration/Type/ReferenceType/ClassOrInterfaceType[typeIs('org.apache.commons.fileupload.FileItem')]/../../..//VariableDeclaratorId/@Image,
|
|
||||||
'.')
|
|
||||||
) or
|
|
||||||
starts-with(@Image, concat(
|
|
||||||
ancestor::ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/FieldDeclaration/Type/ReferenceType/ClassOrInterfaceType[typeIs('org.apache.commons.fileupload.FileItem')]/../../..//VariableDeclaratorId/@Image,
|
|
||||||
'.')
|
|
||||||
)
|
|
||||||
]
|
|
||||||
]]>
|
|
||||||
</value>
|
|
||||||
</property>
|
|
||||||
</properties>
|
|
||||||
<example>
|
|
||||||
<![CDATA[
|
|
||||||
public class FileStuff {
|
|
||||||
private String bad(FileItem fileItem) {
|
|
||||||
return fileItem.getString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private InputStream good(FileItem fileItem) {
|
|
||||||
return fileItem.getInputStream();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]]>
|
|
||||||
</example>
|
|
||||||
</rule>
|
|
||||||
|
|
||||||
<rule name="AvoidArrayLoops"
|
<rule name="AvoidArrayLoops"
|
||||||
language="java"
|
language="java"
|
||||||
since="3.5"
|
since="3.5"
|
||||||
@ -985,6 +933,63 @@ if (s.indexOf('d') {}
|
|||||||
</example>
|
</example>
|
||||||
</rule>
|
</rule>
|
||||||
|
|
||||||
|
<rule name="UseIOStreamsWithApacheCommonsFileItem"
|
||||||
|
since="6.25.0"
|
||||||
|
language="java"
|
||||||
|
message="Avoid memory intensive FileItem.get() or FileItem.getString()"
|
||||||
|
class="net.sourceforge.pmd.lang.rule.XPathRule"
|
||||||
|
typeResolution="true"
|
||||||
|
externalInfoUrl="${pmd.website.baseurl}/pmd_rules_java_performance.html#useiostreamswithapachecommonsfileitem">
|
||||||
|
<description>
|
||||||
|
Problem: Use of [FileItem.get()](https://commons.apache.org/proper/commons-fileupload/apidocs/org/apache/commons/fileupload/FileItem.html#get--)
|
||||||
|
and [FileItem.getString()](https://commons.apache.org/proper/commons-fileupload/apidocs/org/apache/commons/fileupload/FileItem.html#getString--)
|
||||||
|
could exhaust memory since they load the entire file into memory.
|
||||||
|
|
||||||
|
Solution: Use IO streams and buffering.
|
||||||
|
</description>
|
||||||
|
<priority>2</priority>
|
||||||
|
<properties>
|
||||||
|
<property name="version" value="1.0"/>
|
||||||
|
<property name="xpath">
|
||||||
|
<value>
|
||||||
|
<![CDATA[
|
||||||
|
//PrimaryPrefix/Name
|
||||||
|
[ends-with(@Image, '.get') or ends-with(@Image, '.getString')]
|
||||||
|
[
|
||||||
|
starts-with(@Image, concat(
|
||||||
|
ancestor::MethodDeclaration//FormalParameter/Type/ReferenceType/ClassOrInterfaceType[typeIs('org.apache.commons.fileupload.FileItem')]/../../..//VariableDeclaratorId/@Image,
|
||||||
|
'.')
|
||||||
|
) or
|
||||||
|
starts-with(@Image, concat(
|
||||||
|
ancestor::MethodDeclaration//LocalVariableDeclaration/Type/ReferenceType/ClassOrInterfaceType[typeIs('org.apache.commons.fileupload.FileItem')]/../../..//VariableDeclaratorId/@Image,
|
||||||
|
'.')
|
||||||
|
) or
|
||||||
|
starts-with(@Image, concat(
|
||||||
|
ancestor::ClassOrInterfaceBody/ClassOrInterfaceBodyDeclaration/FieldDeclaration/Type/ReferenceType/ClassOrInterfaceType[typeIs('org.apache.commons.fileupload.FileItem')]/../../..//VariableDeclaratorId/@Image,
|
||||||
|
'.')
|
||||||
|
)
|
||||||
|
]
|
||||||
|
]]>
|
||||||
|
</value>
|
||||||
|
</property>
|
||||||
|
</properties>
|
||||||
|
<example>
|
||||||
|
<![CDATA[
|
||||||
|
import org.apache.commons.fileupload.FileItem;
|
||||||
|
|
||||||
|
public class FileStuff {
|
||||||
|
private String bad(FileItem fileItem) {
|
||||||
|
return fileItem.getString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private InputStream good(FileItem fileItem) {
|
||||||
|
return fileItem.getInputStream();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]]>
|
||||||
|
</example>
|
||||||
|
</rule>
|
||||||
|
|
||||||
<rule name="UselessStringValueOf"
|
<rule name="UselessStringValueOf"
|
||||||
since="3.8"
|
since="3.8"
|
||||||
message="No need to call String.valueOf to append to a string."
|
message="No need to call String.valueOf to append to a string."
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/**
|
/*
|
||||||
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
* BSD-style license; for more info see http://pmd.sourceforge.net/license.html
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -6,5 +6,5 @@ package net.sourceforge.pmd.lang.java.rule.performance;
|
|||||||
|
|
||||||
import net.sourceforge.pmd.testframework.PmdRuleTst;
|
import net.sourceforge.pmd.testframework.PmdRuleTst;
|
||||||
|
|
||||||
public class AvoidApacheCommonsFileItemNonStreamingTest extends PmdRuleTst {
|
public class UseIOStreamsWithApacheCommonsFileItemTest extends PmdRuleTst {
|
||||||
}
|
}
|
@ -3,6 +3,7 @@
|
|||||||
xmlns="http://pmd.sourceforge.net/rule-tests"
|
xmlns="http://pmd.sourceforge.net/rule-tests"
|
||||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd">
|
xsi:schemaLocation="http://pmd.sourceforge.net/rule-tests http://pmd.sourceforge.net/rule-tests_1_0_0.xsd">
|
||||||
|
|
||||||
<test-code>
|
<test-code>
|
||||||
<description>violation: FileItem get() used</description>
|
<description>violation: FileItem get() used</description>
|
||||||
<expected-problems>3</expected-problems>
|
<expected-problems>3</expected-problems>
|
||||||
@ -28,6 +29,7 @@ public class Foo {
|
|||||||
}
|
}
|
||||||
]]></code>
|
]]></code>
|
||||||
</test-code>
|
</test-code>
|
||||||
|
|
||||||
<test-code>
|
<test-code>
|
||||||
<description>violation: FileItem get() used with fully qualified class reference</description>
|
<description>violation: FileItem get() used with fully qualified class reference</description>
|
||||||
<expected-problems>3</expected-problems>
|
<expected-problems>3</expected-problems>
|
||||||
@ -52,6 +54,7 @@ public class Foo {
|
|||||||
}
|
}
|
||||||
]]></code>
|
]]></code>
|
||||||
</test-code>
|
</test-code>
|
||||||
|
|
||||||
<test-code>
|
<test-code>
|
||||||
<description>violation: FileItem getString() used</description>
|
<description>violation: FileItem getString() used</description>
|
||||||
<expected-problems>4</expected-problems>
|
<expected-problems>4</expected-problems>
|
||||||
@ -77,6 +80,7 @@ public class Foo {
|
|||||||
}
|
}
|
||||||
]]></code>
|
]]></code>
|
||||||
</test-code>
|
</test-code>
|
||||||
|
|
||||||
<test-code>
|
<test-code>
|
||||||
<description>violation: FileItem getString() used with fully qualified class reference</description>
|
<description>violation: FileItem getString() used with fully qualified class reference</description>
|
||||||
<expected-problems>4</expected-problems>
|
<expected-problems>4</expected-problems>
|
||||||
@ -101,6 +105,7 @@ public class Foo {
|
|||||||
}
|
}
|
||||||
]]></code>
|
]]></code>
|
||||||
</test-code>
|
</test-code>
|
||||||
|
|
||||||
<test-code>
|
<test-code>
|
||||||
<description>no violation: harmless get methods</description>
|
<description>no violation: harmless get methods</description>
|
||||||
<expected-problems>0</expected-problems>
|
<expected-problems>0</expected-problems>
|
||||||
@ -118,6 +123,7 @@ public class Foo {
|
|||||||
}
|
}
|
||||||
]]></code>
|
]]></code>
|
||||||
</test-code>
|
</test-code>
|
||||||
|
|
||||||
<test-code>
|
<test-code>
|
||||||
<description>Harmless getString methods</description>
|
<description>Harmless getString methods</description>
|
||||||
<expected-problems>0</expected-problems>
|
<expected-problems>0</expected-problems>
|
Reference in New Issue
Block a user