Skip to content

Commit 5e7a3ca

Browse files
committed
Model UriInfo.relativize and resolve.
1 parent 62ecab8 commit 5e7a3ca

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -552,14 +552,20 @@ private class UriInfoModel extends SummaryModelCsv {
552552
"javax.ws.rs.core;UriInfo;true;getQueryParameters;;;Argument[-1];ReturnValue;taint",
553553
"javax.ws.rs.core;UriInfo;true;getRequestUri;;;Argument[-1];ReturnValue;taint",
554554
"javax.ws.rs.core;UriInfo;true;getRequestUriBuilder;;;Argument[-1];ReturnValue;taint",
555+
"javax.ws.rs.core;UriInfo;true;relativize;;;Argument[0];ReturnValue;taint",
556+
"javax.ws.rs.core;UriInfo;true;resolve;;;Argument[-1];ReturnValue;taint",
557+
"javax.ws.rs.core;UriInfo;true;resolve;;;Argument[0];ReturnValue;taint",
555558
"jakarta.ws.rs.core;UriInfo;true;getAbsolutePath;;;Argument[-1];ReturnValue;taint",
556559
"jakarta.ws.rs.core;UriInfo;true;getAbsolutePathBuilder;;;Argument[-1];ReturnValue;taint",
557560
"jakarta.ws.rs.core;UriInfo;true;getPath;;;Argument[-1];ReturnValue;taint",
558561
"jakarta.ws.rs.core;UriInfo;true;getPathParameters;;;Argument[-1];ReturnValue;taint",
559562
"jakarta.ws.rs.core;UriInfo;true;getPathSegments;;;Argument[-1];ReturnValue;taint",
560563
"jakarta.ws.rs.core;UriInfo;true;getQueryParameters;;;Argument[-1];ReturnValue;taint",
561564
"jakarta.ws.rs.core;UriInfo;true;getRequestUri;;;Argument[-1];ReturnValue;taint",
562-
"jakarta.ws.rs.core;UriInfo;true;getRequestUriBuilder;;;Argument[-1];ReturnValue;taint"
565+
"jakarta.ws.rs.core;UriInfo;true;getRequestUriBuilder;;;Argument[-1];ReturnValue;taint",
566+
"jakarta.ws.rs.core;UriInfo;true;relativize;;;Argument[0];ReturnValue;taint",
567+
"jakarta.ws.rs.core;UriInfo;true;resolve;;;Argument[-1];ReturnValue;taint",
568+
"jakarta.ws.rs.core;UriInfo;true;resolve;;;Argument[0];ReturnValue;taint"
563569
]
564570
}
565571
}

java/ql/test/library-tests/frameworks/JaxWs/JakartaRsFlow.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ void testPathSegment(PathSegment ps1, PathSegment ps2) {
196196
sink(taint(ps2).getPath()); // $ hasTaintFlow
197197
}
198198

199-
void testUriInfo(UriInfo ui) {
199+
void testUriInfo(UriInfo ui, UriInfo untaintedUriInfo) throws Exception {
200200
ui = taint(ui);
201201
sink(ui.getPathParameters()); // $ hasTaintFlow
202202
sink(ui.getPathSegments()); // $ hasTaintFlow
@@ -206,6 +206,11 @@ void testUriInfo(UriInfo ui) {
206206
sink(ui.getQueryParameters().getFirst("someKey")); // $ hasTaintFlow
207207
sink(ui.getRequestUri()); // $ hasTaintFlow
208208
sink(ui.getRequestUriBuilder().build()); // $ hasTaintFlow
209+
URI taintedUri = UriSource.taint();
210+
URI untaintedUri = new URI("");
211+
sink(untaintedUriInfo.relativize(taintedUri)); // $ hasTaintFlow
212+
sink(untaintedUriInfo.resolve(taintedUri)); // $ hasTaintFlow
213+
sink(ui.resolve(untaintedUri)); // $ hasTaintFlow
209214
}
210215

211216
void testCookie() {

java/ql/test/library-tests/frameworks/JaxWs/JaxRsFlow.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ void testPathSegment(PathSegment ps1, PathSegment ps2) {
192192
sink(taint(ps2).getPath()); // $ hasTaintFlow
193193
}
194194

195-
void testUriInfo(UriInfo ui) {
195+
void testUriInfo(UriInfo ui, UriInfo untaintedUriInfo) throws Exception {
196196
ui = taint(ui);
197197
sink(ui.getPathParameters()); // $ hasTaintFlow
198198
sink(ui.getPathSegments()); // $ hasTaintFlow
@@ -202,6 +202,11 @@ void testUriInfo(UriInfo ui) {
202202
sink(ui.getQueryParameters().getFirst("someKey")); // $ hasTaintFlow
203203
sink(ui.getRequestUri()); // $ hasTaintFlow
204204
sink(ui.getRequestUriBuilder().build()); // $ hasTaintFlow
205+
URI taintedUri = UriSource.taint();
206+
URI untaintedUri = new URI("");
207+
sink(untaintedUriInfo.relativize(taintedUri)); // $ hasTaintFlow
208+
sink(untaintedUriInfo.resolve(taintedUri)); // $ hasTaintFlow
209+
sink(ui.resolve(untaintedUri)); // $ hasTaintFlow
205210
}
206211

207212
void testCookie() {

0 commit comments

Comments
 (0)