Simplify models by introducing TaintInheritingContent

This commit is contained in:
Tony Torralba
2022-10-18 12:12:08 +02:00
parent 81d38132cf
commit 0eeaf71716
6 changed files with 239 additions and 460 deletions

View File

@@ -0,0 +1,15 @@
import swift
private import codeql.swift.dataflow.DataFlow
/**
* A `Content` that should be implicitly regarded as tainted whenever an object with such `Content`
* is itself tainted.
*
* For example, if we had a type `class Container { var field: Contained }`, then by default a tainted
* `Container` and a `Container` with a tainted `Contained` stored in its `field` are distinct.
*
* If `any(DataFlow::FieldContent fc | fc.getField().hasQualifiedName("Container", "field"))` was
* included in this type however, then a tainted `Container` would imply that its `field` is also
* tainted (but not vice versa).
*/
abstract class TaintInheritingContent extends DataFlow::Content { }

View File

@@ -2,6 +2,7 @@ private import swift
private import DataFlowPrivate
private import TaintTrackingPublic
private import codeql.swift.dataflow.DataFlow
private import codeql.swift.dataflow.FlowSteps
private import codeql.swift.dataflow.Ssa
private import codeql.swift.controlflow.CfgNodes
private import FlowSummaryImpl as FlowSummaryImpl
@@ -55,6 +56,12 @@ private module Cached {
se = nodeTo.asExpr()
)
or
// flow through the read of a content that inherits taint
exists(DataFlow::ContentSet f |
readStep(nodeFrom, f, nodeTo) and
f.getAReadContent() instanceof TaintInheritingContent
)
or
// flow through a flow summary (extension of `SummaryModelCsv`)
FlowSummaryImpl::Private::Steps::summaryLocalStep(nodeFrom, nodeTo, false)
}

View File

