Java: Add StringBuildingType

This commit is contained in:
Marcono1234
2021-03-22 00:19:23 +01:00
parent 07ca09ef90
commit cd059eb965
6 changed files with 10 additions and 18 deletions

View File

@@ -13,12 +13,7 @@
import java import java
class NewStringBufferOrBuilder extends ClassInstanceExpr { class NewStringBufferOrBuilder extends ClassInstanceExpr {
NewStringBufferOrBuilder() { NewStringBufferOrBuilder() { getConstructedType() instanceof StringBuildingType }
exists(Class c | c = this.getConstructedType() |
c.hasQualifiedName("java.lang", "StringBuilder") or
c.hasQualifiedName("java.lang", "StringBuffer")
)
}
string getName() { result = this.getConstructedType().getName() } string getName() { result = this.getConstructedType().getName() }
} }

View File

@@ -44,8 +44,7 @@ predicate objectToString(MethodAccess ma) {
class StringContainer extends RefType { class StringContainer extends RefType {
StringContainer() { StringContainer() {
this instanceof TypeString or this instanceof TypeString or
this.hasQualifiedName("java.lang", "StringBuilder") or this instanceof StringBuildingType or
this.hasQualifiedName("java.lang", "StringBuffer") or
this.hasQualifiedName("java.util", "StringTokenizer") or this.hasQualifiedName("java.util", "StringTokenizer") or
this.(Array).getComponentType() instanceof StringContainer this.(Array).getComponentType() instanceof StringContainer
} }

View File

@@ -46,6 +46,11 @@ class TypeStringBuilder extends Class {
TypeStringBuilder() { this.hasQualifiedName("java.lang", "StringBuilder") } TypeStringBuilder() { this.hasQualifiedName("java.lang", "StringBuilder") }
} }
/** Class `java.lang.StringBuffer` or `java.lang.StringBuilder`. */
class StringBuildingType extends Class {
StringBuildingType() { this instanceof TypeStringBuffer or this instanceof TypeStringBuilder }
}
/** The class `java.lang.System`. */ /** The class `java.lang.System`. */
class TypeSystem extends Class { class TypeSystem extends Class {
TypeSystem() { this.hasQualifiedName("java.lang", "System") } TypeSystem() { this.hasQualifiedName("java.lang", "System") }

View File

@@ -210,10 +210,7 @@ private predicate printMethod(Method m, int i) {
(t.hasQualifiedName("java.io", "PrintWriter") or t.hasQualifiedName("java.io", "PrintStream")) and (t.hasQualifiedName("java.io", "PrintWriter") or t.hasQualifiedName("java.io", "PrintStream")) and
(m.hasName("print") or m.hasName("println")) (m.hasName("print") or m.hasName("println"))
or or
( t instanceof StringBuildingType and
t.hasQualifiedName("java.lang", "StringBuilder") or
t.hasQualifiedName("java.lang", "StringBuffer")
) and
(m.hasName("append") or m.hasName("insert")) (m.hasName("append") or m.hasName("insert"))
or or
t instanceof TypeString and m.hasName("valueOf") t instanceof TypeString and m.hasName("valueOf")

View File

@@ -152,8 +152,7 @@ private class NumberTaintPreservingCallable extends TaintPreservingCallable {
/** Holds for the types `StringBuilder`, `StringBuffer`, and `StringWriter`. */ /** Holds for the types `StringBuilder`, `StringBuffer`, and `StringWriter`. */
private predicate stringBuilderType(RefType t) { private predicate stringBuilderType(RefType t) {
t.hasQualifiedName("java.lang", "StringBuilder") or t instanceof StringBuildingType or
t.hasQualifiedName("java.lang", "StringBuffer") or
t.hasQualifiedName("java.io", "StringWriter") t.hasQualifiedName("java.io", "StringWriter")
} }

View File

@@ -552,10 +552,7 @@ module StringBuilderVarModule {
* build up a query using string concatenation. * build up a query using string concatenation.
*/ */
class StringBuilderVar extends LocalVariableDecl { class StringBuilderVar extends LocalVariableDecl {
StringBuilderVar() { StringBuilderVar() { getType() instanceof StringBuildingType }
this.getType() instanceof TypeStringBuilder or
this.getType() instanceof TypeStringBuffer
}
/** /**
* Gets a call that adds something to this string builder, from the argument at the given index. * Gets a call that adds something to this string builder, from the argument at the given index.