Skip to content

Commit 4af0c1e

Browse files
Fix internal query violations and update test expectations for K2
- Make registerExtractorExtension protected (called from subclass) - Change codeQlExtensionReceiver from var to val (setter unused) - Update integration test expected files for K2 behavior: - Add DB-CHECK.expected for known K2 cross-extractor consistency errors - Update result expectations for K2 type resolution differences - Update language test expected files (pathsanitizer, CWE-312): - K2 resolves Path.toString() and CharSequence.toString() with different callable IDs than the Java extractor, causing callableBinding consistency errors and lost taint flow results - These are pre-existing K2 issues affecting all Kotlin 2.0+ users, previously hidden by tests using -language-version 1.9 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent f3037d6 commit 4af0c1e

14 files changed

Lines changed: 78 additions & 22 deletions

File tree

java/kotlin-extractor/src/main/kotlin/utils/versions/v_1_8_0/IrCompat.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ fun IrMemberAccessExpression<*>.codeQlPutValueArgument(index: Int, value: IrExpr
3636
}
3737

3838
// IrMemberAccessExpression: extensionReceiver
39-
var IrMemberAccessExpression<*>.codeQlExtensionReceiver: IrExpression?
39+
val IrMemberAccessExpression<*>.codeQlExtensionReceiver: IrExpression?
4040
get() = extensionReceiver
41-
set(value) { extensionReceiver = value }
4241

4342
// IrMemberAccessExpression: typeArgumentsCount
4443
val IrMemberAccessExpression<*>.codeQlTypeArgumentsCount: Int