@@ -1,5 +1,19 @@
import swift
private import codeql.swift.dataflow.DataFlow
private import codeql.swift.dataflow.ExternalFlow
private import codeql.swift.dataflow.FlowSteps
/** The struct `URL`. */
class UrlDecl extends StructDecl {
UrlDecl() { this.getFullName() = "URL" }
}
/**
* A content implying that, if a `URL` is tainted, then all its fields are tainted.
*/
private class UriFieldsInheritTaint extends TaintInheritingContent, DataFlow::Content::FieldContent {
UriFieldsInheritTaint() { this.getField().getEnclosingDecl() instanceof UrlDecl }
}
/**
* A model for `URL` members that are sources of remote flow.
@@ -22,53 +36,7 @@ private class UrlSummaries extends SummaryModelCsv {
row =
[
";URL;true;init(string:);(String);;Argument[0];ReturnValue;taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0,1];ReturnValue;taint",
// The base string taints all the URL fields (except baseURL)
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[absoluteURL];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[fragment];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[host];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[lastPathComponent];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[path];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[pathComponents];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[pathExtension];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[port];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[query];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[relativePath];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[relativeString];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[scheme];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[standardized];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[standardizedFileURL];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[user];taint",
";URL;true;init(string:);(String);;Argument[0];ReturnValue.Field[password];taint",
// The base string taints all the URL fields (except baseURL) if it's an absolute URL when relativeTo is used
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[absoluteURL];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[fragment];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[host];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[lastPathComponent];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[path];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[pathComponents];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[pathExtension];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[port];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[query];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[relativePath];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[relativeString];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[scheme];taint",
// Not mapping precise field taint to standardized/standardizedFileURL even if the return values are URLs too
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[standardized];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[standardizedFileURL];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[user];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0];ReturnValue.Field[password];taint",
// The relativeTo URL taints fields not related to the path, query or fragment if the base string is a relative path
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[absoluteURL];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[baseURL];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[host];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[port];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[scheme];taint",
// Not mapping precise field taint to standardized/standardizedFileURL even if the return values are URLs too
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[standardized];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[standardizedFileURL];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[user];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[1];ReturnValue.Field[password];taint",
";URL;true;init(string:relativeTo:);(String,URL?);;Argument[0,1];ReturnValue;taint"
]
}
}

View File

@@ -125,5 +125,39 @@
| string.swift:39:29:39:29 | < | string.swift:39:13:39:29 | ... .+(_:_:) ... |
| subscript.swift:13:10:13:17 | call to source() | subscript.swift:13:10:13:20 | ...[...] |
| subscript.swift:14:10:14:18 | call to source2() | subscript.swift:14:10:14:21 | ...[...] |
| url.swift:64:12:64:12 | urlTainted | url.swift:64:12:64:23 | .absoluteURL |
| url.swift:65:12:65:12 | urlTainted | url.swift:65:12:65:23 | .baseURL |
| url.swift:66:15:66:15 | urlTainted | url.swift:66:15:66:26 | .fragment |
| url.swift:67:15:67:15 | urlTainted | url.swift:67:15:67:26 | .host |
| url.swift:68:15:68:15 | urlTainted | url.swift:68:15:68:26 | .lastPathComponent |
| url.swift:69:15:69:15 | urlTainted | url.swift:69:15:69:26 | .path |
| url.swift:70:15:70:15 | urlTainted | url.swift:70:15:70:26 | .pathComponents |
| url.swift:70:15:70:26 | .pathComponents | url.swift:70:15:70:42 | ...[...] |
| url.swift:71:15:71:15 | urlTainted | url.swift:71:15:71:26 | .pathExtension |
| url.swift:72:12:72:12 | urlTainted | url.swift:72:12:72:23 | .port |
| url.swift:73:15:73:15 | urlTainted | url.swift:73:15:73:26 | .query |
| url.swift:74:15:74:15 | urlTainted | url.swift:74:15:74:26 | .relativePath |
| url.swift:75:15:75:15 | urlTainted | url.swift:75:15:75:26 | .relativeString |
| url.swift:76:15:76:15 | urlTainted | url.swift:76:15:76:26 | .scheme |
| url.swift:77:12:77:12 | urlTainted | url.swift:77:12:77:23 | .standardized |
| url.swift:78:12:78:12 | urlTainted | url.swift:78:12:78:23 | .standardizedFileURL |
| url.swift:79:15:79:15 | urlTainted | url.swift:79:15:79:26 | .user |
| url.swift:80:15:80:15 | urlTainted | url.swift:80:15:80:26 | .password |
| url.swift:86:12:86:54 | ...! | url.swift:86:12:86:56 | .absoluteURL |
| url.swift:87:12:87:54 | ...! | url.swift:87:12:87:56 | .baseURL |
| url.swift:88:15:88:57 | ...! | url.swift:88:15:88:59 | .fragment |
| url.swift:89:15:89:57 | ...! | url.swift:89:15:89:59 | .host |
| url.swift:90:15:90:57 | ...! | url.swift:90:15:90:59 | .lastPathComponent |
| url.swift:91:15:91:57 | ...! | url.swift:91:15:91:59 | .path |
| url.swift:92:15:92:57 | ...! | url.swift:92:15:92:59 | .pathComponents |
| url.swift:92:15:92:59 | .pathComponents | url.swift:92:15:92:75 | ...[...] |
| url.swift:93:15:93:57 | ...! | url.swift:93:15:93:59 | .pathExtension |
| url.swift:94:12:94:54 | ...! | url.swift:94:12:94:56 | .port |
| url.swift:95:15:95:57 | ...! | url.swift:95:15:95:59 | .query |
| url.swift:96:15:96:57 | ...! | url.swift:96:15:96:59 | .relativePath |
| url.swift:97:15:97:57 | ...! | url.swift:97:15:97:59 | .relativeString |
| url.swift:98:15:98:57 | ...! | url.swift:98:15:98:59 | .scheme |
| url.swift:99:12:99:54 | ...! | url.swift:99:12:99:56 | .standardized |
| url.swift:100:12:100:54 | ...! | url.swift:100:12:100:56 | .standardizedFileURL |
| url.swift:101:15:101:57 | ...! | url.swift:101:15:101:59 | .user |
| url.swift:102:15:102:57 | ...! | url.swift:102:15:102:59 | .password |

View File

@@ -1,55 +1,5 @@
edges
| file://:0:0:0:0 | [summary] to write: argument 1.parameter 0 in dataTask(with:completionHandler:) : | url.swift:120:61:120:61 | data : |
| file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [absoluteURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [absoluteURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [absoluteURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [absoluteURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).baseURL in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [baseURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).baseURL in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [baseURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).fragment in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [fragment] : |
| file://:0:0:0:0 | [summary] to write: return (return).fragment in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [fragment] : |
| file://:0:0:0:0 | [summary] to write: return (return).host in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [host] : |
| file://:0:0:0:0 | [summary] to write: return (return).host in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [host] : |
| file://:0:0:0:0 | [summary] to write: return (return).host in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [host] : |
| file://:0:0:0:0 | [summary] to write: return (return).host in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [host] : |
| file://:0:0:0:0 | [summary] to write: return (return).lastPathComponent in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [lastPathComponent] : |
| file://:0:0:0:0 | [summary] to write: return (return).lastPathComponent in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [lastPathComponent] : |
| file://:0:0:0:0 | [summary] to write: return (return).password in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [password] : |
| file://:0:0:0:0 | [summary] to write: return (return).password in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [password] : |
| file://:0:0:0:0 | [summary] to write: return (return).password in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [password] : |
| file://:0:0:0:0 | [summary] to write: return (return).password in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [password] : |
| file://:0:0:0:0 | [summary] to write: return (return).path in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [path] : |
| file://:0:0:0:0 | [summary] to write: return (return).path in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [path] : |
| file://:0:0:0:0 | [summary] to write: return (return).pathComponents in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathComponents] : |
| file://:0:0:0:0 | [summary] to write: return (return).pathComponents in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathComponents] : |
| file://:0:0:0:0 | [summary] to write: return (return).pathExtension in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathExtension] : |
| file://:0:0:0:0 | [summary] to write: return (return).pathExtension in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathExtension] : |
| file://:0:0:0:0 | [summary] to write: return (return).port in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [port] : |
| file://:0:0:0:0 | [summary] to write: return (return).port in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [port] : |
| file://:0:0:0:0 | [summary] to write: return (return).port in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [port] : |
| file://:0:0:0:0 | [summary] to write: return (return).port in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [port] : |
| file://:0:0:0:0 | [summary] to write: return (return).query in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [query] : |
| file://:0:0:0:0 | [summary] to write: return (return).query in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [query] : |
| file://:0:0:0:0 | [summary] to write: return (return).relativePath in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativePath] : |
| file://:0:0:0:0 | [summary] to write: return (return).relativePath in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativePath] : |
| file://:0:0:0:0 | [summary] to write: return (return).relativeString in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativeString] : |
| file://:0:0:0:0 | [summary] to write: return (return).relativeString in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativeString] : |
| file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [scheme] : |
| file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [scheme] : |
| file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [scheme] : |
| file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [scheme] : |
| file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardized] : |
| file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardized] : |
| file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardized] : |
| file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardized] : |
| file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardizedFileURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardizedFileURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardizedFileURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardizedFileURL] : |
| file://:0:0:0:0 | [summary] to write: return (return).user in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [user] : |
| file://:0:0:0:0 | [summary] to write: return (return).user in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [user] : |
| file://:0:0:0:0 | [summary] to write: return (return).user in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [user] : |
| file://:0:0:0:0 | [summary] to write: return (return).user in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [user] : |
| string.swift:5:11:5:18 | call to source() : | string.swift:7:13:7:13 | "..." |
| string.swift:5:11:5:18 | call to source() : | string.swift:9:13:9:13 | "..." |
| string.swift:5:11:5:18 | call to source() : | string.swift:11:13:11:13 | "..." |
@@ -66,188 +16,127 @@ edges
| try.swift:15:17:15:24 | call to source() : | try.swift:15:12:15:24 | try! ... |
| try.swift:18:18:18:25 | call to source() : | try.swift:18:12:18:27 | ...! |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).fragment in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).host in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).lastPathComponent in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).password in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).path in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).pathComponents in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).pathExtension in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).port in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).query in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).relativePath in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).relativeString in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:) : |
| url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return).user in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).fragment in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).host in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).lastPathComponent in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).password in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).path in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).pathComponents in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).pathExtension in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).port in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).query in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).relativePath in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).relativeString in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:) : |
| url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return).user in init(string:) : |
| url.swift:9:2:9:43 | [summary param] 0 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).baseURL in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).host in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).password in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).port in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return).user in init(string:relativeTo:) : |
| url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : |
| url.swift:9:8:9:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).baseURL in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).host in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).password in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).port in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return).user in init(string:relativeTo:) : |
| url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : |
| url.swift:43:2:46:55 | [summary param] 0 in dataTask(with:completionHandler:) : | file://:0:0:0:0 | [summary] to write: argument 1.parameter 0 in dataTask(with:completionHandler:) : |
| url.swift:44:5:44:15 | url : | file://:0:0:0:0 | [summary] to write: argument 1.parameter 0 in dataTask(with:completionHandler:) : |
| url.swift:57:16:57:23 | call to source() : | url.swift:59:31:59:31 | tainted : |
| url.swift:57:16:57:23 | call to source() : | url.swift:83:24:83:24 | tainted : |
| url.swift:57:16:57:23 | call to source() : | url.swift:117:28:117:28 | tainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:62:12:62:12 | urlTainted |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:64:12:64:23 | .absoluteURL |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:65:12:65:23 | .baseURL |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:66:15:66:34 | ...! |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:67:15:67:30 | ...! |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:68:15:68:26 | .lastPathComponent |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:69:15:69:26 | .path |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:70:15:70:42 | ...[...] |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:71:15:71:26 | .pathExtension |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:72:12:72:27 | ...! |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:73:15:73:31 | ...! |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:74:15:74:26 | .relativePath |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:75:15:75:26 | .relativeString |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:76:15:76:32 | ...! |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:77:12:77:23 | .standardized |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:78:12:78:23 | .standardizedFileURL |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:79:15:79:30 | ...! |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:80:15:80:34 | ...! |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:86:43:86:43 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:87:43:87:43 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:88:46:88:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:89:46:89:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:90:46:90:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:91:46:91:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:92:46:92:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:93:46:93:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:94:43:94:43 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:95:46:95:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:96:46:96:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:97:46:97:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:98:46:98:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:99:43:99:43 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:100:43:100:43 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:101:46:101:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:102:46:102:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) : | url.swift:120:46:120:46 | urlTainted : |
| url.swift:59:19:59:38 | call to init(string:) [absoluteURL] : | url.swift:63:12:63:12 | urlTainted [absoluteURL] : |
| url.swift:59:19:59:38 | call to init(string:) [fragment] : | url.swift:66:15:66:15 | urlTainted [fragment] : |
| url.swift:59:19:59:38 | call to init(string:) [host] : | url.swift:67:15:67:15 | urlTainted [host] : |
| url.swift:59:19:59:38 | call to init(string:) [lastPathComponent] : | url.swift:68:15:68:15 | urlTainted [lastPathComponent] : |
| url.swift:59:19:59:38 | call to init(string:) [password] : | url.swift:80:15:80:15 | urlTainted [password] : |
| url.swift:59:19:59:38 | call to init(string:) [pathComponents] : | url.swift:70:15:70:15 | urlTainted [pathComponents] : |
| url.swift:59:19:59:38 | call to init(string:) [pathExtension] : | url.swift:71:15:71:15 | urlTainted [pathExtension] : |
| url.swift:59:19:59:38 | call to init(string:) [path] : | url.swift:69:15:69:15 | urlTainted [path] : |
| url.swift:59:19:59:38 | call to init(string:) [port] : | url.swift:72:12:72:12 | urlTainted [port] : |
| url.swift:59:19:59:38 | call to init(string:) [query] : | url.swift:73:15:73:15 | urlTainted [query] : |
| url.swift:59:19:59:38 | call to init(string:) [relativePath] : | url.swift:74:15:74:15 | urlTainted [relativePath] : |
| url.swift:59:19:59:38 | call to init(string:) [relativeString] : | url.swift:75:15:75:15 | urlTainted [relativeString] : |
| url.swift:59:19:59:38 | call to init(string:) [scheme] : | url.swift:76:15:76:15 | urlTainted [scheme] : |
| url.swift:59:19:59:38 | call to init(string:) [standardizedFileURL] : | url.swift:78:12:78:12 | urlTainted [standardizedFileURL] : |
| url.swift:59:19:59:38 | call to init(string:) [standardized] : | url.swift:77:12:77:12 | urlTainted [standardized] : |
| url.swift:59:19:59:38 | call to init(string:) [user] : | url.swift:79:15:79:15 | urlTainted [user] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [absoluteURL] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [fragment] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [host] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [lastPathComponent] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [password] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [pathComponents] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [pathExtension] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [path] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [port] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [query] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [relativePath] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [relativeString] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [scheme] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [standardizedFileURL] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [standardized] : |
| url.swift:59:31:59:31 | tainted : | url.swift:59:19:59:38 | call to init(string:) [user] : |
| url.swift:63:12:63:12 | urlTainted [absoluteURL] : | url.swift:63:12:63:23 | .absoluteURL |
| url.swift:66:15:66:15 | urlTainted [fragment] : | url.swift:66:15:66:26 | .fragment : |
| url.swift:66:15:66:26 | .fragment : | url.swift:66:15:66:34 | ...! |
| url.swift:67:15:67:15 | urlTainted [host] : | url.swift:67:15:67:26 | .host : |
| url.swift:67:15:67:26 | .host : | url.swift:67:15:67:30 | ...! |
| url.swift:68:15:68:15 | urlTainted [lastPathComponent] : | url.swift:68:15:68:26 | .lastPathComponent |
| url.swift:69:15:69:15 | urlTainted [path] : | url.swift:69:15:69:26 | .path |
| url.swift:70:15:70:15 | urlTainted [pathComponents] : | url.swift:70:15:70:26 | .pathComponents : |
| url.swift:70:15:70:26 | .pathComponents : | url.swift:70:15:70:42 | ...[...] |
| url.swift:71:15:71:15 | urlTainted [pathExtension] : | url.swift:71:15:71:26 | .pathExtension |
| url.swift:72:12:72:12 | urlTainted [port] : | url.swift:72:12:72:23 | .port : |
| url.swift:72:12:72:23 | .port : | url.swift:72:12:72:27 | ...! |
| url.swift:73:15:73:15 | urlTainted [query] : | url.swift:73:15:73:26 | .query : |
| url.swift:73:15:73:26 | .query : | url.swift:73:15:73:31 | ...! |
| url.swift:74:15:74:15 | urlTainted [relativePath] : | url.swift:74:15:74:26 | .relativePath |
| url.swift:75:15:75:15 | urlTainted [relativeString] : | url.swift:75:15:75:26 | .relativeString |
| url.swift:76:15:76:15 | urlTainted [scheme] : | url.swift:76:15:76:26 | .scheme : |
| url.swift:76:15:76:26 | .scheme : | url.swift:76:15:76:32 | ...! |
| url.swift:77:12:77:12 | urlTainted [standardized] : | url.swift:77:12:77:23 | .standardized |
| url.swift:78:12:78:12 | urlTainted [standardizedFileURL] : | url.swift:78:12:78:23 | .standardizedFileURL |
| url.swift:79:15:79:15 | urlTainted [user] : | url.swift:79:15:79:26 | .user : |
| url.swift:79:15:79:26 | .user : | url.swift:79:15:79:30 | ...! |
| url.swift:80:15:80:15 | urlTainted [password] : | url.swift:80:15:80:26 | .password : |
| url.swift:80:15:80:26 | .password : | url.swift:80:15:80:34 | ...! |
| url.swift:83:12:83:48 | call to init(string:relativeTo:) : | url.swift:83:12:83:49 | ...! |
| url.swift:83:24:83:24 | tainted : | url.swift:9:2:9:43 | [summary param] 0 in init(string:relativeTo:) : |
| url.swift:83:24:83:24 | tainted : | url.swift:9:8:9:16 | string : |
| url.swift:83:24:83:24 | tainted : | url.swift:83:12:83:48 | call to init(string:relativeTo:) : |
| url.swift:86:12:86:53 | call to init(string:relativeTo:) [absoluteURL] : | url.swift:86:12:86:54 | ...! [absoluteURL] : |
| url.swift:86:12:86:54 | ...! [absoluteURL] : | url.swift:86:12:86:56 | .absoluteURL |
| url.swift:86:12:86:53 | call to init(string:relativeTo:) : | url.swift:86:12:86:56 | .absoluteURL |
| url.swift:86:43:86:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:86:43:86:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:86:43:86:43 | urlTainted : | url.swift:86:12:86:53 | call to init(string:relativeTo:) [absoluteURL] : |
| url.swift:87:12:87:53 | call to init(string:relativeTo:) [baseURL] : | url.swift:87:12:87:54 | ...! [baseURL] : |
| url.swift:87:12:87:54 | ...! [baseURL] : | url.swift:87:12:87:56 | .baseURL |
| url.swift:86:43:86:43 | urlTainted : | url.swift:86:12:86:53 | call to init(string:relativeTo:) : |
| url.swift:87:12:87:53 | call to init(string:relativeTo:) : | url.swift:87:12:87:56 | .baseURL |
| url.swift:87:43:87:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:87:43:87:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:87:43:87:43 | urlTainted : | url.swift:87:12:87:53 | call to init(string:relativeTo:) [baseURL] : |
| url.swift:89:15:89:56 | call to init(string:relativeTo:) [host] : | url.swift:89:15:89:57 | ...! [host] : |
| url.swift:89:15:89:57 | ...! [host] : | url.swift:89:15:89:59 | .host : |
| url.swift:89:15:89:59 | .host : | url.swift:89:15:89:63 | ...! |
| url.swift:87:43:87:43 | urlTainted : | url.swift:87:12:87:53 | call to init(string:relativeTo:) : |
| url.swift:88:15:88:56 | call to init(string:relativeTo:) : | url.swift:88:15:88:67 | ...! |
| url.swift:88:46:88:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:88:46:88:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:88:46:88:46 | urlTainted : | url.swift:88:15:88:56 | call to init(string:relativeTo:) : |
| url.swift:89:15:89:56 | call to init(string:relativeTo:) : | url.swift:89:15:89:63 | ...! |
| url.swift:89:46:89:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:89:46:89:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:89:46:89:46 | urlTainted : | url.swift:89:15:89:56 | call to init(string:relativeTo:) [host] : |
| url.swift:94:12:94:53 | call to init(string:relativeTo:) [port] : | url.swift:94:12:94:54 | ...! [port] : |
| url.swift:94:12:94:54 | ...! [port] : | url.swift:94:12:94:56 | .port : |
| url.swift:94:12:94:56 | .port : | url.swift:94:12:94:60 | ...! |
| url.swift:89:46:89:46 | urlTainted : | url.swift:89:15:89:56 | call to init(string:relativeTo:) : |
| url.swift:90:15:90:56 | call to init(string:relativeTo:) : | url.swift:90:15:90:59 | .lastPathComponent |
| url.swift:90:46:90:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:90:46:90:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:90:46:90:46 | urlTainted : | url.swift:90:15:90:56 | call to init(string:relativeTo:) : |
| url.swift:91:15:91:56 | call to init(string:relativeTo:) : | url.swift:91:15:91:59 | .path |
| url.swift:91:46:91:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:91:46:91:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:91:46:91:46 | urlTainted : | url.swift:91:15:91:56 | call to init(string:relativeTo:) : |
| url.swift:92:15:92:56 | call to init(string:relativeTo:) : | url.swift:92:15:92:75 | ...[...] |
| url.swift:92:46:92:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:92:46:92:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:92:46:92:46 | urlTainted : | url.swift:92:15:92:56 | call to init(string:relativeTo:) : |
| url.swift:93:15:93:56 | call to init(string:relativeTo:) : | url.swift:93:15:93:59 | .pathExtension |
| url.swift:93:46:93:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:93:46:93:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:93:46:93:46 | urlTainted : | url.swift:93:15:93:56 | call to init(string:relativeTo:) : |
| url.swift:94:12:94:53 | call to init(string:relativeTo:) : | url.swift:94:12:94:60 | ...! |
| url.swift:94:43:94:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:94:43:94:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:94:43:94:43 | urlTainted : | url.swift:94:12:94:53 | call to init(string:relativeTo:) [port] : |
| url.swift:98:15:98:56 | call to init(string:relativeTo:) [scheme] : | url.swift:98:15:98:57 | ...! [scheme] : |
| url.swift:98:15:98:57 | ...! [scheme] : | url.swift:98:15:98:59 | .scheme : |
| url.swift:98:15:98:59 | .scheme : | url.swift:98:15:98:65 | ...! |
| url.swift:94:43:94:43 | urlTainted : | url.swift:94:12:94:53 | call to init(string:relativeTo:) : |
| url.swift:95:15:95:56 | call to init(string:relativeTo:) : | url.swift:95:15:95:64 | ...! |
| url.swift:95:46:95:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:95:46:95:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:95:46:95:46 | urlTainted : | url.swift:95:15:95:56 | call to init(string:relativeTo:) : |
| url.swift:96:15:96:56 | call to init(string:relativeTo:) : | url.swift:96:15:96:59 | .relativePath |
| url.swift:96:46:96:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:96:46:96:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:96:46:96:46 | urlTainted : | url.swift:96:15:96:56 | call to init(string:relativeTo:) : |
| url.swift:97:15:97:56 | call to init(string:relativeTo:) : | url.swift:97:15:97:59 | .relativeString |
| url.swift:97:46:97:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:97:46:97:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:97:46:97:46 | urlTainted : | url.swift:97:15:97:56 | call to init(string:relativeTo:) : |
| url.swift:98:15:98:56 | call to init(string:relativeTo:) : | url.swift:98:15:98:65 | ...! |
| url.swift:98:46:98:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:98:46:98:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:98:46:98:46 | urlTainted : | url.swift:98:15:98:56 | call to init(string:relativeTo:) [scheme] : |
| url.swift:99:12:99:53 | call to init(string:relativeTo:) [standardized] : | url.swift:99:12:99:54 | ...! [standardized] : |
| url.swift:99:12:99:54 | ...! [standardized] : | url.swift:99:12:99:56 | .standardized |
| url.swift:98:46:98:46 | urlTainted : | url.swift:98:15:98:56 | call to init(string:relativeTo:) : |
| url.swift:99:12:99:53 | call to init(string:relativeTo:) : | url.swift:99:12:99:56 | .standardized |
| url.swift:99:43:99:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:99:43:99:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:99:43:99:43 | urlTainted : | url.swift:99:12:99:53 | call to init(string:relativeTo:) [standardized] : |
| url.swift:100:12:100:53 | call to init(string:relativeTo:) [standardizedFileURL] : | url.swift:100:12:100:54 | ...! [standardizedFileURL] : |
| url.swift:100:12:100:54 | ...! [standardizedFileURL] : | url.swift:100:12:100:56 | .standardizedFileURL |
| url.swift:99:43:99:43 | urlTainted : | url.swift:99:12:99:53 | call to init(string:relativeTo:) : |
| url.swift:100:12:100:53 | call to init(string:relativeTo:) : | url.swift:100:12:100:56 | .standardizedFileURL |
| url.swift:100:43:100:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:100:43:100:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:100:43:100:43 | urlTainted : | url.swift:100:12:100:53 | call to init(string:relativeTo:) [standardizedFileURL] : |
| url.swift:101:15:101:56 | call to init(string:relativeTo:) [user] : | url.swift:101:15:101:57 | ...! [user] : |
| url.swift:101:15:101:57 | ...! [user] : | url.swift:101:15:101:59 | .user : |
| url.swift:101:15:101:59 | .user : | url.swift:101:15:101:63 | ...! |
| url.swift:100:43:100:43 | urlTainted : | url.swift:100:12:100:53 | call to init(string:relativeTo:) : |
| url.swift:101:15:101:56 | call to init(string:relativeTo:) : | url.swift:101:15:101:63 | ...! |
| url.swift:101:46:101:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:101:46:101:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:101:46:101:46 | urlTainted : | url.swift:101:15:101:56 | call to init(string:relativeTo:) [user] : |
| url.swift:102:15:102:56 | call to init(string:relativeTo:) [password] : | url.swift:102:15:102:57 | ...! [password] : |
| url.swift:102:15:102:57 | ...! [password] : | url.swift:102:15:102:59 | .password : |
| url.swift:102:15:102:59 | .password : | url.swift:102:15:102:67 | ...! |
| url.swift:101:46:101:46 | urlTainted : | url.swift:101:15:101:56 | call to init(string:relativeTo:) : |
| url.swift:102:15:102:56 | call to init(string:relativeTo:) : | url.swift:102:15:102:67 | ...! |
| url.swift:102:46:102:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : |
| url.swift:102:46:102:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : |
| url.swift:102:46:102:46 | urlTainted : | url.swift:102:15:102:56 | call to init(string:relativeTo:) [password] : |
| url.swift:102:46:102:46 | urlTainted : | url.swift:102:15:102:56 | call to init(string:relativeTo:) : |
| url.swift:117:16:117:35 | call to init(string:) : | url.swift:118:12:118:12 | ...! |
| url.swift:117:28:117:28 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : |
| url.swift:117:28:117:28 | tainted : | url.swift:8:8:8:16 | string : |
@@ -259,108 +148,10 @@ nodes
| file://:0:0:0:0 | [summary] to write: argument 1.parameter 0 in dataTask(with:completionHandler:) : | semmle.label | [summary] to write: argument 1.parameter 0 in dataTask(with:completionHandler:) : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) : | semmle.label | [summary] to write: return (return) in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) : | semmle.label | [summary] to write: return (return) in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [absoluteURL] : | semmle.label | [summary] to write: return (return) in init(string:) [absoluteURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [absoluteURL] : | semmle.label | [summary] to write: return (return) in init(string:) [absoluteURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [fragment] : | semmle.label | [summary] to write: return (return) in init(string:) [fragment] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [fragment] : | semmle.label | [summary] to write: return (return) in init(string:) [fragment] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [host] : | semmle.label | [summary] to write: return (return) in init(string:) [host] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [host] : | semmle.label | [summary] to write: return (return) in init(string:) [host] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [lastPathComponent] : | semmle.label | [summary] to write: return (return) in init(string:) [lastPathComponent] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [lastPathComponent] : | semmle.label | [summary] to write: return (return) in init(string:) [lastPathComponent] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [password] : | semmle.label | [summary] to write: return (return) in init(string:) [password] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [password] : | semmle.label | [summary] to write: return (return) in init(string:) [password] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathComponents] : | semmle.label | [summary] to write: return (return) in init(string:) [pathComponents] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathComponents] : | semmle.label | [summary] to write: return (return) in init(string:) [pathComponents] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathExtension] : | semmle.label | [summary] to write: return (return) in init(string:) [pathExtension] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathExtension] : | semmle.label | [summary] to write: return (return) in init(string:) [pathExtension] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [path] : | semmle.label | [summary] to write: return (return) in init(string:) [path] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [path] : | semmle.label | [summary] to write: return (return) in init(string:) [path] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [port] : | semmle.label | [summary] to write: return (return) in init(string:) [port] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [port] : | semmle.label | [summary] to write: return (return) in init(string:) [port] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [query] : | semmle.label | [summary] to write: return (return) in init(string:) [query] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [query] : | semmle.label | [summary] to write: return (return) in init(string:) [query] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativePath] : | semmle.label | [summary] to write: return (return) in init(string:) [relativePath] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativePath] : | semmle.label | [summary] to write: return (return) in init(string:) [relativePath] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativeString] : | semmle.label | [summary] to write: return (return) in init(string:) [relativeString] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativeString] : | semmle.label | [summary] to write: return (return) in init(string:) [relativeString] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [scheme] : | semmle.label | [summary] to write: return (return) in init(string:) [scheme] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [scheme] : | semmle.label | [summary] to write: return (return) in init(string:) [scheme] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardizedFileURL] : | semmle.label | [summary] to write: return (return) in init(string:) [standardizedFileURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardizedFileURL] : | semmle.label | [summary] to write: return (return) in init(string:) [standardizedFileURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardized] : | semmle.label | [summary] to write: return (return) in init(string:) [standardized] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardized] : | semmle.label | [summary] to write: return (return) in init(string:) [standardized] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [user] : | semmle.label | [summary] to write: return (return) in init(string:) [user] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [user] : | semmle.label | [summary] to write: return (return) in init(string:) [user] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [absoluteURL] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [absoluteURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [absoluteURL] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [absoluteURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [baseURL] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [baseURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [baseURL] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [baseURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [host] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [host] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [host] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [host] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [password] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [password] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [password] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [password] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [port] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [port] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [port] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [port] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [scheme] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [scheme] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [scheme] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [scheme] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardizedFileURL] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [standardizedFileURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardizedFileURL] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [standardizedFileURL] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardized] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [standardized] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardized] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [standardized] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [user] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [user] : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [user] : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) [user] : |
| file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:) : | semmle.label | [summary] to write: return (return).absoluteURL in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:) : | semmle.label | [summary] to write: return (return).absoluteURL in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).absoluteURL in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).absoluteURL in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).absoluteURL in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).baseURL in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).baseURL in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).baseURL in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).baseURL in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).fragment in init(string:) : | semmle.label | [summary] to write: return (return).fragment in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).fragment in init(string:) : | semmle.label | [summary] to write: return (return).fragment in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).host in init(string:) : | semmle.label | [summary] to write: return (return).host in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).host in init(string:) : | semmle.label | [summary] to write: return (return).host in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).host in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).host in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).host in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).host in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).lastPathComponent in init(string:) : | semmle.label | [summary] to write: return (return).lastPathComponent in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).lastPathComponent in init(string:) : | semmle.label | [summary] to write: return (return).lastPathComponent in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).password in init(string:) : | semmle.label | [summary] to write: return (return).password in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).password in init(string:) : | semmle.label | [summary] to write: return (return).password in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).password in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).password in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).password in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).password in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).path in init(string:) : | semmle.label | [summary] to write: return (return).path in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).path in init(string:) : | semmle.label | [summary] to write: return (return).path in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).pathComponents in init(string:) : | semmle.label | [summary] to write: return (return).pathComponents in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).pathComponents in init(string:) : | semmle.label | [summary] to write: return (return).pathComponents in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).pathExtension in init(string:) : | semmle.label | [summary] to write: return (return).pathExtension in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).pathExtension in init(string:) : | semmle.label | [summary] to write: return (return).pathExtension in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).port in init(string:) : | semmle.label | [summary] to write: return (return).port in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).port in init(string:) : | semmle.label | [summary] to write: return (return).port in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).port in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).port in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).port in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).port in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).query in init(string:) : | semmle.label | [summary] to write: return (return).query in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).query in init(string:) : | semmle.label | [summary] to write: return (return).query in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).relativePath in init(string:) : | semmle.label | [summary] to write: return (return).relativePath in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).relativePath in init(string:) : | semmle.label | [summary] to write: return (return).relativePath in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).relativeString in init(string:) : | semmle.label | [summary] to write: return (return).relativeString in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).relativeString in init(string:) : | semmle.label | [summary] to write: return (return).relativeString in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:) : | semmle.label | [summary] to write: return (return).scheme in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:) : | semmle.label | [summary] to write: return (return).scheme in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).scheme in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).scheme in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).scheme in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:) : | semmle.label | [summary] to write: return (return).standardized in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:) : | semmle.label | [summary] to write: return (return).standardized in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).standardized in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).standardized in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).standardized in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:) : | semmle.label | [summary] to write: return (return).standardizedFileURL in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:) : | semmle.label | [summary] to write: return (return).standardizedFileURL in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).standardizedFileURL in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).standardizedFileURL in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).standardizedFileURL in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).user in init(string:) : | semmle.label | [summary] to write: return (return).user in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).user in init(string:) : | semmle.label | [summary] to write: return (return).user in init(string:) : |
| file://:0:0:0:0 | [summary] to write: return (return).user in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).user in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return).user in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return).user in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) : |
| file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | semmle.label | [summary] to write: return (return) in init(string:relativeTo:) : |
| string.swift:5:11:5:18 | call to source() : | semmle.label | call to source() : |
| string.swift:7:13:7:13 | "..." | semmle.label | "..." |
| string.swift:9:13:9:13 | "..." | semmle.label | "..." |
@@ -393,106 +184,77 @@ nodes
| url.swift:44:5:44:15 | url : | semmle.label | url : |
| url.swift:57:16:57:23 | call to source() : | semmle.label | call to source() : |
| url.swift:59:19:59:38 | call to init(string:) : | semmle.label | call to init(string:) : |
| url.swift:59:19:59:38 | call to init(string:) [absoluteURL] : | semmle.label | call to init(string:) [absoluteURL] : |
| url.swift:59:19:59:38 | call to init(string:) [fragment] : | semmle.label | call to init(string:) [fragment] : |
| url.swift:59:19:59:38 | call to init(string:) [host] : | semmle.label | call to init(string:) [host] : |
| url.swift:59:19:59:38 | call to init(string:) [lastPathComponent] : | semmle.label | call to init(string:) [lastPathComponent] : |
| url.swift:59:19:59:38 | call to init(string:) [password] : | semmle.label | call to init(string:) [password] : |
| url.swift:59:19:59:38 | call to init(string:) [pathComponents] : | semmle.label | call to init(string:) [pathComponents] : |
| url.swift:59:19:59:38 | call to init(string:) [pathExtension] : | semmle.label | call to init(string:) [pathExtension] : |
| url.swift:59:19:59:38 | call to init(string:) [path] : | semmle.label | call to init(string:) [path] : |
| url.swift:59:19:59:38 | call to init(string:) [port] : | semmle.label | call to init(string:) [port] : |
| url.swift:59:19:59:38 | call to init(string:) [query] : | semmle.label | call to init(string:) [query] : |
| url.swift:59:19:59:38 | call to init(string:) [relativePath] : | semmle.label | call to init(string:) [relativePath] : |
| url.swift:59:19:59:38 | call to init(string:) [relativeString] : | semmle.label | call to init(string:) [relativeString] : |
| url.swift:59:19:59:38 | call to init(string:) [scheme] : | semmle.label | call to init(string:) [scheme] : |
| url.swift:59:19:59:38 | call to init(string:) [standardizedFileURL] : | semmle.label | call to init(string:) [standardizedFileURL] : |
| url.swift:59:19:59:38 | call to init(string:) [standardized] : | semmle.label | call to init(string:) [standardized] : |
| url.swift:59:19:59:38 | call to init(string:) [user] : | semmle.label | call to init(string:) [user] : |
| url.swift:59:31:59:31 | tainted : | semmle.label | tainted : |
| url.swift:62:12:62:12 | urlTainted | semmle.label | urlTainted |
| url.swift:63:12:63:12 | urlTainted [absoluteURL] : | semmle.label | urlTainted [absoluteURL] : |
| url.swift:63:12:63:23 | .absoluteURL | semmle.label | .absoluteURL |
| url.swift:66:15:66:15 | urlTainted [fragment] : | semmle.label | urlTainted [fragment] : |
| url.swift:66:15:66:26 | .fragment : | semmle.label | .fragment : |
| url.swift:64:12:64:23 | .absoluteURL | semmle.label | .absoluteURL |
| url.swift:65:12:65:23 | .baseURL | semmle.label | .baseURL |
| url.swift:66:15:66:34 | ...! | semmle.label | ...! |
| url.swift:67:15:67:15 | urlTainted [host] : | semmle.label | urlTainted [host] : |
| url.swift:67:15:67:26 | .host : | semmle.label | .host : |
| url.swift:67:15:67:30 | ...! | semmle.label | ...! |
| url.swift:68:15:68:15 | urlTainted [lastPathComponent] : | semmle.label | urlTainted [lastPathComponent] : |
| url.swift:68:15:68:26 | .lastPathComponent | semmle.label | .lastPathComponent |
| url.swift:69:15:69:15 | urlTainted [path] : | semmle.label | urlTainted [path] : |
| url.swift:69:15:69:26 | .path | semmle.label | .path |
| url.swift:70:15:70:15 | urlTainted [pathComponents] : | semmle.label | urlTainted [pathComponents] : |
| url.swift:70:15:70:26 | .pathComponents : | semmle.label | .pathComponents : |
| url.swift:70:15:70:42 | ...[...] | semmle.label | ...[...] |
| url.swift:71:15:71:15 | urlTainted [pathExtension] : | semmle.label | urlTainted [pathExtension] : |
| url.swift:71:15:71:26 | .pathExtension | semmle.label | .pathExtension |
| url.swift:72:12:72:12 | urlTainted [port] : | semmle.label | urlTainted [port] : |
| url.swift:72:12:72:23 | .port : | semmle.label | .port : |
| url.swift:72:12:72:27 | ...! | semmle.label | ...! |
| url.swift:73:15:73:15 | urlTainted [query] : | semmle.label | urlTainted [query] : |
| url.swift:73:15:73:26 | .query : | semmle.label | .query : |
| url.swift:73:15:73:31 | ...! | semmle.label | ...! |
| url.swift:74:15:74:15 | urlTainted [relativePath] : | semmle.label | urlTainted [relativePath] : |
| url.swift:74:15:74:26 | .relativePath | semmle.label | .relativePath |
| url.swift:75:15:75:15 | urlTainted [relativeString] : | semmle.label | urlTainted [relativeString] : |
| url.swift:75:15:75:26 | .relativeString | semmle.label | .relativeString |
| url.swift:76:15:76:15 | urlTainted [scheme] : | semmle.label | urlTainted [scheme] : |
| url.swift:76:15:76:26 | .scheme : | semmle.label | .scheme : |
| url.swift:76:15:76:32 | ...! | semmle.label | ...! |
| url.swift:77:12:77:12 | urlTainted [standardized] : | semmle.label | urlTainted [standardized] : |
| url.swift:77:12:77:23 | .standardized | semmle.label | .standardized |
| url.swift:78:12:78:12 | urlTainted [standardizedFileURL] : | semmle.label | urlTainted [standardizedFileURL] : |
| url.swift:78:12:78:23 | .standardizedFileURL | semmle.label | .standardizedFileURL |
| url.swift:79:15:79:15 | urlTainted [user] : | semmle.label | urlTainted [user] : |
| url.swift:79:15:79:26 | .user : | semmle.label | .user : |
| url.swift:79:15:79:30 | ...! | semmle.label | ...! |
| url.swift:80:15:80:15 | urlTainted [password] : | semmle.label | urlTainted [password] : |
| url.swift:80:15:80:26 | .password : | semmle.label | .password : |
| url.swift:80:15:80:34 | ...! | semmle.label | ...! |
| url.swift:83:12:83:48 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:83:12:83:49 | ...! | semmle.label | ...! |
| url.swift:83:24:83:24 | tainted : | semmle.label | tainted : |
| url.swift:86:12:86:53 | call to init(string:relativeTo:) [absoluteURL] : | semmle.label | call to init(string:relativeTo:) [absoluteURL] : |
| url.swift:86:12:86:54 | ...! [absoluteURL] : | semmle.label | ...! [absoluteURL] : |
| url.swift:86:12:86:53 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:86:12:86:56 | .absoluteURL | semmle.label | .absoluteURL |
| url.swift:86:43:86:43 | urlTainted : | semmle.label | urlTainted : |
| url.swift:87:12:87:53 | call to init(string:relativeTo:) [baseURL] : | semmle.label | call to init(string:relativeTo:) [baseURL] : |
| url.swift:87:12:87:54 | ...! [baseURL] : | semmle.label | ...! [baseURL] : |
| url.swift:87:12:87:53 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:87:12:87:56 | .baseURL | semmle.label | .baseURL |
| url.swift:87:43:87:43 | urlTainted : | semmle.label | urlTainted : |
| url.swift:89:15:89:56 | call to init(string:relativeTo:) [host] : | semmle.label | call to init(string:relativeTo:) [host] : |
| url.swift:89:15:89:57 | ...! [host] : | semmle.label | ...! [host] : |
| url.swift:89:15:89:59 | .host : | semmle.label | .host : |
| url.swift:88:15:88:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:88:15:88:67 | ...! | semmle.label | ...! |
| url.swift:88:46:88:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:89:15:89:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:89:15:89:63 | ...! | semmle.label | ...! |
| url.swift:89:46:89:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:94:12:94:53 | call to init(string:relativeTo:) [port] : | semmle.label | call to init(string:relativeTo:) [port] : |
| url.swift:94:12:94:54 | ...! [port] : | semmle.label | ...! [port] : |
| url.swift:94:12:94:56 | .port : | semmle.label | .port : |
| url.swift:90:15:90:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:90:15:90:59 | .lastPathComponent | semmle.label | .lastPathComponent |
| url.swift:90:46:90:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:91:15:91:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:91:15:91:59 | .path | semmle.label | .path |
| url.swift:91:46:91:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:92:15:92:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:92:15:92:75 | ...[...] | semmle.label | ...[...] |
| url.swift:92:46:92:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:93:15:93:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:93:15:93:59 | .pathExtension | semmle.label | .pathExtension |
| url.swift:93:46:93:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:94:12:94:53 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:94:12:94:60 | ...! | semmle.label | ...! |
| url.swift:94:43:94:43 | urlTainted : | semmle.label | urlTainted : |
| url.swift:98:15:98:56 | call to init(string:relativeTo:) [scheme] : | semmle.label | call to init(string:relativeTo:) [scheme] : |
| url.swift:98:15:98:57 | ...! [scheme] : | semmle.label | ...! [scheme] : |
| url.swift:98:15:98:59 | .scheme : | semmle.label | .scheme : |
| url.swift:95:15:95:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:95:15:95:64 | ...! | semmle.label | ...! |
| url.swift:95:46:95:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:96:15:96:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:96:15:96:59 | .relativePath | semmle.label | .relativePath |
| url.swift:96:46:96:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:97:15:97:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:97:15:97:59 | .relativeString | semmle.label | .relativeString |
| url.swift:97:46:97:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:98:15:98:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:98:15:98:65 | ...! | semmle.label | ...! |
| url.swift:98:46:98:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:99:12:99:53 | call to init(string:relativeTo:) [standardized] : | semmle.label | call to init(string:relativeTo:) [standardized] : |
| url.swift:99:12:99:54 | ...! [standardized] : | semmle.label | ...! [standardized] : |
| url.swift:99:12:99:53 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:99:12:99:56 | .standardized | semmle.label | .standardized |
| url.swift:99:43:99:43 | urlTainted : | semmle.label | urlTainted : |
| url.swift:100:12:100:53 | call to init(string:relativeTo:) [standardizedFileURL] : | semmle.label | call to init(string:relativeTo:) [standardizedFileURL] : |
| url.swift:100:12:100:54 | ...! [standardizedFileURL] : | semmle.label | ...! [standardizedFileURL] : |
| url.swift:100:12:100:53 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:100:12:100:56 | .standardizedFileURL | semmle.label | .standardizedFileURL |
| url.swift:100:43:100:43 | urlTainted : | semmle.label | urlTainted : |
| url.swift:101:15:101:56 | call to init(string:relativeTo:) [user] : | semmle.label | call to init(string:relativeTo:) [user] : |
| url.swift:101:15:101:57 | ...! [user] : | semmle.label | ...! [user] : |
| url.swift:101:15:101:59 | .user : | semmle.label | .user : |
| url.swift:101:15:101:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:101:15:101:63 | ...! | semmle.label | ...! |
| url.swift:101:46:101:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:102:15:102:56 | call to init(string:relativeTo:) [password] : | semmle.label | call to init(string:relativeTo:) [password] : |
| url.swift:102:15:102:57 | ...! [password] : | semmle.label | ...! [password] : |
| url.swift:102:15:102:59 | .password : | semmle.label | .password : |
| url.swift:102:15:102:56 | call to init(string:relativeTo:) : | semmle.label | call to init(string:relativeTo:) : |
| url.swift:102:15:102:67 | ...! | semmle.label | ...! |
| url.swift:102:46:102:46 | urlTainted : | semmle.label | urlTainted : |
| url.swift:117:16:117:35 | call to init(string:) : | semmle.label | call to init(string:) : |
@@ -503,59 +265,43 @@ nodes
| url.swift:121:15:121:19 | ...! | semmle.label | ...! |
subpaths
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) : | url.swift:59:19:59:38 | call to init(string:) : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [absoluteURL] : | url.swift:59:19:59:38 | call to init(string:) [absoluteURL] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [fragment] : | url.swift:59:19:59:38 | call to init(string:) [fragment] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [host] : | url.swift:59:19:59:38 | call to init(string:) [host] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [lastPathComponent] : | url.swift:59:19:59:38 | call to init(string:) [lastPathComponent] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [password] : | url.swift:59:19:59:38 | call to init(string:) [password] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathComponents] : | url.swift:59:19:59:38 | call to init(string:) [pathComponents] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathExtension] : | url.swift:59:19:59:38 | call to init(string:) [pathExtension] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [path] : | url.swift:59:19:59:38 | call to init(string:) [path] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [port] : | url.swift:59:19:59:38 | call to init(string:) [port] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [query] : | url.swift:59:19:59:38 | call to init(string:) [query] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativePath] : | url.swift:59:19:59:38 | call to init(string:) [relativePath] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativeString] : | url.swift:59:19:59:38 | call to init(string:) [relativeString] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [scheme] : | url.swift:59:19:59:38 | call to init(string:) [scheme] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardizedFileURL] : | url.swift:59:19:59:38 | call to init(string:) [standardizedFileURL] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardized] : | url.swift:59:19:59:38 | call to init(string:) [standardized] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [user] : | url.swift:59:19:59:38 | call to init(string:) [user] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) : | url.swift:59:19:59:38 | call to init(string:) : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [absoluteURL] : | url.swift:59:19:59:38 | call to init(string:) [absoluteURL] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [fragment] : | url.swift:59:19:59:38 | call to init(string:) [fragment] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [host] : | url.swift:59:19:59:38 | call to init(string:) [host] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [lastPathComponent] : | url.swift:59:19:59:38 | call to init(string:) [lastPathComponent] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [password] : | url.swift:59:19:59:38 | call to init(string:) [password] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathComponents] : | url.swift:59:19:59:38 | call to init(string:) [pathComponents] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [pathExtension] : | url.swift:59:19:59:38 | call to init(string:) [pathExtension] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [path] : | url.swift:59:19:59:38 | call to init(string:) [path] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [port] : | url.swift:59:19:59:38 | call to init(string:) [port] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [query] : | url.swift:59:19:59:38 | call to init(string:) [query] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativePath] : | url.swift:59:19:59:38 | call to init(string:) [relativePath] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [relativeString] : | url.swift:59:19:59:38 | call to init(string:) [relativeString] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [scheme] : | url.swift:59:19:59:38 | call to init(string:) [scheme] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardizedFileURL] : | url.swift:59:19:59:38 | call to init(string:) [standardizedFileURL] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [standardized] : | url.swift:59:19:59:38 | call to init(string:) [standardized] : |
| url.swift:59:31:59:31 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) [user] : | url.swift:59:19:59:38 | call to init(string:) [user] : |
| url.swift:83:24:83:24 | tainted : | url.swift:9:2:9:43 | [summary param] 0 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:83:12:83:48 | call to init(string:relativeTo:) : |
| url.swift:83:24:83:24 | tainted : | url.swift:9:8:9:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:83:12:83:48 | call to init(string:relativeTo:) : |
| url.swift:86:43:86:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [absoluteURL] : | url.swift:86:12:86:53 | call to init(string:relativeTo:) [absoluteURL] : |
| url.swift:86:43:86:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [absoluteURL] : | url.swift:86:12:86:53 | call to init(string:relativeTo:) [absoluteURL] : |
| url.swift:87:43:87:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [baseURL] : | url.swift:87:12:87:53 | call to init(string:relativeTo:) [baseURL] : |
| url.swift:87:43:87:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [baseURL] : | url.swift:87:12:87:53 | call to init(string:relativeTo:) [baseURL] : |
| url.swift:89:46:89:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [host] : | url.swift:89:15:89:56 | call to init(string:relativeTo:) [host] : |
| url.swift:89:46:89:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [host] : | url.swift:89:15:89:56 | call to init(string:relativeTo:) [host] : |
| url.swift:94:43:94:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [port] : | url.swift:94:12:94:53 | call to init(string:relativeTo:) [port] : |
| url.swift:94:43:94:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [port] : | url.swift:94:12:94:53 | call to init(string:relativeTo:) [port] : |
| url.swift:98:46:98:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [scheme] : | url.swift:98:15:98:56 | call to init(string:relativeTo:) [scheme] : |
| url.swift:98:46:98:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [scheme] : | url.swift:98:15:98:56 | call to init(string:relativeTo:) [scheme] : |
| url.swift:99:43:99:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardized] : | url.swift:99:12:99:53 | call to init(string:relativeTo:) [standardized] : |
| url.swift:99:43:99:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardized] : | url.swift:99:12:99:53 | call to init(string:relativeTo:) [standardized] : |
| url.swift:100:43:100:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardizedFileURL] : | url.swift:100:12:100:53 | call to init(string:relativeTo:) [standardizedFileURL] : |
| url.swift:100:43:100:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [standardizedFileURL] : | url.swift:100:12:100:53 | call to init(string:relativeTo:) [standardizedFileURL] : |
| url.swift:101:46:101:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [user] : | url.swift:101:15:101:56 | call to init(string:relativeTo:) [user] : |
| url.swift:101:46:101:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [user] : | url.swift:101:15:101:56 | call to init(string:relativeTo:) [user] : |
| url.swift:102:46:102:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [password] : | url.swift:102:15:102:56 | call to init(string:relativeTo:) [password] : |
| url.swift:102:46:102:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) [password] : | url.swift:102:15:102:56 | call to init(string:relativeTo:) [password] : |
| url.swift:86:43:86:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:86:12:86:53 | call to init(string:relativeTo:) : |
| url.swift:86:43:86:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:86:12:86:53 | call to init(string:relativeTo:) : |
| url.swift:87:43:87:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:87:12:87:53 | call to init(string:relativeTo:) : |
| url.swift:87:43:87:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:87:12:87:53 | call to init(string:relativeTo:) : |
| url.swift:88:46:88:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:88:15:88:56 | call to init(string:relativeTo:) : |
| url.swift:88:46:88:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:88:15:88:56 | call to init(string:relativeTo:) : |
| url.swift:89:46:89:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:89:15:89:56 | call to init(string:relativeTo:) : |
| url.swift:89:46:89:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:89:15:89:56 | call to init(string:relativeTo:) : |
| url.swift:90:46:90:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:90:15:90:56 | call to init(string:relativeTo:) : |
| url.swift:90:46:90:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:90:15:90:56 | call to init(string:relativeTo:) : |
| url.swift:91:46:91:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:91:15:91:56 | call to init(string:relativeTo:) : |
| url.swift:91:46:91:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:91:15:91:56 | call to init(string:relativeTo:) : |
| url.swift:92:46:92:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:92:15:92:56 | call to init(string:relativeTo:) : |
| url.swift:92:46:92:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:92:15:92:56 | call to init(string:relativeTo:) : |
| url.swift:93:46:93:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:93:15:93:56 | call to init(string:relativeTo:) : |
| url.swift:93:46:93:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:93:15:93:56 | call to init(string:relativeTo:) : |
| url.swift:94:43:94:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:94:12:94:53 | call to init(string:relativeTo:) : |
| url.swift:94:43:94:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:94:12:94:53 | call to init(string:relativeTo:) : |
| url.swift:95:46:95:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:95:15:95:56 | call to init(string:relativeTo:) : |
| url.swift:95:46:95:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:95:15:95:56 | call to init(string:relativeTo:) : |
| url.swift:96:46:96:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:96:15:96:56 | call to init(string:relativeTo:) : |
| url.swift:96:46:96:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:96:15:96:56 | call to init(string:relativeTo:) : |
| url.swift:97:46:97:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:97:15:97:56 | call to init(string:relativeTo:) : |
| url.swift:97:46:97:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:97:15:97:56 | call to init(string:relativeTo:) : |
| url.swift:98:46:98:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:98:15:98:56 | call to init(string:relativeTo:) : |
| url.swift:98:46:98:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:98:15:98:56 | call to init(string:relativeTo:) : |
| url.swift:99:43:99:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:99:12:99:53 | call to init(string:relativeTo:) : |
| url.swift:99:43:99:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:99:12:99:53 | call to init(string:relativeTo:) : |
| url.swift:100:43:100:43 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:100:12:100:53 | call to init(string:relativeTo:) : |
| url.swift:100:43:100:43 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:100:12:100:53 | call to init(string:relativeTo:) : |
| url.swift:101:46:101:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:101:15:101:56 | call to init(string:relativeTo:) : |
| url.swift:101:46:101:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:101:15:101:56 | call to init(string:relativeTo:) : |
| url.swift:102:46:102:46 | urlTainted : | url.swift:9:2:9:43 | [summary param] 1 in init(string:relativeTo:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:102:15:102:56 | call to init(string:relativeTo:) : |
| url.swift:102:46:102:46 | urlTainted : | url.swift:9:24:9:39 | relativeTo : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:relativeTo:) : | url.swift:102:15:102:56 | call to init(string:relativeTo:) : |
| url.swift:117:28:117:28 | tainted : | url.swift:8:2:8:25 | [summary param] 0 in init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) : | url.swift:117:16:117:35 | call to init(string:) : |
| url.swift:117:28:117:28 | tainted : | url.swift:8:8:8:16 | string : | file://:0:0:0:0 | [summary] to write: return (return) in init(string:) : | url.swift:117:16:117:35 | call to init(string:) : |
#select
@@ -575,7 +321,8 @@ subpaths
| try.swift:15:12:15:24 | try! ... | try.swift:15:17:15:24 | call to source() : | try.swift:15:12:15:24 | try! ... | result |
| try.swift:18:12:18:27 | ...! | try.swift:18:18:18:25 | call to source() : | try.swift:18:12:18:27 | ...! | result |
| url.swift:62:12:62:12 | urlTainted | url.swift:57:16:57:23 | call to source() : | url.swift:62:12:62:12 | urlTainted | result |
| url.swift:63:12:63:23 | .absoluteURL | url.swift:57:16:57:23 | call to source() : | url.swift:63:12:63:23 | .absoluteURL | result |
| url.swift:64:12:64:23 | .absoluteURL | url.swift:57:16:57:23 | call to source() : | url.swift:64:12:64:23 | .absoluteURL | result |
| url.swift:65:12:65:23 | .baseURL | url.swift:57:16:57:23 | call to source() : | url.swift:65:12:65:23 | .baseURL | result |
| url.swift:66:15:66:34 | ...! | url.swift:57:16:57:23 | call to source() : | url.swift:66:15:66:34 | ...! | result |
| url.swift:67:15:67:30 | ...! | url.swift:57:16:57:23 | call to source() : | url.swift:67:15:67:30 | ...! | result |
| url.swift:68:15:68:26 | .lastPathComponent | url.swift:57:16:57:23 | call to source() : | url.swift:68:15:68:26 | .lastPathComponent | result |
@@ -594,8 +341,16 @@ subpaths
| url.swift:83:12:83:49 | ...! | url.swift:57:16:57:23 | call to source() : | url.swift:83:12:83:49 | ...! | result |
| url.swift:86:12:86:56 | .absoluteURL | url.swift:57:16:57:23 | call to source() : | url.swift:86:12:86:56 | .absoluteURL | result |
| url.swift:87:12:87:56 | .baseURL | url.swift:57:16:57:23 | call to source() : | url.swift:87:12:87:56 | .baseURL | result |
| url.swift:88:15:88:67 | ...! | url.swift:57:16:57:23 | call to source() : | url.swift:88:15:88:67 | ...! | result |
| url.swift:89:15:89:63 | ...! | url.swift:57:16:57:23 | call to source() : | url.swift:89:15:89:63 | ...! | result |
| url.swift:90:15:90:59 | .lastPathComponent | url.swift:57:16:57:23 | call to source() : | url.swift:90:15:90:59 | .lastPathComponent | result |
| url.swift:91:15:91:59 | .path | url.swift:57:16:57:23 | call to source() : | url.swift:91:15:91:59 | .path | result |
| url.swift:92:15:92:75 | ...[...] | url.swift:57:16:57:23 | call to source() : | url.swift:92:15:92:75 | ...[...] | result |
| url.swift:93:15:93:59 | .pathExtension | url.swift:57:16:57:23 | call to source() : | url.swift:93:15:93:59 | .pathExtension | result |
| url.swift:94:12:94:60 | ...! | url.swift:57:16:57:23 | call to source() : | url.swift:94:12:94:60 | ...! | result |
| url.swift:95:15:95:64 | ...! | url.swift:57:16:57:23 | call to source() : | url.swift:95:15:95:64 | ...! | result |
| url.swift:96:15:96:59 | .relativePath | url.swift:57:16:57:23 | call to source() : | url.swift:96:15:96:59 | .relativePath | result |
| url.swift:97:15:97:59 | .relativeString | url.swift:57:16:57:23 | call to source() : | url.swift:97:15:97:59 | .relativeString | result |
| url.swift:98:15:98:65 | ...! | url.swift:57:16:57:23 | call to source() : | url.swift:98:15:98:65 | ...! | result |
| url.swift:99:12:99:56 | .standardized | url.swift:57:16:57:23 | call to source() : | url.swift:99:12:99:56 | .standardized | result |
| url.swift:100:12:100:56 | .standardizedFileURL | url.swift:57:16:57:23 | call to source() : | url.swift:100:12:100:56 | .standardizedFileURL | result |

View File

@@ -60,9 +60,9 @@ func taintThroughURL() {
sink(arg: urlClean)
sink(arg: urlTainted) // $ tainted=57
sink(arg: urlTainted.absoluteURL) // $ tainted=57
sink(arg: urlTainted.baseURL) // $ Safe
// Fields
sink(arg: urlTainted.absoluteURL) // $ tainted=57
sink(arg: urlTainted.baseURL) // $ SPURIOUS: $ tainted=57
sink(string: urlTainted.fragment!) // $ tainted=57
sink(string: urlTainted.host!) // $ tainted=57
sink(string: urlTainted.lastPathComponent) // $ tainted=57
@@ -85,16 +85,16 @@ func taintThroughURL() {
// Fields (assuming `clean` was a relative path instead of a full URL)
sink(arg: URL(string: clean, relativeTo: urlTainted)!.absoluteURL) // $ tainted=57
sink(arg: URL(string: clean, relativeTo: urlTainted)!.baseURL) // $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.fragment!) // Safe
sink(string: URL(string: clean, relativeTo: urlTainted)!.fragment!) // $ SPURIOUS: $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.host!) // $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.lastPathComponent) // Safe
sink(string: URL(string: clean, relativeTo: urlTainted)!.path) // Safe
sink(string: URL(string: clean, relativeTo: urlTainted)!.pathComponents[0]) // Safe
sink(string: URL(string: clean, relativeTo: urlTainted)!.pathExtension) // Safe
sink(string: URL(string: clean, relativeTo: urlTainted)!.lastPathComponent) // $ SPURIOUS: $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.path) // $ SPURIOUS: $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.pathComponents[0]) // $ SPURIOUS: $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.pathExtension) // $ SPURIOUS: $ tainted=57
sink(int: URL(string: clean, relativeTo: urlTainted)!.port!) // $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.query!) // Safe
sink(string: URL(string: clean, relativeTo: urlTainted)!.relativePath) // Safe
sink(string: URL(string: clean, relativeTo: urlTainted)!.relativeString) // Safe
sink(string: URL(string: clean, relativeTo: urlTainted)!.query!) // $ SPURIOUS: $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.relativePath) // $ SPURIOUS: $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.relativeString) // $ SPURIOUS: $ tainted=57
sink(string: URL(string: clean, relativeTo: urlTainted)!.scheme!) // $ tainted=57
sink(arg: URL(string: clean, relativeTo: urlTainted)!.standardized) // $ tainted=57
sink(arg: URL(string: clean, relativeTo: urlTainted)!.standardizedFileURL) // $ tainted=57