Skip to content

Commit 0854654

Browse files
Jami CogswellJami Cogswell
authored andcommitted
Java: update exception models and add test
1 parent 56acfdf commit 0854654

File tree

4 files changed

+29
-8
lines changed

4 files changed

+29
-8
lines changed

java/ql/lib/ext/java.lang.model.yml

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,17 @@ extensions:
3737
- ["java.lang", "CharSequence", True, "charAt", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
3838
- ["java.lang", "CharSequence", True, "subSequence", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
3939
- ["java.lang", "CharSequence", True, "toString", "", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
40-
- ["java.lang", "IllegalArgumentException", False, "IllegalArgumentException", "(String)", "", "Argument[0]", "Argument[-1].SyntheticField[java.lang.IllegalArgumentException.message]", "value", "manual"]
41-
- ["java.lang", "IllegalArgumentException", False, "getMessage", "()", "", "Argument[-1].SyntheticField[java.lang.IllegalArgumentException.message]", "ReturnValue", "value", "manual"]
42-
- ["java.lang", "IllegalStateException", False, "IllegalStateException", "(String)", "", "Argument[0]", "Argument[-1].SyntheticField[java.lang.IllegalStateException.message]", "value", "manual"]
43-
- ["java.lang", "IllegalStateException", False, "getMessage", "()", "", "Argument[-1].SyntheticField[java.lang.IllegalStateException.message]", "ReturnValue", "value", "manual"]
40+
- ["java.lang", "IllegalArgumentException", False, "IllegalArgumentException", "(String)", "", "Argument[0]", "Argument[-1].SyntheticField[java.lang.Throwable.message]", "value", "manual"]
41+
- ["java.lang", "IllegalStateException", False, "IllegalStateException", "(String)", "", "Argument[0]", "Argument[-1].SyntheticField[java.lang.Throwable.message]", "value", "manual"]
4442
- ["java.lang", "Integer", False, "parseInt", "(String)", "", "Argument[0]", "ReturnValue", "taint", "manual"]
4543
- ["java.lang", "Iterable", True, "forEach", "(Consumer)", "", "Argument[-1].Element", "Argument[0].Parameter[0]", "value", "manual"]
4644
- ["java.lang", "Iterable", True, "iterator", "()", "", "Argument[-1].Element", "ReturnValue.Element", "value", "manual"]
4745
- ["java.lang", "Iterable", True, "spliterator", "()", "", "Argument[-1].Element", "ReturnValue.Element", "value", "manual"]
4846
- ["java.lang", "Object", True, "clone", "", "", "Argument[-1].Element", "ReturnValue.Element", "value", "manual"]
4947
- ["java.lang", "Object", True, "clone", "", "", "Argument[-1].MapKey", "ReturnValue.MapKey", "value", "manual"]
5048
- ["java.lang", "Object", True, "clone", "", "", "Argument[-1].MapValue", "ReturnValue.MapValue", "value", "manual"]
51-
- ["java.lang", "RuntimeException", False, "RuntimeException", "(String)", "", "Argument[0]", "Argument[-1].SyntheticField[java.lang.RuntimeException.message]", "value", "manual"]
52-
- ["java.lang", "RuntimeException", False, "getMessage", "()", "", "Argument[-1].SyntheticField[java.lang.RuntimeException.message]", "ReturnValue", "value", "manual"]
53-
- ["java.lang", "RuntimeException", False, "RuntimeException", "(Throwable)", "", "Argument[0]", "Argument[-1].SyntheticField[java.lang.RuntimeException.cause]", "value", "manual"]
54-
- ["java.lang", "RuntimeException", False, "getCause", "()", "", "Argument[-1].SyntheticField[java.lang.RuntimeException.cause]", "ReturnValue", "value", "manual"]
49+
- ["java.lang", "RuntimeException", False, "RuntimeException", "(String)", "", "Argument[0]", "Argument[-1].SyntheticField[java.lang.Throwable.message]", "value", "manual"]
50+
- ["java.lang", "RuntimeException", False, "RuntimeException", "(Throwable)", "", "Argument[0]", "Argument[-1].SyntheticField[java.lang.Throwable.cause]", "value", "manual"]
5551
- ["java.lang", "String", False, "String", "", "", "Argument[0]", "Argument[-1]", "taint", "manual"]
5652
- ["java.lang", "String", False, "charAt", "(int)", "", "Argument[-1]", "ReturnValue", "taint", "manual"]
5753
- ["java.lang", "String", False, "concat", "(String)", "", "Argument[-1]", "ReturnValue", "taint", "manual"]

java/ql/test/ext/TestModels/Test.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
public class Test {
2+
3+
void sink(Object o) { }
4+
5+
Object source() { return null; }
6+
7+
public void test() throws Exception {
8+
Exception e1 = new RuntimeException((String)source());
9+
sink((String)e1.getMessage()); // $hasValueFlow
10+
11+
Exception e2 = new RuntimeException((Throwable)source());
12+
sink((Throwable)e2.getCause()); // $hasValueFlow
13+
14+
Exception e3 = new IllegalArgumentException((String)source());
15+
sink((String)e3.getMessage()); // $hasValueFlow
16+
17+
Exception e4 = new IllegalStateException((String)source());
18+
sink((String)e4.getMessage()); // $hasValueFlow
19+
20+
Throwable t = new Throwable((Throwable)source());
21+
sink((Throwable)t.getCause()); // $hasValueFlow
22+
}
23+
}

java/ql/test/ext/TestModels/test.expected

Whitespace-only changes.

java/ql/test/ext/TestModels/test.ql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import java
2+
import TestUtilities.InlineFlowTest

0 commit comments

Comments
 (0)