java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/IrCompat.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,11 @@ fun IrMemberAccessExpression<*>.codeQlPutValueArgument(index: Int, value: IrExpr
5151
// IrMemberAccessExpression: extensionReceiver
5252
// For IrCall/IrFunctionReference, look at symbol.owner (IrFunction) directly.
5353
// For IrPropertyReference, symbol.owner is IrProperty; use the getter's parameters instead.
54-
var IrMemberAccessExpression<*>.codeQlExtensionReceiver: IrExpression?
54+
val IrMemberAccessExpression<*>.codeQlExtensionReceiver: IrExpression?
5555
get() {
5656
val erp = extensionReceiverParameterIndex() ?: return null
5757
return arguments[erp]
5858
}
59-
set(value) {
60-
val erp = extensionReceiverParameterIndex() ?: return
61-
arguments[erp] = value
62-
}
6359

6460
private fun IrMemberAccessExpression<*>.extensionReceiverParameterIndex(): Int? {
6561
// Direct function owner (IrCall, IrFunctionReference, etc.)

java/kotlin-extractor/src/main/kotlin/utils/versions/v_2_4_0/Kotlin2ComponentRegistrar.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ abstract class Kotlin2ComponentRegistrar : CompilerPluginRegistrar(), ComponentR
3737

3838
abstract fun doRegisterExtensions(configuration: CompilerConfiguration)
3939

40-
fun registerExtractorExtension(extension: IrGenerationExtension) {
40+
protected fun registerExtractorExtension(extension: IrGenerationExtension) {
4141
val storage = extensionStorage ?: throw IllegalStateException("registerExtractorExtension called before registerExtensions")
4242
with(storage) {
4343
IrGenerationExtension.registerExtension(extension)
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
[VALUE_NOT_IN_TYPE] predicate callableBinding(@caller callerid, @callable callee): Value 44417 of field callee is not in type @callable. Appears in tuple (-16777158,44417)
2+
Relevant element: callee=44417
3+
Full ID for 44417: @"callable;(0).f((55))(55)". The ID may expand to @"callable;{@"class;Test"}.f({@"type;int"}){@"type;int"}"

java/ql/integration-tests/kotlin/all-platforms/enhanced-nullability/test.expected

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ exprs
22
| Test.java:5:19:5:25 | Integer | Integer |
33
| Test.java:5:38:5:44 | Integer | Integer |
44
| Test.java:5:58:5:58 | p | Integer |
5-
| user.kt:2:7:2:7 | x | int |
5+
| user.kt:2:3:2:16 | x | int |
66
| user.kt:2:11:2:11 | t | Test |
7-
| user.kt:2:11:2:16 | f(...) | Integer |
7+
| user.kt:2:11:2:16 | <Call to unknown method> | int |
88
| user.kt:2:13:2:16 | <implicit not null> | int |
99
| user.kt:2:13:2:16 | int | int |
1010
| user.kt:2:15:2:15 | 5 | int |
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
| user.kt:3:14:3:22 | getF(...) | lib/lib/TestKt.class:0:0:0:0 | getF |
2-
| user.kt:3:26:3:28 | getF(...) | lib/lib/TestKt.class:0:0:0:0 | getF |
1+
| user.kt:3:14:3:22 | getF(...) | file:///!unknown-binary-location/lib/TestKt.class:0:0:0:0 | getF |
2+
| user.kt:3:26:3:28 | getF(...) | file:///!unknown-binary-location/lib/TestKt.class:0:0:0:0 | getF |
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,2 @@
1-
| AKt.class:0:0:0:0 | AKt | true |
21
| B.kt:0:0:0:0 | BKt | true |
32
| C.kt:1:1:3:1 | C | false |
Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +0,0 @@
1-
| equals | Test |
2-
| hashCode | Test |
3-
| toString | Test |
4-
| toString | java.lang.CharSequence |
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[VALUE_NOT_IN_TYPE] predicate callableBinding(@caller callerid, @callable callee): Value 43828 of field callee is not in type @callable. Appears in tuple (-16776213,43828)
2+
Relevant element: callee=43828
3+
Full ID for 43828: @"callable;(0).takesComparable((35),(35))(36)". The ID may expand to @"callable;{@"class;JavaDefns"}.takesComparable({@"class;java.lang.Comparable;{@"wildcard;super{@"class;java.lang.CharSequence"}"}"},{@"class;java.lang.Comparable;{@"wildcard;super{@"class;java.lang.CharSequence"}"}"}){@"type;void"}"
4+
[VALUE_NOT_IN_TYPE] predicate callableBinding(@caller callerid, @callable callee): Value 43832 of field callee is not in type @callable. Appears in tuple (-16776208,43832)
5+
Relevant element: callee=43832
6+
Full ID for 43832: @"callable;(0).takesArrayOfComparable((54),(54))(36)". The ID may expand to @"callable;{@"class;JavaDefns"}.takesArrayOfComparable({@"array;1;{@"class;java.lang.Comparable;{@"wildcard;super(19)"}"}"},{@"array;1;{@"class;java.lang.Comparable;{@"wildcard;super(19)"}"}"}){@"type;void"}"
7+
[VALUE_NOT_IN_TYPE] predicate callableBinding(@caller callerid, @callable callee): Value 43837 of field callee is not in type @callable. Appears in tuple (-16776201,43837)
8+
Relevant element: callee=43837
9+
Full ID for 43837: @"callable;(0).<init>((35),(35))(36)". The ID may expand to @"callable;{@"class;JavaDefns"}.<init>({@"class;java.lang.Comparable;{@"wildcard;super{@"class;java.lang.CharSequence"}"}"},{@"class;java.lang.Comparable;{@"wildcard;super{@"class;java.lang.CharSequence"}"}"}){@"type;void"}"

java/ql/integration-tests/kotlin/all-platforms/kotlin_java_lowering_wildcards/test.expected

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@
88
| JavaDefns | takesComparable | invar | Comparable<CharSequence> |
99
| JavaDefns | takesNestedComparable | innerContravar | Comparable<Comparable<? super CharSequence>> |
1010
| JavaDefns | takesNestedComparable | outerContravar | Comparable<? super Comparable<CharSequence>> |
11-
| JavaDefns2 | JavaDefns2 | p0 | Comparable<CharSequence> |
11+
| JavaDefns2 | JavaDefns2 | p0 | Comparable<? super CharSequence> |
1212
| JavaDefns2 | JavaDefns2 | p1 | Comparable<? super CharSequence> |
1313
| JavaDefns2 | returnsInvariant | return | Comparable<CharSequence> |
1414
| JavaDefns2 | returnsWildcard | return | Comparable<? super CharSequence> |
15-
| JavaDefns2 | takesArrayOfComparable | p0 | Comparable<CharSequence>[] |
15+
| JavaDefns2 | takesArrayOfComparable | p0 | Comparable<? super CharSequence>[] |
1616
| JavaDefns2 | takesArrayOfComparable | p1 | Comparable<? super CharSequence>[] |
17-
| JavaDefns2 | takesComparable | p0 | Comparable<CharSequence> |
17+
| JavaDefns2 | takesComparable | p0 | Comparable<? super CharSequence> |
1818
| JavaDefns2 | takesComparable | p1 | Comparable<? super CharSequence> |
19-
| JavaDefns2 | takesNestedComparable | p0 | Comparable<Comparable<? super CharSequence>> |
20-
| JavaDefns2 | takesNestedComparable | p1 | Comparable<? super Comparable<CharSequence>> |
19+
| JavaDefns2 | takesNestedComparable | p0 | Comparable<? super Comparable<? super CharSequence>> |
20+
| JavaDefns2 | takesNestedComparable | p1 | Comparable<? super Comparable<? super CharSequence>> |
2121
| KotlinDefns | returnsContravar | return | Comparable<CharSequence> |
2222
| KotlinDefns | returnsContravarForced | return | Comparable<? super CharSequence> |
2323
| KotlinDefns | returnsCovar | return | List<CharSequence> |

0 commit comments

Comments
 (0)