Skip to content

Commit 8a80e02

Browse files
authored
Merge pull request #7574 from pwntester/improve_strings_qll
Add models for AbstractStringBuilder.substring,subsequence,getChars
2 parents c6a9b2b + c2105e5 commit 8a80e02

File tree

3 files changed

+29
-0
lines changed

3 files changed

+29
-0
lines changed

java/ql/lib/semmle/code/java/frameworks/Strings.qll

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,14 @@ private class StringSummaryCsv extends SummaryModelCsv {
4646
"java.lang;AbstractStringBuilder;true;AbstractStringBuilder;(String);;Argument[0];Argument[-1];taint",
4747
"java.lang;AbstractStringBuilder;true;append;;;Argument[0];Argument[-1];taint",
4848
"java.lang;AbstractStringBuilder;true;append;;;Argument[-1];ReturnValue;value",
49+
"java.lang;AbstractStringBuilder;true;getChars;;;Argument[-1];Argument[2];taint",
4950
"java.lang;AbstractStringBuilder;true;insert;;;Argument[1];Argument[-1];taint",
5051
"java.lang;AbstractStringBuilder;true;insert;;;Argument[-1];ReturnValue;value",
5152
"java.lang;AbstractStringBuilder;true;replace;;;Argument[-1];ReturnValue;value",
5253
"java.lang;AbstractStringBuilder;true;replace;;;Argument[2];Argument[-1];taint",
5354
"java.lang;AbstractStringBuilder;true;reverse;;;Argument[-1];ReturnValue;value",
55+
"java.lang;AbstractStringBuilder;true;subSequence;;;Argument[-1];ReturnValue;taint",
56+
"java.lang;AbstractStringBuilder;true;substring;;;Argument[-1];ReturnValue;taint",
5457
"java.lang;AbstractStringBuilder;true;toString;;;Argument[-1];ReturnValue;taint",
5558
"java.lang;StringBuffer;true;StringBuffer;(CharSequence);;Argument[0];Argument[-1];taint",
5659
"java.lang;StringBuffer;true;StringBuffer;(String);;Argument[0];Argument[-1];taint",

java/ql/test/library-tests/dataflow/taint/StringBuilderTests.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,4 +63,27 @@ static void stringBuilderInsertBad() {
6363
sb.insert(45, taint());
6464
sink(sb.toString());
6565
}
66+
67+
static void stringBuilderGetCharsBad() {
68+
StringBuilder sb = new StringBuilder();
69+
sb.append("from preferences select locale where user=''");
70+
sb.append(taint());
71+
char[] chars = null;
72+
sb.getChars(0, 0, chars, 0);
73+
sink(new String(chars));
74+
}
75+
76+
static void stringBuilderSubSequenceBad() {
77+
StringBuilder sb = new StringBuilder();
78+
sb.append("from preferences select locale where user=''");
79+
sb.append(taint());
80+
sink(sb.subSequence(0, 0).toString());
81+
}
82+
83+
static void stringBuilderSubstringBad() {
84+
StringBuilder sb = new StringBuilder();
85+
sb.append("from preferences select locale where user=''");
86+
sb.append(taint());
87+
sink(sb.substring(0, 0));
88+
}
6689
}

java/ql/test/library-tests/dataflow/taint/test.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@
5656
| StringBuilderTests.java:48:69:48:75 | taint(...) | StringBuilderTests.java:50:10:50:22 | toString(...) |
5757
| StringBuilderTests.java:56:24:56:30 | taint(...) | StringBuilderTests.java:57:10:57:22 | toString(...) |
5858
| StringBuilderTests.java:63:19:63:25 | taint(...) | StringBuilderTests.java:64:10:64:22 | toString(...) |
59+
| StringBuilderTests.java:70:15:70:21 | taint(...) | StringBuilderTests.java:73:10:73:26 | new String(...) |
60+
| StringBuilderTests.java:79:15:79:21 | taint(...) | StringBuilderTests.java:80:10:80:40 | toString(...) |
61+
| StringBuilderTests.java:86:15:86:21 | taint(...) | StringBuilderTests.java:87:10:87:27 | substring(...) |
5962
| Varargs.java:7:8:7:14 | taint(...) | Varargs.java:14:10:14:10 | s |
6063
| Varargs.java:8:8:8:14 | taint(...) | Varargs.java:19:10:19:10 | s |
6164
| Varargs.java:8:17:8:23 | taint(...) | Varargs.java:19:10:19:10 | s |

0 commit comments

Comments
 (0)