Merge pull request #12225 from geoffw0/nsstring

Swift: Taint models for NSString
This commit is contained in:
Geoffrey White
2023-03-01 16:30:06 +00:00
committed by GitHub
9 changed files with 2366 additions and 4 deletions

View File

@@ -85,6 +85,8 @@ private module Frameworks {
private import codeql.swift.frameworks.StandardLibrary.FilePath
private import codeql.swift.frameworks.StandardLibrary.InputStream
private import codeql.swift.frameworks.StandardLibrary.NsData
private import codeql.swift.frameworks.StandardLibrary.NsObject
private import codeql.swift.frameworks.StandardLibrary.NsString
private import codeql.swift.frameworks.StandardLibrary.NsUrl
private import codeql.swift.frameworks.StandardLibrary.Sequence
private import codeql.swift.frameworks.StandardLibrary.String

View File

@@ -0,0 +1,23 @@
/**
* Provides models for `NSObject` and related Swift classes.
*/
import swift
private import codeql.swift.dataflow.DataFlow
private import codeql.swift.dataflow.ExternalFlow
private import codeql.swift.dataflow.FlowSteps
/**
* A model for `NSObject`, `NSCopying` and `NSMutableCopying` members that permit taint flow.
*/
private class NsObjectSummaries extends SummaryModelCsv {
override predicate row(string row) {
row =
[
";NSObject;true;copy();;;Argument[-1];ReturnValue;taint",
";NSObject;true;mutableCopy();;;Argument[-1];ReturnValue;taint",
";NSCopying;true;copy(with:);;;Argument[-1];ReturnValue;taint",
";NSMutableCopying;true;mutableCopy(with:);;;Argument[-1];ReturnValue;taint",
]
}
}

View File

@@ -0,0 +1,153 @@
/**
* Provides models for `NSString` and related Swift classes.
*/
import swift
private import codeql.swift.dataflow.DataFlow
private import codeql.swift.dataflow.ExternalFlow
private import codeql.swift.dataflow.FlowSteps
/**
* A model for `NSString` members that are sources of remote flow.
*/
private class NsStringSource extends SourceModelCsv {
override predicate row(string row) {
row =
[
// NSString(contentsOf:) is a remote flow source
";NSString;true;init(contentsOf:);;;ReturnValue;remote",
";NSString;true;init(contentsOf:encoding:);;;ReturnValue;remote",
";NSString;true;init(contentsOf:usedEncoding:);;;ReturnValue;remote",
";NSString;true;string(withContentsOf:);;;ReturnValue;remote",
// NSString(contentsOfFile:) is a local flow source
";NSString;true;init(contentsOfFile:);;;ReturnValue;local",
";NSString;true;init(contentsOfFile:encoding:);;;ReturnValue;local",
";NSString;true;init(contentsOfFile:usedEncoding:);;;ReturnValue;local",
";NSString;true;string(withContentsOfFile:);;;ReturnValue;local"
]
}
}
/**
* A model for `NSString` and `NSMtableString` members that permit taint flow.
*/
private class NsStringSummaries extends SummaryModelCsv {
override predicate row(string row) {
row =
[
";NSString;true;init(bytes:length:encoding:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(bytesNoCopy:length:encoding:freeWhenDone:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(bytesNoCopy:length:encoding:deallocator:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(characters:length:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(charactersNoCopy:length:freeWhenDone:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(charactersNoCopy:length:dellocator:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(string:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(cString:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(cString:encoding:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(cString:length:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(cStringNoCopy:length:freeWhenDone:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(utf8String:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(format:arguments:);;;Argument[0..1];ReturnValue;taint",
";NSString;true;init(format:locale:arguments:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(format:locale:arguments:);;;Argument[2];ReturnValue;taint",
";NSString;true;init(format:_:);;;Argument[0];ReturnValue;taint", //0..
";NSString;true;init(format:locale:_:);;;Argument[0];ReturnValue;taint", //0,2..
";NSString;true;init(data:encoding:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(contentsOfFile:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(contentsOfFile:encoding:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(contentsOfFile:usedEncoding:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(contentsOf:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(contentsOf:encoding:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(contentsOf:usedEncoding:);;;Argument[0];ReturnValue;taint",
";NSString;true;init(coder:);;;Argument[0];ReturnValue;taint",
";NSString;true;localizedStringWithFormat(_:_:);;;Argument[0];ReturnValue;taint", //0..
";NSString;true;character(at:);;;Argument[-1];ReturnValue;taint",
";NSString;true;getCharacters(_:);;;Argument[-1];Argument[0];taint",
";NSString;true;getCharacters(_:range:);;;Argument[-1];Argument[0];taint",
";NSString;true;getBytes(_:maxLength:usedLength:encoding:options:range:remaining:);;;Argument[-1];Argument[0];taint",
";NSString;true;cString(using:);;;Argument[-1];ReturnValue;taint",
";NSString;true;cString();;;Argument[-1];ReturnValue;taint",
";NSString;true;lossyCString();;;Argument[-1];ReturnValue;taint",
";NSString;true;getCString(_:);;;Argument[-1];Argument[0];taint",
";NSString;true;getCString(_:maxLength:);;;Argument[-1];Argument[0];taint",
";NSString;true;getCString(_:maxLength:encoding:);;;Argument[-1];Argument[0];taint",
";NSString;true;getCString(_:maxLength:range:remaining:);;;Argument[-1];Argument[0];taint",
";NSString;true;appendingFormat(_:_:);;;Argument[-1..0];ReturnValue;taint", // -1..
";NSString;true;appending(_:);;;Argument[-1..0];ReturnValue;taint",
";NSString;true;padding(toLength:withPad:startingAt:);;;Argument[-1];ReturnValue;taint",
";NSString;true;padding(toLength:withPad:startingAt:);;;Argument[1];ReturnValue;taint",
";NSString;true;lowercased(with:);;;Argument[-1];ReturnValue;taint",
";NSString;true;uppercased(with:);;;Argument[-1];ReturnValue;taint",
";NSString;true;capitalized(with:);;;Argument[-1];ReturnValue;taint",
";NSString;true;components(separatedBy:);;;Argument[-1];ReturnValue;taint",
";NSString;true;trimmingCharacters(in:);;;Argument[-1];ReturnValue;taint",
";NSString;true;substring(from:);;;Argument[-1];ReturnValue;taint",
";NSString;true;substring(with:);;;Argument[-1];ReturnValue;taint",
";NSString;true;substring(to:);;;Argument[-1];ReturnValue;taint",
";NSString;true;folding(options:locale:);;;Argument[-1];ReturnValue;taint",
";NSString;true;applyingTransform(_:reverse:);;;Argument[-1];ReturnValue;taint",
";NSString;true;replacingOccurrences(of:with:);;;Argument[-1];ReturnValue;taint",
";NSString;true;replacingOccurrences(of:with:);;;Argument[1];ReturnValue;taint",
";NSString;true;replacingOccurrences(of:with:options:range:);;;Argument[-1];ReturnValue;taint",
";NSString;true;replacingOccurrences(of:with:options:range:);;;Argument[1];ReturnValue;taint",
";NSString;true;replacingCharacters(in:with:);;;Argument[-1];ReturnValue;taint",
";NSString;true;replacingCharacters(in:with:);;;Argument[1];ReturnValue;taint",
";NSString;true;propertyList();;;Argument[-1];ReturnValue;taint",
";NSString;true;propertyListFromStringsFileFormat();;;Argument[-1];ReturnValue;taint",
";NSString;true;variantFittingPresentationWidth(_:);;;Argument[-1];ReturnValue;taint",
";NSString;true;stringEncoding(for:encodingOptions:convertedString:usedLossyCompression:);;;Argument[0];Argument[2];taint",
";NSString;true;data(using:);;;Argument[-1];ReturnValue;taint",
";NSString;true;data(using:allowLossyConversion:);;;Argument[-1];ReturnValue;taint",
";NSString;true;path(withComponents:);;;Argument[0];ReturnValue;taint",
";NSString;true;completePath(into:caseSensitive:matchesInto:filterTypes:);;;Argument[-1];Argument[0];taint",
";NSString;true;completePath(into:caseSensitive:matchesInto:filterTypes:);;;Argument[-1];Argument[2];taint",
";NSString;true;getFileSystemRepresentation(_:maxLength:);;;Argument[-1];Argument[0];taint",
";NSString;true;appendingPathComponent(_:);;;Argument[-1..0];ReturnValue;taint",
";NSString;true;appendingPathComponent(_:conformingTo:);;;Argument[-1..0];ReturnValue;taint",
";NSString;true;appendingPathExtension(_:);;;Argument[-1..0];ReturnValue;taint",
";NSString;true;strings(byAppendingPaths:);;;Argument[-1..0];ReturnValue;taint",
";NSString;true;addingPercentEncoding(withAllowedCharacters:);;;Argument[-1];ReturnValue;taint",
";NSString;true;string(withCString:);;;Argument[0];ReturnValue;taint",
";NSString;true;string(withCString:length:);;;Argument[0];ReturnValue;taint",
";NSString;true;string(withContentsOfFile:);;;Argument[0];ReturnValue;taint",
";NSString;true;string(withContentsOf:);;;Argument[0];ReturnValue;taint",
";NSString;true;addingPercentEscapes(using:);;;Argument[-1];ReturnValue;taint",
";NSString;true;replacingPercentEscapes(using:);;;Argument[-1];ReturnValue;taint",
";NSString;true;applyTransform(_:reverse:range:updatedRange:);;;Argument[-1];ReturnValue;taint",
";NSMutableString;true;append(_:);;;Argument[0];Argument[-1];taint",
";NSMutableString;true;insert(_:at:);;;Argument[0];Argument[-1];taint",
";NSMutableString;true;replaceCharacters(in:with:);;;Argument[1];Argument[-1];taint",
";NSMutableString;true;replaceOccurrences(of:with:options:range:);;;Argument[1];Argument[-1];taint",
";NSMutableString;true;setString(_:);;;Argument[0];Argument[-1];taint",
";NSMutableString;true;appendFormat(_:_:);;;Argument[0];Argument[-1];taint", //0..
]
}
}
/**
* A content implying that, if an `NSString` is tainted, then many of its fields are
* tainted.
*/
private class NsStringFieldsInheritTaint extends TaintInheritingContent,
DataFlow::Content::FieldContent {
NsStringFieldsInheritTaint() {
exists(FieldDecl f | this.getField() = f |
(
f.getEnclosingDecl().(NominalTypeDecl).getName() = "NSString" or
f.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getName() = "NSString"
) and
f.getName() =
[
"utf8String", "lowercased", "localizedLowedCase", "uppercased", "localizedUppercase",
"capitalized", "localizedCapitalized", "decomposedStringWithCanonicalMapping",
"decomposedStringWithCompatibilityMapping", "precomposedStringWithCanonicalMapping",
"precomposedStringWithCompatibilityMapping", "doubleValue", "floatValue", "intValue",
"integerValue", "longLongValue", "boolValue", "description", "pathComponents",
"fileSystemRepresentation", "lastPathComponent", "pathExtension",
"abbreviatingWithTildeInPath", "deletingLastPathComponent", "deletingPathExtension",
"expandingTildeInPath", "resolvingSymlinksInPath", "standardizingPath",
"removingPercentEncoding"
]
)
}
}

View File

@@ -0,0 +1,44 @@
// --- stubs ---
struct URL {
init?(string: String) {}
}
class NSObject {
}
class NSString : NSObject {
init(string aString: String) {}
convenience init?(contentsOfFile path: String) { self.init(string: "") }
convenience init(contentsOfFile path: String, encoding enc: UInt) throws { self.init(string: "") }
convenience init(contentsOfFile path: String, usedEncoding enc: UnsafeMutablePointer<UInt>?) throws { self.init(string: "") }
convenience init?(contentsOf url: URL) { self.init(string: "") }
convenience init(contentsOf url: URL, encoding enc: UInt) throws { self.init(string: "") }
convenience init(contentsOf url: URL, usedEncoding enc: UnsafeMutablePointer<UInt>?) throws { self.init(string: "") }
class func string(withContentsOfFile path: String) -> Any? { return nil }
class func string(withContentsOf url: URL) -> Any? { return nil }
}
// --- tests ---
func testNSStrings() {
do
{
let path = "file.txt"
let string1 = try NSString(contentsOfFile: path) // $ $ source=local
let string2 = try NSString(contentsOfFile: path, encoding: 0) // $ source=local
let string3 = try NSString(contentsOfFile: path, usedEncoding: nil) // $ source=local
let string4 = NSString.string(withContentsOfFile: path) // $ source=local
let url = URL(string: "http://example.com/")!
let string5 = try NSString(contentsOf: url) // $ source=remote
let string6 = try NSString(contentsOf: url, encoding: 0) // $ source=remote
let string7 = try NSString(contentsOf: url, usedEncoding: nil) // $ source=remote
let string8 = NSString.string(withContentsOf: url) // $ source=remote
} catch {
// ...
}
}

View File

@@ -558,6 +558,712 @@
| nsmutabledata.swift:48:9:48:9 | SSA def(nsMutableDataTainted6) | nsmutabledata.swift:49:15:49:15 | nsMutableDataTainted6 |
| nsmutabledata.swift:48:33:48:40 | call to source() | nsmutabledata.swift:48:9:48:9 | SSA def(nsMutableDataTainted6) |
| nsmutabledata.swift:49:15:49:15 | nsMutableDataTainted6 | nsmutabledata.swift:49:15:49:37 | .mutableBytes |
| nsstring.swift:6:8:6:8 | SSA def(self) | nsstring.swift:6:8:6:8 | self[return] |
| nsstring.swift:6:8:6:8 | self | nsstring.swift:6:8:6:8 | SSA def(self) |
| nsstring.swift:7:7:7:7 | self | nsstring.swift:7:7:7:7 | SSA def(self) |
| nsstring.swift:7:26:7:26 | SSA def(self) | nsstring.swift:7:26:7:57 | self[return] |
| nsstring.swift:7:26:7:26 | self | nsstring.swift:7:26:7:26 | SSA def(self) |
| nsstring.swift:7:40:7:40 | 0 | nsstring.swift:7:39:7:55 | ...! |
| nsstring.swift:7:71:7:71 | SSA def(self) | nsstring.swift:7:71:7:77 | self[return] |
| nsstring.swift:7:71:7:71 | self | nsstring.swift:7:71:7:71 | SSA def(self) |
| nsstring.swift:10:7:10:7 | SSA def(self) | nsstring.swift:10:7:10:7 | self[return] |
| nsstring.swift:10:7:10:7 | SSA def(self) | nsstring.swift:10:7:10:7 | self[return] |
| nsstring.swift:10:7:10:7 | self | nsstring.swift:10:7:10:7 | SSA def(self) |
| nsstring.swift:10:7:10:7 | self | nsstring.swift:10:7:10:7 | SSA def(self) |
| nsstring.swift:11:8:11:8 | SSA def(self) | nsstring.swift:11:3:11:33 | self[return] |
| nsstring.swift:11:8:11:8 | self | nsstring.swift:11:8:11:8 | SSA def(self) |
| nsstring.swift:12:8:12:8 | SSA def(self) | nsstring.swift:12:3:12:40 | self[return] |
| nsstring.swift:12:8:12:8 | self | nsstring.swift:12:8:12:8 | SSA def(self) |
| nsstring.swift:15:8:15:8 | SSA def(self) | nsstring.swift:15:8:15:8 | self[return] |
| nsstring.swift:15:8:15:8 | self | nsstring.swift:15:8:15:8 | SSA def(self) |
| nsstring.swift:26:7:26:7 | SSA def(self) | nsstring.swift:26:7:26:7 | self[return] |
| nsstring.swift:26:7:26:7 | self | nsstring.swift:26:7:26:7 | SSA def(self) |
| nsstring.swift:26:56:26:56 | SSA def(self) | nsstring.swift:26:56:26:56 | self[return] |
| nsstring.swift:26:56:26:56 | self | nsstring.swift:26:56:26:56 | SSA def(self) |
| nsstring.swift:27:54:27:54 | self | nsstring.swift:27:54:27:54 | SSA def(self) |
| nsstring.swift:29:43:29:43 | self | nsstring.swift:29:43:29:43 | SSA def(self) |
| nsstring.swift:31:3:31:3 | SSA def(self) | nsstring.swift:31:3:31:58 | self[return] |
| nsstring.swift:31:3:31:3 | self | nsstring.swift:31:3:31:3 | SSA def(self) |
| nsstring.swift:32:3:32:3 | SSA def(self) | nsstring.swift:32:3:32:113 | self[return] |
| nsstring.swift:32:3:32:3 | self | nsstring.swift:32:3:32:3 | SSA def(self) |
| nsstring.swift:33:3:33:3 | SSA def(self) | nsstring.swift:33:3:33:33 | self[return] |
| nsstring.swift:33:3:33:3 | self | nsstring.swift:33:3:33:3 | SSA def(self) |
| nsstring.swift:35:15:35:15 | SSA def(self) | nsstring.swift:35:73:35:73 | self |
| nsstring.swift:35:15:35:15 | self | nsstring.swift:35:15:35:15 | SSA def(self) |
| nsstring.swift:35:73:35:73 | [post] self | nsstring.swift:35:15:35:95 | self[return] |
| nsstring.swift:35:73:35:73 | self | nsstring.swift:35:15:35:95 | self[return] |
| nsstring.swift:35:91:35:91 | | nsstring.swift:35:73:35:93 | call to NSString.init(string:) |
| nsstring.swift:36:15:36:15 | SSA def(self) | nsstring.swift:36:87:36:87 | self |
| nsstring.swift:36:15:36:15 | self | nsstring.swift:36:15:36:15 | SSA def(self) |
| nsstring.swift:36:87:36:87 | [post] self | nsstring.swift:36:15:36:109 | self[return] |
| nsstring.swift:36:87:36:87 | self | nsstring.swift:36:15:36:109 | self[return] |
| nsstring.swift:36:105:36:105 | | nsstring.swift:36:87:36:107 | call to NSString.init(string:) |
| nsstring.swift:37:15:37:15 | SSA def(self) | nsstring.swift:37:60:37:60 | self |
| nsstring.swift:37:15:37:15 | self | nsstring.swift:37:15:37:15 | SSA def(self) |
| nsstring.swift:37:60:37:60 | [post] self | nsstring.swift:37:15:37:82 | self[return] |
| nsstring.swift:37:60:37:60 | self | nsstring.swift:37:15:37:82 | self[return] |
| nsstring.swift:37:78:37:78 | | nsstring.swift:37:60:37:80 | call to NSString.init(string:) |
| nsstring.swift:38:15:38:15 | SSA def(self) | nsstring.swift:38:77:38:77 | self |
| nsstring.swift:38:15:38:15 | self | nsstring.swift:38:15:38:15 | SSA def(self) |
| nsstring.swift:38:77:38:77 | [post] self | nsstring.swift:38:15:38:99 | self[return] |
| nsstring.swift:38:77:38:77 | self | nsstring.swift:38:15:38:99 | self[return] |
| nsstring.swift:38:95:38:95 | | nsstring.swift:38:77:38:97 | call to NSString.init(string:) |
| nsstring.swift:39:15:39:15 | SSA def(self) | nsstring.swift:39:78:39:78 | self |
| nsstring.swift:39:15:39:15 | self | nsstring.swift:39:15:39:15 | SSA def(self) |
| nsstring.swift:39:78:39:78 | [post] self | nsstring.swift:39:15:39:100 | self[return] |
| nsstring.swift:39:78:39:78 | self | nsstring.swift:39:15:39:100 | self[return] |
| nsstring.swift:39:96:39:96 | | nsstring.swift:39:78:39:98 | call to NSString.init(string:) |
| nsstring.swift:40:15:40:15 | SSA def(self) | nsstring.swift:40:105:40:105 | self |
| nsstring.swift:40:15:40:15 | self | nsstring.swift:40:15:40:15 | SSA def(self) |
| nsstring.swift:40:105:40:105 | [post] self | nsstring.swift:40:15:40:127 | self[return] |
| nsstring.swift:40:105:40:105 | self | nsstring.swift:40:15:40:127 | self[return] |
| nsstring.swift:40:123:40:123 | | nsstring.swift:40:105:40:125 | call to NSString.init(string:) |
| nsstring.swift:41:15:41:15 | SSA def(self) | nsstring.swift:41:70:41:70 | self |
| nsstring.swift:41:15:41:15 | self | nsstring.swift:41:15:41:15 | SSA def(self) |
| nsstring.swift:41:70:41:70 | [post] self | nsstring.swift:41:15:41:92 | self[return] |
| nsstring.swift:41:70:41:70 | self | nsstring.swift:41:15:41:92 | self[return] |
| nsstring.swift:41:88:41:88 | | nsstring.swift:41:70:41:90 | call to NSString.init(string:) |
| nsstring.swift:42:15:42:15 | SSA def(self) | nsstring.swift:42:97:42:97 | self |
| nsstring.swift:42:15:42:15 | self | nsstring.swift:42:15:42:15 | SSA def(self) |
| nsstring.swift:42:97:42:97 | [post] self | nsstring.swift:42:15:42:119 | self[return] |
| nsstring.swift:42:97:42:97 | self | nsstring.swift:42:15:42:119 | self[return] |
| nsstring.swift:42:115:42:115 | | nsstring.swift:42:97:42:117 | call to NSString.init(string:) |
| nsstring.swift:43:15:43:15 | SSA def(self) | nsstring.swift:43:81:43:81 | self |
| nsstring.swift:43:15:43:15 | self | nsstring.swift:43:15:43:15 | SSA def(self) |
| nsstring.swift:43:81:43:81 | [post] self | nsstring.swift:43:15:43:103 | self[return] |
| nsstring.swift:43:81:43:81 | self | nsstring.swift:43:15:43:103 | self[return] |
| nsstring.swift:43:99:43:99 | | nsstring.swift:43:81:43:101 | call to NSString.init(string:) |
| nsstring.swift:44:15:44:15 | SSA def(self) | nsstring.swift:44:131:44:131 | self |
| nsstring.swift:44:15:44:15 | self | nsstring.swift:44:15:44:15 | SSA def(self) |
| nsstring.swift:44:131:44:131 | [post] self | nsstring.swift:44:15:44:153 | self[return] |
| nsstring.swift:44:131:44:131 | self | nsstring.swift:44:15:44:153 | self[return] |
| nsstring.swift:44:149:44:149 | | nsstring.swift:44:131:44:151 | call to NSString.init(string:) |
| nsstring.swift:45:15:45:15 | SSA def(self) | nsstring.swift:45:92:45:92 | self |
| nsstring.swift:45:15:45:15 | self | nsstring.swift:45:15:45:15 | SSA def(self) |
| nsstring.swift:45:92:45:92 | [post] self | nsstring.swift:45:15:45:114 | self[return] |
| nsstring.swift:45:92:45:92 | self | nsstring.swift:45:15:45:114 | self[return] |
| nsstring.swift:45:110:45:110 | | nsstring.swift:45:92:45:112 | call to NSString.init(string:) |
| nsstring.swift:46:15:46:15 | SSA def(self) | nsstring.swift:46:60:46:60 | self |
| nsstring.swift:46:15:46:15 | self | nsstring.swift:46:15:46:15 | SSA def(self) |
| nsstring.swift:46:60:46:60 | [post] self | nsstring.swift:46:15:46:82 | self[return] |
| nsstring.swift:46:60:46:60 | self | nsstring.swift:46:15:46:82 | self[return] |
| nsstring.swift:46:78:46:78 | | nsstring.swift:46:60:46:80 | call to NSString.init(string:) |
| nsstring.swift:47:15:47:15 | SSA def(self) | nsstring.swift:47:79:47:79 | self |
| nsstring.swift:47:15:47:15 | self | nsstring.swift:47:15:47:15 | SSA def(self) |
| nsstring.swift:47:79:47:79 | [post] self | nsstring.swift:47:15:47:101 | self[return] |
| nsstring.swift:47:79:47:79 | self | nsstring.swift:47:15:47:101 | self[return] |
| nsstring.swift:47:97:47:97 | | nsstring.swift:47:79:47:99 | call to NSString.init(string:) |
| nsstring.swift:48:15:48:15 | SSA def(self) | nsstring.swift:48:51:48:51 | self |
| nsstring.swift:48:15:48:15 | self | nsstring.swift:48:15:48:15 | SSA def(self) |
| nsstring.swift:48:51:48:51 | [post] self | nsstring.swift:48:15:48:73 | self[return] |
| nsstring.swift:48:51:48:51 | self | nsstring.swift:48:15:48:73 | self[return] |
| nsstring.swift:48:69:48:69 | | nsstring.swift:48:51:48:71 | call to NSString.init(string:) |
| nsstring.swift:49:15:49:15 | SSA def(self) | nsstring.swift:49:52:49:52 | self |
| nsstring.swift:49:15:49:15 | self | nsstring.swift:49:15:49:15 | SSA def(self) |
| nsstring.swift:49:52:49:52 | [post] self | nsstring.swift:49:15:49:74 | self[return] |
| nsstring.swift:49:52:49:52 | self | nsstring.swift:49:15:49:74 | self[return] |
| nsstring.swift:49:70:49:70 | | nsstring.swift:49:52:49:72 | call to NSString.init(string:) |
| nsstring.swift:50:15:50:15 | SSA def(self) | nsstring.swift:50:44:50:44 | self |
| nsstring.swift:50:15:50:15 | self | nsstring.swift:50:15:50:15 | SSA def(self) |
| nsstring.swift:50:44:50:44 | [post] self | nsstring.swift:50:15:50:66 | self[return] |
| nsstring.swift:50:44:50:44 | self | nsstring.swift:50:15:50:66 | self[return] |
| nsstring.swift:50:62:50:62 | | nsstring.swift:50:44:50:64 | call to NSString.init(string:) |
| nsstring.swift:52:8:52:8 | SSA def(self) | nsstring.swift:52:3:52:57 | self[return] |
| nsstring.swift:52:8:52:8 | self | nsstring.swift:52:8:52:8 | SSA def(self) |
| nsstring.swift:53:8:53:8 | SSA def(self) | nsstring.swift:53:3:53:64 | self[return] |
| nsstring.swift:53:8:53:8 | self | nsstring.swift:53:8:53:8 | SSA def(self) |
| nsstring.swift:55:14:55:14 | SSA def(self) | nsstring.swift:55:3:55:110 | self[return] |
| nsstring.swift:55:14:55:14 | self | nsstring.swift:55:14:55:14 | SSA def(self) |
| nsstring.swift:55:95:55:95 | nil | nsstring.swift:55:94:55:108 | ...! |
| nsstring.swift:56:14:56:14 | SSA def(self) | nsstring.swift:56:3:56:78 | self[return] |
| nsstring.swift:56:14:56:14 | self | nsstring.swift:56:14:56:14 | SSA def(self) |
| nsstring.swift:57:14:57:14 | SSA def(self) | nsstring.swift:57:3:57:83 | self[return] |
| nsstring.swift:57:14:57:14 | self | nsstring.swift:57:14:57:14 | SSA def(self) |
| nsstring.swift:58:14:58:14 | SSA def(self) | nsstring.swift:58:3:58:96 | self[return] |
| nsstring.swift:58:14:58:14 | self | nsstring.swift:58:14:58:14 | SSA def(self) |
| nsstring.swift:59:14:59:14 | SSA def(self) | nsstring.swift:59:3:59:75 | self[return] |
| nsstring.swift:59:14:59:14 | self | nsstring.swift:59:14:59:14 | SSA def(self) |
| nsstring.swift:60:14:60:14 | SSA def(self) | nsstring.swift:60:3:60:67 | self[return] |
| nsstring.swift:60:14:60:14 | self | nsstring.swift:60:14:60:14 | SSA def(self) |
| nsstring.swift:62:8:62:8 | SSA def(self) | nsstring.swift:62:3:62:55 | self[return] |
| nsstring.swift:62:8:62:8 | self | nsstring.swift:62:8:62:8 | SSA def(self) |
| nsstring.swift:63:8:63:8 | SSA def(self) | nsstring.swift:63:3:63:80 | self[return] |
| nsstring.swift:63:8:63:8 | self | nsstring.swift:63:8:63:8 | SSA def(self) |
| nsstring.swift:64:8:64:8 | SSA def(self) | nsstring.swift:64:3:64:64 | self[return] |
| nsstring.swift:64:8:64:8 | self | nsstring.swift:64:8:64:8 | SSA def(self) |
| nsstring.swift:65:8:65:8 | SSA def(self) | nsstring.swift:65:3:65:281 | self[return] |
| nsstring.swift:65:8:65:8 | self | nsstring.swift:65:8:65:8 | SSA def(self) |
| nsstring.swift:66:8:66:8 | SSA def(self) | nsstring.swift:66:3:66:76 | self[return] |
| nsstring.swift:66:8:66:8 | self | nsstring.swift:66:8:66:8 | SSA def(self) |
| nsstring.swift:67:8:67:8 | SSA def(self) | nsstring.swift:67:3:67:56 | self[return] |
| nsstring.swift:67:8:67:8 | self | nsstring.swift:67:8:67:8 | SSA def(self) |
| nsstring.swift:68:8:68:8 | SSA def(self) | nsstring.swift:68:3:68:61 | self[return] |
| nsstring.swift:68:8:68:8 | self | nsstring.swift:68:8:68:8 | SSA def(self) |
| nsstring.swift:69:8:69:8 | SSA def(self) | nsstring.swift:69:3:69:128 | self[return] |
| nsstring.swift:69:8:69:8 | self | nsstring.swift:69:8:69:8 | SSA def(self) |
| nsstring.swift:70:8:70:8 | SSA def(self) | nsstring.swift:70:3:70:58 | self[return] |
| nsstring.swift:70:8:70:8 | self | nsstring.swift:70:8:70:8 | SSA def(self) |
| nsstring.swift:71:8:71:8 | SSA def(self) | nsstring.swift:71:3:71:106 | self[return] |
| nsstring.swift:71:8:71:8 | self | nsstring.swift:71:8:71:8 | SSA def(self) |
| nsstring.swift:71:102:71:102 | | nsstring.swift:71:85:71:104 | call to NSString.init(string:) |
| nsstring.swift:72:8:72:8 | SSA def(self) | nsstring.swift:72:3:72:59 | self[return] |
| nsstring.swift:72:8:72:8 | self | nsstring.swift:72:8:72:8 | SSA def(self) |
| nsstring.swift:73:8:73:8 | SSA def(self) | nsstring.swift:73:3:73:116 | self[return] |
| nsstring.swift:73:8:73:8 | self | nsstring.swift:73:8:73:8 | SSA def(self) |
| nsstring.swift:74:8:74:8 | SSA def(self) | nsstring.swift:74:3:74:63 | self[return] |
| nsstring.swift:74:8:74:8 | self | nsstring.swift:74:8:74:8 | SSA def(self) |
| nsstring.swift:75:8:75:8 | SSA def(self) | nsstring.swift:75:3:75:63 | self[return] |
| nsstring.swift:75:8:75:8 | self | nsstring.swift:75:8:75:8 | SSA def(self) |
| nsstring.swift:76:8:76:8 | SSA def(self) | nsstring.swift:76:3:76:64 | self[return] |
| nsstring.swift:76:8:76:8 | self | nsstring.swift:76:8:76:8 | SSA def(self) |
| nsstring.swift:77:8:77:8 | SSA def(self) | nsstring.swift:77:3:77:74 | self[return] |
| nsstring.swift:77:8:77:8 | self | nsstring.swift:77:8:77:8 | SSA def(self) |
| nsstring.swift:78:8:78:8 | SSA def(self) | nsstring.swift:78:3:78:80 | self[return] |
| nsstring.swift:78:8:78:8 | self | nsstring.swift:78:8:78:8 | SSA def(self) |
| nsstring.swift:79:8:79:8 | SSA def(self) | nsstring.swift:79:3:79:71 | self[return] |
| nsstring.swift:79:8:79:8 | self | nsstring.swift:79:8:79:8 | SSA def(self) |
| nsstring.swift:80:8:80:8 | SSA def(self) | nsstring.swift:80:3:80:51 | self[return] |
| nsstring.swift:80:8:80:8 | self | nsstring.swift:80:8:80:8 | SSA def(self) |
| nsstring.swift:81:8:81:8 | SSA def(self) | nsstring.swift:81:3:81:61 | self[return] |
| nsstring.swift:81:8:81:8 | self | nsstring.swift:81:8:81:8 | SSA def(self) |
| nsstring.swift:82:8:82:8 | SSA def(self) | nsstring.swift:82:3:82:49 | self[return] |
| nsstring.swift:82:8:82:8 | self | nsstring.swift:82:8:82:8 | SSA def(self) |
| nsstring.swift:83:8:83:8 | SSA def(self) | nsstring.swift:83:3:83:94 | self[return] |
| nsstring.swift:83:8:83:8 | self | nsstring.swift:83:8:83:8 | SSA def(self) |
| nsstring.swift:84:8:84:8 | SSA def(self) | nsstring.swift:84:3:84:94 | self[return] |
| nsstring.swift:84:8:84:8 | self | nsstring.swift:84:8:84:8 | SSA def(self) |
| nsstring.swift:85:8:85:8 | SSA def(self) | nsstring.swift:85:3:85:94 | self[return] |
| nsstring.swift:85:8:85:8 | self | nsstring.swift:85:8:85:8 | SSA def(self) |
| nsstring.swift:86:8:86:8 | SSA def(self) | nsstring.swift:86:3:86:96 | self[return] |
| nsstring.swift:86:8:86:8 | self | nsstring.swift:86:8:86:8 | SSA def(self) |
| nsstring.swift:87:8:87:8 | SSA def(self) | nsstring.swift:87:3:87:163 | self[return] |
| nsstring.swift:87:8:87:8 | self | nsstring.swift:87:8:87:8 | SSA def(self) |
| nsstring.swift:88:8:88:8 | SSA def(self) | nsstring.swift:88:3:88:41 | self[return] |
| nsstring.swift:88:8:88:8 | self | nsstring.swift:88:8:88:8 | SSA def(self) |
| nsstring.swift:89:8:89:8 | SSA def(self) | nsstring.swift:89:3:89:80 | self[return] |
| nsstring.swift:89:8:89:8 | self | nsstring.swift:89:8:89:8 | SSA def(self) |
| nsstring.swift:90:8:90:8 | SSA def(self) | nsstring.swift:90:3:90:76 | self[return] |
| nsstring.swift:90:8:90:8 | self | nsstring.swift:90:8:90:8 | SSA def(self) |
| nsstring.swift:91:8:91:8 | SSA def(self) | nsstring.swift:91:3:91:57 | self[return] |
| nsstring.swift:91:8:91:8 | self | nsstring.swift:91:8:91:8 | SSA def(self) |
| nsstring.swift:92:8:92:8 | SSA def(self) | nsstring.swift:92:3:92:91 | self[return] |
| nsstring.swift:92:8:92:8 | self | nsstring.swift:92:8:92:8 | SSA def(self) |
| nsstring.swift:93:8:93:8 | SSA def(self) | nsstring.swift:93:3:93:68 | self[return] |
| nsstring.swift:93:8:93:8 | self | nsstring.swift:93:8:93:8 | SSA def(self) |
| nsstring.swift:94:8:94:8 | SSA def(self) | nsstring.swift:94:3:94:110 | self[return] |
| nsstring.swift:94:8:94:8 | self | nsstring.swift:94:8:94:8 | SSA def(self) |
| nsstring.swift:95:8:95:8 | SSA def(self) | nsstring.swift:95:3:95:69 | self[return] |
| nsstring.swift:95:8:95:8 | self | nsstring.swift:95:8:95:8 | SSA def(self) |
| nsstring.swift:96:8:96:8 | SSA def(self) | nsstring.swift:96:3:96:74 | self[return] |
| nsstring.swift:96:8:96:8 | self | nsstring.swift:96:8:96:8 | SSA def(self) |
| nsstring.swift:97:8:97:8 | SSA def(self) | nsstring.swift:97:3:97:224 | self[return] |
| nsstring.swift:97:8:97:8 | self | nsstring.swift:97:8:97:8 | SSA def(self) |
| nsstring.swift:98:8:98:8 | SSA def(self) | nsstring.swift:98:3:98:116 | self[return] |
| nsstring.swift:98:8:98:8 | self | nsstring.swift:98:8:98:8 | SSA def(self) |
| nsstring.swift:100:43:100:43 | SSA def(self) | nsstring.swift:100:43:100:60 | self[return] |
| nsstring.swift:100:43:100:43 | self | nsstring.swift:100:43:100:43 | SSA def(self) |
| nsstring.swift:101:28:101:28 | SSA def(self) | nsstring.swift:101:28:101:44 | self[return] |
| nsstring.swift:101:28:101:28 | self | nsstring.swift:101:28:101:28 | SSA def(self) |
| nsstring.swift:102:36:102:36 | SSA def(self) | nsstring.swift:102:36:102:52 | self[return] |
| nsstring.swift:102:36:102:36 | self | nsstring.swift:102:36:102:36 | SSA def(self) |
| nsstring.swift:103:28:103:28 | SSA def(self) | nsstring.swift:103:28:103:44 | self[return] |
| nsstring.swift:103:28:103:28 | self | nsstring.swift:103:28:103:28 | SSA def(self) |
| nsstring.swift:104:36:104:36 | SSA def(self) | nsstring.swift:104:36:104:52 | self[return] |
| nsstring.swift:104:36:104:36 | self | nsstring.swift:104:36:104:36 | SSA def(self) |
| nsstring.swift:105:29:105:29 | SSA def(self) | nsstring.swift:105:29:105:45 | self[return] |
| nsstring.swift:105:29:105:29 | self | nsstring.swift:105:29:105:29 | SSA def(self) |
| nsstring.swift:106:38:106:38 | SSA def(self) | nsstring.swift:106:38:106:54 | self[return] |
| nsstring.swift:106:38:106:38 | self | nsstring.swift:106:38:106:38 | SSA def(self) |
| nsstring.swift:107:54:107:54 | SSA def(self) | nsstring.swift:107:54:107:70 | self[return] |
| nsstring.swift:107:54:107:54 | self | nsstring.swift:107:54:107:54 | SSA def(self) |
| nsstring.swift:108:58:108:58 | SSA def(self) | nsstring.swift:108:58:108:74 | self[return] |
| nsstring.swift:108:58:108:58 | self | nsstring.swift:108:58:108:58 | SSA def(self) |
| nsstring.swift:109:55:109:55 | SSA def(self) | nsstring.swift:109:55:109:71 | self[return] |
| nsstring.swift:109:55:109:55 | self | nsstring.swift:109:55:109:55 | SSA def(self) |
| nsstring.swift:110:59:110:59 | SSA def(self) | nsstring.swift:110:59:110:75 | self[return] |
| nsstring.swift:110:59:110:59 | self | nsstring.swift:110:59:110:59 | SSA def(self) |
| nsstring.swift:111:29:111:29 | SSA def(self) | nsstring.swift:111:29:111:46 | self[return] |
| nsstring.swift:111:29:111:29 | self | nsstring.swift:111:29:111:29 | SSA def(self) |
| nsstring.swift:112:27:112:27 | SSA def(self) | nsstring.swift:112:27:112:44 | self[return] |
| nsstring.swift:112:27:112:27 | self | nsstring.swift:112:27:112:27 | SSA def(self) |
| nsstring.swift:113:25:113:25 | SSA def(self) | nsstring.swift:113:25:113:40 | self[return] |
| nsstring.swift:113:25:113:25 | self | nsstring.swift:113:25:113:25 | SSA def(self) |
| nsstring.swift:114:27:114:27 | SSA def(self) | nsstring.swift:114:27:114:42 | self[return] |
| nsstring.swift:114:27:114:27 | self | nsstring.swift:114:27:114:27 | SSA def(self) |
| nsstring.swift:115:30:115:30 | SSA def(self) | nsstring.swift:115:30:115:45 | self[return] |
| nsstring.swift:115:30:115:30 | self | nsstring.swift:115:30:115:30 | SSA def(self) |
| nsstring.swift:116:25:116:25 | SSA def(self) | nsstring.swift:116:25:116:44 | self[return] |
| nsstring.swift:116:25:116:25 | self | nsstring.swift:116:25:116:25 | SSA def(self) |
| nsstring.swift:117:29:117:29 | SSA def(self) | nsstring.swift:117:29:117:45 | self[return] |
| nsstring.swift:117:29:117:29 | self | nsstring.swift:117:29:117:29 | SSA def(self) |
| nsstring.swift:118:34:118:34 | SSA def(self) | nsstring.swift:118:34:118:50 | self[return] |
| nsstring.swift:118:34:118:34 | self | nsstring.swift:118:34:118:34 | SSA def(self) |
| nsstring.swift:119:56:119:56 | SSA def(self) | nsstring.swift:119:56:119:101 | self[return] |
| nsstring.swift:119:56:119:56 | self | nsstring.swift:119:56:119:56 | SSA def(self) |
| nsstring.swift:119:70:119:70 | nil | nsstring.swift:119:69:119:99 | ...! |
| nsstring.swift:120:35:120:35 | SSA def(self) | nsstring.swift:120:35:120:51 | self[return] |
| nsstring.swift:120:35:120:35 | self | nsstring.swift:120:35:120:35 | SSA def(self) |
| nsstring.swift:121:31:121:31 | SSA def(self) | nsstring.swift:121:31:121:47 | self[return] |
| nsstring.swift:121:31:121:31 | self | nsstring.swift:121:31:121:31 | SSA def(self) |
| nsstring.swift:122:45:122:45 | SSA def(self) | nsstring.swift:122:45:122:61 | self[return] |
| nsstring.swift:122:45:122:45 | self | nsstring.swift:122:45:122:45 | SSA def(self) |
| nsstring.swift:123:43:123:43 | SSA def(self) | nsstring.swift:123:43:123:59 | self[return] |
| nsstring.swift:123:43:123:43 | self | nsstring.swift:123:43:123:43 | SSA def(self) |
| nsstring.swift:124:39:124:39 | SSA def(self) | nsstring.swift:124:39:124:55 | self[return] |
| nsstring.swift:124:39:124:39 | self | nsstring.swift:124:39:124:39 | SSA def(self) |
| nsstring.swift:125:38:125:38 | SSA def(self) | nsstring.swift:125:38:125:54 | self[return] |
| nsstring.swift:125:38:125:38 | self | nsstring.swift:125:38:125:38 | SSA def(self) |
| nsstring.swift:126:41:126:41 | SSA def(self) | nsstring.swift:126:41:126:57 | self[return] |
| nsstring.swift:126:41:126:41 | self | nsstring.swift:126:41:126:41 | SSA def(self) |
| nsstring.swift:127:35:127:35 | SSA def(self) | nsstring.swift:127:35:127:51 | self[return] |
| nsstring.swift:127:35:127:35 | self | nsstring.swift:127:35:127:35 | SSA def(self) |
| nsstring.swift:128:42:128:42 | SSA def(self) | nsstring.swift:128:42:128:58 | self[return] |
| nsstring.swift:128:42:128:42 | self | nsstring.swift:128:42:128:42 | SSA def(self) |
| nsstring.swift:131:7:131:7 | SSA def(self) | nsstring.swift:131:7:131:7 | self[return] |
| nsstring.swift:131:7:131:7 | self | nsstring.swift:131:7:131:7 | SSA def(self) |
| nsstring.swift:131:33:131:33 | SSA def(self) | nsstring.swift:131:33:131:33 | self[return] |
| nsstring.swift:131:33:131:33 | SSA def(self) | nsstring.swift:131:33:131:33 | self[return] |
| nsstring.swift:131:33:131:33 | SSA def(self) | nsstring.swift:131:33:131:33 | self[return] |
| nsstring.swift:131:33:131:33 | self | nsstring.swift:131:33:131:33 | SSA def(self) |
| nsstring.swift:131:33:131:33 | self | nsstring.swift:131:33:131:33 | SSA def(self) |
| nsstring.swift:131:33:131:33 | self | nsstring.swift:131:33:131:33 | SSA def(self) |
| nsstring.swift:132:8:132:8 | SSA def(self) | nsstring.swift:132:3:132:35 | self[return] |
| nsstring.swift:132:8:132:8 | self | nsstring.swift:132:8:132:8 | SSA def(self) |
| nsstring.swift:133:8:133:8 | SSA def(self) | nsstring.swift:133:3:133:48 | self[return] |
| nsstring.swift:133:8:133:8 | self | nsstring.swift:133:8:133:8 | SSA def(self) |
| nsstring.swift:134:8:134:8 | SSA def(self) | nsstring.swift:134:3:134:68 | self[return] |
| nsstring.swift:134:8:134:8 | self | nsstring.swift:134:8:134:8 | SSA def(self) |
| nsstring.swift:135:8:135:8 | SSA def(self) | nsstring.swift:135:3:135:157 | self[return] |
| nsstring.swift:135:8:135:8 | self | nsstring.swift:135:8:135:8 | SSA def(self) |
| nsstring.swift:136:8:136:8 | SSA def(self) | nsstring.swift:136:3:136:38 | self[return] |
| nsstring.swift:136:8:136:8 | self | nsstring.swift:136:8:136:8 | SSA def(self) |
| nsstring.swift:139:7:139:7 | SSA def(self) | nsstring.swift:139:7:139:7 | self[return] |
| nsstring.swift:139:7:139:7 | self | nsstring.swift:139:7:139:7 | SSA def(self) |
| nsstring.swift:139:26:139:26 | SSA def(self) | nsstring.swift:139:26:139:26 | self[return] |
| nsstring.swift:139:26:139:26 | self | nsstring.swift:139:26:139:26 | SSA def(self) |
| nsstring.swift:143:3:143:3 | SSA def(self) | nsstring.swift:143:3:143:37 | self[return] |
| nsstring.swift:143:3:143:3 | self | nsstring.swift:143:3:143:3 | SSA def(self) |
| nsstring.swift:150:2:150:2 | SSA def(self) | nsstring.swift:150:2:150:25 | self[return] |
| nsstring.swift:150:2:150:2 | self | nsstring.swift:150:2:150:2 | SSA def(self) |
| nsstring.swift:154:3:154:3 | SSA def(self) | nsstring.swift:154:3:154:27 | self[return] |
| nsstring.swift:154:3:154:3 | self | nsstring.swift:154:3:154:3 | SSA def(self) |
| nsstring.swift:155:3:155:3 | SSA def(self) | nsstring.swift:155:3:155:46 | self[return] |
| nsstring.swift:155:3:155:3 | self | nsstring.swift:155:3:155:3 | SSA def(self) |
| nsstring.swift:158:8:158:8 | SSA def(self) | nsstring.swift:158:8:158:8 | self[return] |
| nsstring.swift:158:8:158:8 | self | nsstring.swift:158:8:158:8 | SSA def(self) |
| nsstring.swift:159:42:159:42 | SSA def(self) | nsstring.swift:159:42:159:70 | self[return] |
| nsstring.swift:159:42:159:42 | self | nsstring.swift:159:42:159:42 | SSA def(self) |
| nsstring.swift:162:8:162:8 | SSA def(self) | nsstring.swift:162:8:162:8 | self[return] |
| nsstring.swift:162:8:162:8 | self | nsstring.swift:162:8:162:8 | SSA def(self) |
| nsstring.swift:163:41:163:41 | SSA def(self) | nsstring.swift:163:41:163:72 | self[return] |
| nsstring.swift:163:41:163:41 | self | nsstring.swift:163:41:163:41 | SSA def(self) |
| nsstring.swift:166:8:166:8 | SSA def(self) | nsstring.swift:166:8:166:8 | self[return] |
| nsstring.swift:166:8:166:8 | self | nsstring.swift:166:8:166:8 | SSA def(self) |
| nsstring.swift:169:8:169:8 | SSA def(self) | nsstring.swift:169:8:169:8 | self[return] |
| nsstring.swift:169:8:169:8 | self | nsstring.swift:169:8:169:8 | SSA def(self) |
| nsstring.swift:172:8:172:8 | SSA def(self) | nsstring.swift:172:8:172:8 | self[return] |
| nsstring.swift:172:8:172:8 | self | nsstring.swift:172:8:172:8 | SSA def(self) |
| nsstring.swift:178:61:178:61 | | nsstring.swift:178:44:178:63 | call to NSString.init(string:) |
| nsstring.swift:179:82:179:82 | | nsstring.swift:179:58:179:84 | call to NSMutableString.init(string:) |
| nsstring.swift:180:64:180:64 | nil | nsstring.swift:180:63:180:95 | ...! |
| nsstring.swift:181:78:181:78 | nil | nsstring.swift:181:77:181:116 | ...! |
| nsstring.swift:182:34:182:48 | call to URL.init(string:) | nsstring.swift:182:34:182:49 | ...! |
| nsstring.swift:182:46:182:46 | | nsstring.swift:182:34:182:48 | call to URL.init(string:) |
| nsstring.swift:183:61:183:61 | nil | nsstring.swift:183:60:183:86 | ...! |
| nsstring.swift:184:75:184:75 | nil | nsstring.swift:184:74:184:107 | ...! |
| nsstring.swift:185:56:185:56 | nil | nsstring.swift:185:55:185:85 | ...! |
| nsstring.swift:186:41:186:41 | 0 | nsstring.swift:186:36:186:42 | call to Data.init(_:) |
| nsstring.swift:194:34:194:54 | call to sourceUnicharString() | nsstring.swift:194:13:194:68 | call to NSString.init(characters:length:) |
| nsstring.swift:195:40:195:67 | call to sourceMutableUnicharString() | nsstring.swift:195:13:195:102 | call to NSString.init(charactersNoCopy:length:freeWhenDone:) |
| nsstring.swift:196:30:196:43 | call to sourceString() | nsstring.swift:196:13:196:44 | call to NSString.init(string:) |
| nsstring.swift:197:30:197:43 | call to sourceString() | nsstring.swift:197:13:197:82 | call to Self.init(format:arguments:) |
| nsstring.swift:197:57:197:81 | ...! | nsstring.swift:197:13:197:82 | call to Self.init(format:arguments:) |
| nsstring.swift:197:58:197:58 | nil | nsstring.swift:197:57:197:81 | ...! |
| nsstring.swift:198:30:198:43 | call to sourceString() | nsstring.swift:198:13:198:95 | call to Self.init(format:locale:arguments:) |
| nsstring.swift:198:70:198:94 | ...! | nsstring.swift:198:13:198:95 | call to Self.init(format:locale:arguments:) |
| nsstring.swift:198:71:198:71 | nil | nsstring.swift:198:70:198:94 | ...! |
| nsstring.swift:199:30:199:45 | call to sourceNSString() | nsstring.swift:199:13:199:46 | call to Self.init(format:_:) |
| nsstring.swift:200:30:200:45 | call to sourceNSString() | nsstring.swift:200:13:200:59 | call to Self.init(format:locale:_:) |
| nsstring.swift:204:18:204:70 | call to Self.init(contentsOfFile:encoding:) | nsstring.swift:204:13:204:70 | try! ... |
| nsstring.swift:204:43:204:56 | call to sourceString() | nsstring.swift:204:18:204:70 | call to Self.init(contentsOfFile:encoding:) |
| nsstring.swift:205:18:205:76 | call to Self.init(contentsOfFile:usedEncoding:) | nsstring.swift:205:13:205:76 | try! ... |
| nsstring.swift:205:43:205:56 | call to sourceString() | nsstring.swift:205:18:205:76 | call to Self.init(contentsOfFile:usedEncoding:) |
| nsstring.swift:206:18:206:63 | call to Self.init(contentsOf:encoding:) | nsstring.swift:206:13:206:63 | try! ... |
| nsstring.swift:206:39:206:49 | call to sourceURL() | nsstring.swift:206:18:206:63 | call to Self.init(contentsOf:encoding:) |
| nsstring.swift:207:18:207:80 | call to Self.init(contentsOf:encoding:) | nsstring.swift:207:13:207:80 | try! ... |
| nsstring.swift:207:39:207:65 | call to URL.init(string:) | nsstring.swift:207:39:207:66 | ...! |
| nsstring.swift:207:39:207:66 | ...! | nsstring.swift:207:18:207:80 | call to Self.init(contentsOf:encoding:) |
| nsstring.swift:207:51:207:64 | call to sourceString() | nsstring.swift:207:39:207:65 | call to URL.init(string:) |
| nsstring.swift:208:18:208:69 | call to Self.init(contentsOf:usedEncoding:) | nsstring.swift:208:13:208:69 | try! ... |
| nsstring.swift:208:39:208:49 | call to sourceURL() | nsstring.swift:208:18:208:69 | call to Self.init(contentsOf:usedEncoding:) |
| nsstring.swift:209:18:209:86 | call to Self.init(contentsOf:usedEncoding:) | nsstring.swift:209:13:209:86 | try! ... |
| nsstring.swift:209:39:209:65 | call to URL.init(string:) | nsstring.swift:209:39:209:66 | ...! |
| nsstring.swift:209:39:209:66 | ...! | nsstring.swift:209:18:209:86 | call to Self.init(contentsOf:usedEncoding:) |
| nsstring.swift:209:51:209:64 | call to sourceString() | nsstring.swift:209:39:209:65 | call to URL.init(string:) |
| nsstring.swift:213:29:213:52 | call to sourceUnsafeRawPointer() | nsstring.swift:213:13:213:80 | call to Self.init(bytes:length:encoding:) |
| nsstring.swift:214:13:214:80 | call to Self.init(bytes:length:encoding:) | nsstring.swift:214:13:214:81 | ...! |
| nsstring.swift:214:29:214:52 | call to sourceUnsafeRawPointer() | nsstring.swift:214:13:214:80 | call to Self.init(bytes:length:encoding:) |
| nsstring.swift:215:13:215:105 | call to Self.init(bytes:length:encoding:) | nsstring.swift:215:13:215:106 | ...! |
| nsstring.swift:215:29:215:77 | call to UnsafeRawPointer.init(_:) | nsstring.swift:215:13:215:105 | call to Self.init(bytes:length:encoding:) |
| nsstring.swift:217:35:217:65 | call to sourceUnsafeMutableRawPointer() | nsstring.swift:217:13:217:114 | call to Self.init(bytesNoCopy:length:encoding:freeWhenDone:) |
| nsstring.swift:218:13:218:114 | call to Self.init(bytesNoCopy:length:encoding:freeWhenDone:) | nsstring.swift:218:13:218:115 | ...! |
| nsstring.swift:218:35:218:65 | call to sourceUnsafeMutableRawPointer() | nsstring.swift:218:13:218:114 | call to Self.init(bytesNoCopy:length:encoding:freeWhenDone:) |
| nsstring.swift:219:13:219:142 | call to Self.init(bytesNoCopy:length:encoding:freeWhenDone:) | nsstring.swift:219:13:219:143 | ...! |
| nsstring.swift:219:35:219:93 | call to UnsafeMutableRawPointer.init(mutating:) | nsstring.swift:219:13:219:142 | call to Self.init(bytesNoCopy:length:encoding:freeWhenDone:) |
| nsstring.swift:221:31:221:45 | call to sourceCString() | nsstring.swift:221:13:221:59 | call to Self.init(cString:encoding:) |
| nsstring.swift:222:13:222:59 | call to Self.init(cString:encoding:) | nsstring.swift:222:13:222:60 | ...! |
| nsstring.swift:222:31:222:45 | call to sourceCString() | nsstring.swift:222:13:222:59 | call to Self.init(cString:encoding:) |
| nsstring.swift:223:13:223:111 | call to Self.init(cString:encoding:) | nsstring.swift:223:13:223:112 | ...! |
| nsstring.swift:223:31:223:97 | call to bindMemory(to:capacity:) | nsstring.swift:223:13:223:111 | call to Self.init(cString:encoding:) |
| nsstring.swift:225:31:225:45 | call to sourceCString() | nsstring.swift:225:13:225:46 | call to Self.init(cString:) |
| nsstring.swift:226:13:226:46 | call to Self.init(cString:) | nsstring.swift:226:13:226:47 | ...! |
| nsstring.swift:226:31:226:45 | call to sourceCString() | nsstring.swift:226:13:226:46 | call to Self.init(cString:) |
| nsstring.swift:227:13:227:98 | call to Self.init(cString:) | nsstring.swift:227:13:227:99 | ...! |
| nsstring.swift:227:31:227:97 | call to bindMemory(to:capacity:) | nsstring.swift:227:13:227:98 | call to Self.init(cString:) |
| nsstring.swift:229:34:229:48 | call to sourceCString() | nsstring.swift:229:13:229:49 | call to Self.init(utf8String:) |
| nsstring.swift:230:13:230:49 | call to Self.init(utf8String:) | nsstring.swift:230:13:230:50 | ...! |
| nsstring.swift:230:34:230:48 | call to sourceCString() | nsstring.swift:230:13:230:49 | call to Self.init(utf8String:) |
| nsstring.swift:231:13:231:101 | call to Self.init(utf8String:) | nsstring.swift:231:13:231:102 | ...! |
| nsstring.swift:231:34:231:100 | call to bindMemory(to:capacity:) | nsstring.swift:231:13:231:101 | call to Self.init(utf8String:) |
| nsstring.swift:233:28:233:39 | call to sourceData() | nsstring.swift:233:13:233:53 | call to Self.init(data:encoding:) |
| nsstring.swift:234:13:234:53 | call to Self.init(data:encoding:) | nsstring.swift:234:13:234:54 | ...! |
| nsstring.swift:234:28:234:39 | call to sourceData() | nsstring.swift:234:13:234:53 | call to Self.init(data:encoding:) |
| nsstring.swift:235:13:235:91 | call to Self.init(data:encoding:) | nsstring.swift:235:13:235:92 | ...! |
| nsstring.swift:235:28:235:77 | call to Data.init(bytes:count:) | nsstring.swift:235:13:235:91 | call to Self.init(data:encoding:) |
| nsstring.swift:235:40:235:63 | call to sourceUnsafeRawPointer() | nsstring.swift:235:28:235:77 | call to Data.init(bytes:count:) |
| nsstring.swift:237:38:237:51 | call to sourceString() | nsstring.swift:237:13:237:52 | call to Self.init(contentsOfFile:) |
| nsstring.swift:238:13:238:52 | call to Self.init(contentsOfFile:) | nsstring.swift:238:13:238:53 | ...! |
| nsstring.swift:238:38:238:51 | call to sourceString() | nsstring.swift:238:13:238:52 | call to Self.init(contentsOfFile:) |
| nsstring.swift:240:34:240:44 | call to sourceURL() | nsstring.swift:240:13:240:45 | call to Self.init(contentsOf:) |
| nsstring.swift:241:13:241:45 | call to Self.init(contentsOf:) | nsstring.swift:241:13:241:46 | ...! |
| nsstring.swift:241:34:241:44 | call to sourceURL() | nsstring.swift:241:13:241:45 | call to Self.init(contentsOf:) |
| nsstring.swift:245:7:245:7 | SSA def(harmless) | nsstring.swift:254:13:254:13 | harmless |
| nsstring.swift:245:18:245:45 | call to NSString.init(string:) | nsstring.swift:245:7:245:7 | SSA def(harmless) |
| nsstring.swift:245:35:245:35 | harmless | nsstring.swift:245:18:245:45 | call to NSString.init(string:) |
| nsstring.swift:246:7:246:7 | SSA def(myRange) | nsstring.swift:264:46:264:46 | myRange |
| nsstring.swift:246:17:246:48 | call to _NSRange.init(location:length:) | nsstring.swift:246:7:246:7 | SSA def(myRange) |
| nsstring.swift:248:48:248:63 | call to sourceNSString() | nsstring.swift:248:13:248:84 | call to localizedStringWithFormat(_:_:) |
| nsstring.swift:248:67:248:67 | nil | nsstring.swift:248:66:248:83 | ...! |
| nsstring.swift:249:13:249:28 | call to sourceNSString() | nsstring.swift:249:13:249:45 | call to character(at:) |
| nsstring.swift:250:13:250:28 | call to sourceNSString() | nsstring.swift:250:13:250:46 | call to cString(using:) |
| nsstring.swift:250:13:250:46 | call to cString(using:) | nsstring.swift:250:13:250:47 | ...! |
| nsstring.swift:251:13:251:28 | call to sourceNSString() | nsstring.swift:251:13:251:38 | call to cString() |
| nsstring.swift:252:13:252:28 | call to sourceNSString() | nsstring.swift:252:13:252:43 | call to lossyCString() |
| nsstring.swift:253:13:253:28 | call to sourceNSString() | nsstring.swift:253:13:253:80 | call to padding(toLength:withPad:startingAt:) |
| nsstring.swift:253:62:253:62 | | nsstring.swift:253:13:253:80 | call to padding(toLength:withPad:startingAt:) |
| nsstring.swift:254:13:254:13 | [post] harmless | nsstring.swift:274:13:274:13 | harmless |
| nsstring.swift:254:13:254:13 | harmless | nsstring.swift:254:13:254:83 | call to padding(toLength:withPad:startingAt:) |
| nsstring.swift:254:13:254:13 | harmless | nsstring.swift:274:13:274:13 | harmless |
| nsstring.swift:254:54:254:67 | call to sourceString() | nsstring.swift:254:13:254:83 | call to padding(toLength:withPad:startingAt:) |
| nsstring.swift:255:13:255:28 | call to sourceNSString() | nsstring.swift:255:13:255:50 | call to lowercased(with:) |
| nsstring.swift:256:13:256:28 | call to sourceNSString() | nsstring.swift:256:13:256:50 | call to uppercased(with:) |
| nsstring.swift:257:13:257:28 | call to sourceNSString() | nsstring.swift:257:13:257:51 | call to capitalized(with:) |
| nsstring.swift:258:13:258:28 | call to sourceNSString() | nsstring.swift:258:13:258:57 | call to components(separatedBy:) |
| nsstring.swift:259:13:259:28 | call to sourceNSString() | nsstring.swift:259:13:259:57 | call to components(separatedBy:) |
| nsstring.swift:259:13:259:57 | call to components(separatedBy:) | nsstring.swift:259:13:259:60 | ...[...] |
| nsstring.swift:260:13:260:28 | call to sourceNSString() | nsstring.swift:260:13:260:78 | call to components(separatedBy:) |
| nsstring.swift:261:13:261:28 | call to sourceNSString() | nsstring.swift:261:13:261:78 | call to components(separatedBy:) |
| nsstring.swift:261:13:261:78 | call to components(separatedBy:) | nsstring.swift:261:13:261:81 | ...[...] |
| nsstring.swift:262:13:262:28 | call to sourceNSString() | nsstring.swift:262:13:262:77 | call to trimmingCharacters(in:) |
| nsstring.swift:263:13:263:28 | call to sourceNSString() | nsstring.swift:263:13:263:47 | call to substring(from:) |
| nsstring.swift:264:13:264:28 | call to sourceNSString() | nsstring.swift:264:13:264:53 | call to substring(with:) |
| nsstring.swift:264:46:264:46 | myRange | nsstring.swift:318:39:318:39 | myRange |
| nsstring.swift:265:13:265:28 | call to sourceNSString() | nsstring.swift:265:13:265:46 | call to substring(to:) |
| nsstring.swift:266:13:266:28 | call to sourceNSString() | nsstring.swift:266:13:266:49 | call to folding(options:locale:) |
| nsstring.swift:267:13:267:28 | call to sourceNSString() | nsstring.swift:267:13:267:87 | call to applyingTransform(_:reverse:) |
| nsstring.swift:268:13:268:28 | call to sourceNSString() | nsstring.swift:268:13:268:43 | call to propertyList() |
| nsstring.swift:269:13:269:28 | call to sourceNSString() | nsstring.swift:269:13:269:64 | call to propertyListFromStringsFileFormat() |
| nsstring.swift:270:13:270:28 | call to sourceNSString() | nsstring.swift:270:13:270:64 | call to variantFittingPresentationWidth(_:) |
| nsstring.swift:271:13:271:28 | call to sourceNSString() | nsstring.swift:271:13:271:43 | call to data(using:) |
| nsstring.swift:272:13:272:28 | call to sourceNSString() | nsstring.swift:272:13:272:72 | call to data(using:allowLossyConversion:) |
| nsstring.swift:273:13:273:28 | call to sourceNSString() | nsstring.swift:273:13:273:69 | call to replacingOccurrences(of:with:) |
| nsstring.swift:273:66:273:66 | b | nsstring.swift:273:13:273:69 | call to replacingOccurrences(of:with:) |
| nsstring.swift:274:13:274:13 | [post] harmless | nsstring.swift:276:13:276:13 | harmless |
| nsstring.swift:274:13:274:13 | harmless | nsstring.swift:274:13:274:72 | call to replacingOccurrences(of:with:) |
| nsstring.swift:274:13:274:13 | harmless | nsstring.swift:276:13:276:13 | harmless |
| nsstring.swift:274:58:274:71 | call to sourceString() | nsstring.swift:274:13:274:72 | call to replacingOccurrences(of:with:) |
| nsstring.swift:275:13:275:28 | call to sourceNSString() | nsstring.swift:275:13:275:110 | call to replacingOccurrences(of:with:options:range:) |
| nsstring.swift:275:66:275:66 | b | nsstring.swift:275:13:275:110 | call to replacingOccurrences(of:with:options:range:) |
| nsstring.swift:276:13:276:13 | [post] harmless | nsstring.swift:287:13:287:13 | harmless |
| nsstring.swift:276:13:276:13 | harmless | nsstring.swift:276:13:276:113 | call to replacingOccurrences(of:with:options:range:) |
| nsstring.swift:276:13:276:13 | harmless | nsstring.swift:287:13:287:13 | harmless |
| nsstring.swift:276:58:276:71 | call to sourceString() | nsstring.swift:276:13:276:113 | call to replacingOccurrences(of:with:options:range:) |
| nsstring.swift:277:43:277:57 | [...] | nsstring.swift:277:13:277:58 | call to path(withComponents:) |
| nsstring.swift:278:43:278:61 | call to sourceStringArray() | nsstring.swift:278:13:278:62 | call to path(withComponents:) |
| nsstring.swift:279:43:279:68 | [...] | nsstring.swift:279:13:279:69 | call to path(withComponents:) |
| nsstring.swift:280:42:280:56 | call to sourceCString() | nsstring.swift:280:13:280:57 | call to string(withCString:) |
| nsstring.swift:281:42:281:56 | call to sourceCString() | nsstring.swift:281:13:281:70 | call to string(withCString:length:) |
| nsstring.swift:282:49:282:62 | call to sourceString() | nsstring.swift:282:13:282:63 | call to string(withContentsOfFile:) |
| nsstring.swift:283:45:283:55 | call to sourceURL() | nsstring.swift:283:13:283:56 | call to string(withContentsOf:) |
| nsstring.swift:287:13:287:13 | [post] harmless | nsstring.swift:287:38:287:38 | harmless |
| nsstring.swift:287:13:287:13 | harmless | nsstring.swift:287:13:287:66 | call to appendingFormat(_:_:) |
| nsstring.swift:287:13:287:13 | harmless | nsstring.swift:287:38:287:38 | harmless |
| nsstring.swift:287:38:287:38 | [post] harmless | nsstring.swift:288:13:288:13 | harmless |
| nsstring.swift:287:38:287:38 | harmless | nsstring.swift:287:13:287:66 | call to appendingFormat(_:_:) |
| nsstring.swift:287:38:287:38 | harmless | nsstring.swift:288:13:288:13 | harmless |
| nsstring.swift:287:49:287:49 | nil | nsstring.swift:287:48:287:65 | ...! |
| nsstring.swift:288:13:288:13 | [post] harmless | nsstring.swift:289:46:289:46 | harmless |
| nsstring.swift:288:13:288:13 | harmless | nsstring.swift:288:13:288:74 | call to appendingFormat(_:_:) |
| nsstring.swift:288:13:288:13 | harmless | nsstring.swift:289:46:289:46 | harmless |
| nsstring.swift:288:38:288:53 | call to sourceNSString() | nsstring.swift:288:13:288:74 | call to appendingFormat(_:_:) |
| nsstring.swift:288:57:288:57 | nil | nsstring.swift:288:56:288:73 | ...! |
| nsstring.swift:289:13:289:28 | call to sourceNSString() | nsstring.swift:289:13:289:74 | call to appendingFormat(_:_:) |
| nsstring.swift:289:46:289:46 | [post] harmless | nsstring.swift:291:13:291:13 | harmless |
| nsstring.swift:289:46:289:46 | harmless | nsstring.swift:289:13:289:74 | call to appendingFormat(_:_:) |
| nsstring.swift:289:46:289:46 | harmless | nsstring.swift:291:13:291:13 | harmless |
| nsstring.swift:289:57:289:57 | nil | nsstring.swift:289:56:289:73 | ...! |
| nsstring.swift:291:13:291:13 | [post] harmless | nsstring.swift:292:13:292:13 | harmless |
| nsstring.swift:291:13:291:13 | harmless | nsstring.swift:291:13:291:47 | call to appendingPathComponent(_:) |
| nsstring.swift:291:13:291:13 | harmless | nsstring.swift:292:13:292:13 | harmless |
| nsstring.swift:291:45:291:45 | | nsstring.swift:291:13:291:47 | call to appendingPathComponent(_:) |
| nsstring.swift:292:13:292:13 | [post] harmless | nsstring.swift:295:13:295:13 | harmless |
| nsstring.swift:292:13:292:13 | harmless | nsstring.swift:292:13:292:59 | call to appendingPathComponent(_:) |
| nsstring.swift:292:13:292:13 | harmless | nsstring.swift:295:13:295:13 | harmless |
| nsstring.swift:292:45:292:58 | call to sourceString() | nsstring.swift:292:13:292:59 | call to appendingPathComponent(_:) |
| nsstring.swift:293:13:293:28 | call to sourceNSString() | nsstring.swift:293:13:293:55 | call to appendingPathComponent(_:) |
| nsstring.swift:293:53:293:53 | | nsstring.swift:293:13:293:55 | call to appendingPathComponent(_:) |
| nsstring.swift:295:13:295:13 | [post] harmless | nsstring.swift:296:13:296:13 | harmless |
| nsstring.swift:295:13:295:13 | harmless | nsstring.swift:295:13:295:80 | call to appendingPathComponent(_:conformingTo:) |
| nsstring.swift:295:13:295:13 | harmless | nsstring.swift:296:13:296:13 | harmless |
| nsstring.swift:295:45:295:45 | | nsstring.swift:295:13:295:80 | call to appendingPathComponent(_:conformingTo:) |
| nsstring.swift:295:64:295:64 | nil | nsstring.swift:295:63:295:79 | ...! |
| nsstring.swift:296:13:296:13 | [post] harmless | nsstring.swift:299:13:299:13 | harmless |
| nsstring.swift:296:13:296:13 | harmless | nsstring.swift:296:13:296:92 | call to appendingPathComponent(_:conformingTo:) |
| nsstring.swift:296:13:296:13 | harmless | nsstring.swift:299:13:299:13 | harmless |
| nsstring.swift:296:45:296:58 | call to sourceString() | nsstring.swift:296:13:296:92 | call to appendingPathComponent(_:conformingTo:) |
| nsstring.swift:296:76:296:76 | nil | nsstring.swift:296:75:296:91 | ...! |
| nsstring.swift:297:13:297:28 | call to sourceNSString() | nsstring.swift:297:13:297:88 | call to appendingPathComponent(_:conformingTo:) |
| nsstring.swift:297:53:297:53 | | nsstring.swift:297:13:297:88 | call to appendingPathComponent(_:conformingTo:) |
| nsstring.swift:297:72:297:72 | nil | nsstring.swift:297:71:297:87 | ...! |
| nsstring.swift:299:13:299:13 | [post] harmless | nsstring.swift:300:13:300:13 | harmless |
| nsstring.swift:299:13:299:13 | harmless | nsstring.swift:299:13:299:47 | call to appendingPathExtension(_:) |
| nsstring.swift:299:13:299:13 | harmless | nsstring.swift:300:13:300:13 | harmless |
| nsstring.swift:299:45:299:45 | | nsstring.swift:299:13:299:47 | call to appendingPathExtension(_:) |
| nsstring.swift:300:13:300:13 | [post] harmless | nsstring.swift:303:13:303:13 | harmless |
| nsstring.swift:300:13:300:13 | harmless | nsstring.swift:300:13:300:59 | call to appendingPathExtension(_:) |
| nsstring.swift:300:13:300:13 | harmless | nsstring.swift:303:13:303:13 | harmless |
| nsstring.swift:300:45:300:58 | call to sourceString() | nsstring.swift:300:13:300:59 | call to appendingPathExtension(_:) |
| nsstring.swift:301:13:301:28 | call to sourceNSString() | nsstring.swift:301:13:301:55 | call to appendingPathExtension(_:) |
| nsstring.swift:301:53:301:53 | | nsstring.swift:301:13:301:55 | call to appendingPathExtension(_:) |
| nsstring.swift:303:13:303:13 | [post] harmless | nsstring.swift:305:13:305:13 | harmless |
| nsstring.swift:303:13:303:13 | harmless | nsstring.swift:303:13:303:34 | call to appending(_:) |
| nsstring.swift:303:13:303:13 | harmless | nsstring.swift:305:13:305:13 | harmless |
| nsstring.swift:303:32:303:32 | | nsstring.swift:303:13:303:34 | call to appending(_:) |
| nsstring.swift:304:13:304:28 | call to sourceNSString() | nsstring.swift:304:13:304:42 | call to appending(_:) |
| nsstring.swift:304:40:304:40 | | nsstring.swift:304:13:304:42 | call to appending(_:) |
| nsstring.swift:305:13:305:13 | [post] harmless | nsstring.swift:307:13:307:13 | harmless |
| nsstring.swift:305:13:305:13 | harmless | nsstring.swift:305:13:305:46 | call to appending(_:) |
| nsstring.swift:305:13:305:13 | harmless | nsstring.swift:307:13:307:13 | harmless |
| nsstring.swift:305:32:305:45 | call to sourceString() | nsstring.swift:305:13:305:46 | call to appending(_:) |
| nsstring.swift:307:13:307:13 | [post] harmless | nsstring.swift:308:13:308:13 | harmless |
| nsstring.swift:307:13:307:13 | harmless | nsstring.swift:307:13:307:52 | call to strings(byAppendingPaths:) |
| nsstring.swift:307:13:307:13 | harmless | nsstring.swift:308:13:308:13 | harmless |
| nsstring.swift:307:48:307:51 | [...] | nsstring.swift:307:13:307:52 | call to strings(byAppendingPaths:) |
| nsstring.swift:308:13:308:13 | [post] harmless | nsstring.swift:309:13:309:13 | harmless |
| nsstring.swift:308:13:308:13 | harmless | nsstring.swift:308:13:308:52 | call to strings(byAppendingPaths:) |
| nsstring.swift:308:13:308:13 | harmless | nsstring.swift:309:13:309:13 | harmless |
| nsstring.swift:308:13:308:52 | call to strings(byAppendingPaths:) | nsstring.swift:308:13:308:55 | ...[...] |
| nsstring.swift:308:48:308:51 | [...] | nsstring.swift:308:13:308:52 | call to strings(byAppendingPaths:) |
| nsstring.swift:309:13:309:13 | [post] harmless | nsstring.swift:310:13:310:13 | harmless |
| nsstring.swift:309:13:309:13 | harmless | nsstring.swift:309:13:309:64 | call to strings(byAppendingPaths:) |
| nsstring.swift:309:13:309:13 | harmless | nsstring.swift:310:13:310:13 | harmless |
| nsstring.swift:309:48:309:63 | [...] | nsstring.swift:309:13:309:64 | call to strings(byAppendingPaths:) |
| nsstring.swift:310:13:310:13 | [post] harmless | nsstring.swift:318:3:318:3 | harmless |
| nsstring.swift:310:13:310:13 | harmless | nsstring.swift:310:13:310:64 | call to strings(byAppendingPaths:) |
| nsstring.swift:310:13:310:13 | harmless | nsstring.swift:318:3:318:3 | harmless |
| nsstring.swift:310:13:310:64 | call to strings(byAppendingPaths:) | nsstring.swift:310:13:310:67 | ...[...] |
| nsstring.swift:310:48:310:63 | [...] | nsstring.swift:310:13:310:64 | call to strings(byAppendingPaths:) |
| nsstring.swift:311:13:311:28 | call to sourceNSString() | nsstring.swift:311:13:311:60 | call to strings(byAppendingPaths:) |
| nsstring.swift:311:56:311:59 | [...] | nsstring.swift:311:13:311:60 | call to strings(byAppendingPaths:) |
| nsstring.swift:312:13:312:28 | call to sourceNSString() | nsstring.swift:312:13:312:60 | call to strings(byAppendingPaths:) |
| nsstring.swift:312:13:312:60 | call to strings(byAppendingPaths:) | nsstring.swift:312:13:312:63 | ...[...] |
| nsstring.swift:312:56:312:59 | [...] | nsstring.swift:312:13:312:60 | call to strings(byAppendingPaths:) |
| nsstring.swift:316:7:316:7 | SSA def(ptr1) | nsstring.swift:317:13:317:13 | ptr1 |
| nsstring.swift:316:14:316:53 | ...! | nsstring.swift:316:7:316:7 | SSA def(ptr1) |
| nsstring.swift:316:15:316:15 | nil | nsstring.swift:316:14:316:53 | ...! |
| nsstring.swift:317:13:317:13 | ptr1 | nsstring.swift:318:26:318:26 | ptr1 |
| nsstring.swift:318:3:318:3 | [post] harmless | nsstring.swift:325:3:325:3 | harmless |
| nsstring.swift:318:3:318:3 | harmless | nsstring.swift:325:3:325:3 | harmless |
| nsstring.swift:318:26:318:26 | ptr1 | nsstring.swift:319:13:319:13 | ptr1 |
| nsstring.swift:318:39:318:39 | myRange | nsstring.swift:320:47:320:47 | myRange |
| nsstring.swift:319:13:319:13 | ptr1 | nsstring.swift:320:34:320:34 | ptr1 |
| nsstring.swift:320:34:320:34 | ptr1 | nsstring.swift:321:13:321:13 | ptr1 |
| nsstring.swift:320:47:320:47 | myRange | nsstring.swift:332:80:332:80 | myRange |
| nsstring.swift:323:7:323:7 | SSA def(ptr2) | nsstring.swift:324:13:324:13 | ptr2 |
| nsstring.swift:323:14:323:53 | ...! | nsstring.swift:323:7:323:7 | SSA def(ptr2) |
| nsstring.swift:323:15:323:15 | nil | nsstring.swift:323:14:323:53 | ...! |
| nsstring.swift:324:13:324:13 | ptr2 | nsstring.swift:325:26:325:26 | ptr2 |
| nsstring.swift:325:3:325:3 | [post] harmless | nsstring.swift:332:3:332:3 | harmless |
| nsstring.swift:325:3:325:3 | harmless | nsstring.swift:332:3:332:3 | harmless |
| nsstring.swift:325:26:325:26 | ptr2 | nsstring.swift:326:13:326:13 | ptr2 |
| nsstring.swift:326:13:326:13 | ptr2 | nsstring.swift:327:34:327:34 | ptr2 |
| nsstring.swift:327:34:327:34 | ptr2 | nsstring.swift:328:13:328:13 | ptr2 |
| nsstring.swift:330:7:330:7 | SSA def(ptr3) | nsstring.swift:331:13:331:13 | ptr3 |
| nsstring.swift:330:14:330:47 | ...! | nsstring.swift:330:7:330:7 | SSA def(ptr3) |
| nsstring.swift:330:15:330:15 | nil | nsstring.swift:330:14:330:47 | ...! |
| nsstring.swift:331:13:331:13 | [post] ptr3 | nsstring.swift:332:21:332:21 | ptr3 |
| nsstring.swift:331:13:331:13 | ptr3 | nsstring.swift:332:21:332:21 | ptr3 |
| nsstring.swift:332:3:332:3 | [post] harmless | nsstring.swift:339:3:339:3 | harmless |
| nsstring.swift:332:3:332:3 | harmless | nsstring.swift:332:21:332:21 | [post] ptr3 |
| nsstring.swift:332:3:332:3 | harmless | nsstring.swift:339:3:339:3 | harmless |
| nsstring.swift:332:21:332:21 | [post] ptr3 | nsstring.swift:333:13:333:13 | ptr3 |
| nsstring.swift:332:21:332:21 | ptr3 | nsstring.swift:333:13:333:13 | ptr3 |
| nsstring.swift:332:80:332:80 | myRange | nsstring.swift:334:88:334:88 | myRange |
| nsstring.swift:333:13:333:13 | [post] ptr3 | nsstring.swift:334:29:334:29 | ptr3 |
| nsstring.swift:333:13:333:13 | ptr3 | nsstring.swift:334:29:334:29 | ptr3 |
| nsstring.swift:334:3:334:18 | call to sourceNSString() | nsstring.swift:334:29:334:29 | [post] ptr3 |
| nsstring.swift:334:29:334:29 | [post] ptr3 | nsstring.swift:335:13:335:13 | ptr3 |
| nsstring.swift:334:29:334:29 | ptr3 | nsstring.swift:335:13:335:13 | ptr3 |
| nsstring.swift:334:88:334:88 | myRange | nsstring.swift:406:31:406:31 | myRange |
| nsstring.swift:337:7:337:7 | SSA def(ptr4) | nsstring.swift:338:13:338:13 | ptr4 |
| nsstring.swift:337:14:337:51 | ...! | nsstring.swift:337:7:337:7 | SSA def(ptr4) |
| nsstring.swift:337:15:337:15 | nil | nsstring.swift:337:14:337:51 | ...! |
| nsstring.swift:338:13:338:13 | ptr4 | nsstring.swift:339:23:339:23 | ptr4 |
| nsstring.swift:339:3:339:3 | [post] harmless | nsstring.swift:346:3:346:3 | harmless |
| nsstring.swift:339:3:339:3 | harmless | nsstring.swift:346:3:346:3 | harmless |
| nsstring.swift:339:23:339:23 | ptr4 | nsstring.swift:340:13:340:13 | ptr4 |
| nsstring.swift:340:13:340:13 | ptr4 | nsstring.swift:341:31:341:31 | ptr4 |
| nsstring.swift:341:31:341:31 | ptr4 | nsstring.swift:342:13:342:13 | ptr4 |
| nsstring.swift:344:7:344:7 | SSA def(ptr5) | nsstring.swift:345:13:345:13 | ptr5 |
| nsstring.swift:344:14:344:51 | ...! | nsstring.swift:344:7:344:7 | SSA def(ptr5) |
| nsstring.swift:344:15:344:15 | nil | nsstring.swift:344:14:344:51 | ...! |
| nsstring.swift:345:13:345:13 | ptr5 | nsstring.swift:346:23:346:23 | ptr5 |
| nsstring.swift:346:3:346:3 | [post] harmless | nsstring.swift:351:13:351:13 | harmless |
| nsstring.swift:346:3:346:3 | harmless | nsstring.swift:351:13:351:13 | harmless |
| nsstring.swift:346:23:346:23 | ptr5 | nsstring.swift:347:13:347:13 | ptr5 |
| nsstring.swift:347:13:347:13 | ptr5 | nsstring.swift:348:31:348:31 | ptr5 |
| nsstring.swift:348:31:348:31 | ptr5 | nsstring.swift:349:13:349:13 | ptr5 |
| nsstring.swift:352:5:352:5 | SSA def(line) | nsstring.swift:353:15:353:15 | line |
| nsstring.swift:352:5:352:5 | line | nsstring.swift:352:5:352:5 | SSA def(line) |
| nsstring.swift:352:11:352:11 | SSA def(stop) | nsstring.swift:354:15:354:15 | stop |
| nsstring.swift:352:11:352:11 | stop | nsstring.swift:352:11:352:11 | SSA def(stop) |
| nsstring.swift:357:5:357:5 | SSA def(line) | nsstring.swift:358:15:358:15 | line |
| nsstring.swift:357:5:357:5 | line | nsstring.swift:357:5:357:5 | SSA def(line) |
| nsstring.swift:357:11:357:11 | SSA def(stop) | nsstring.swift:359:15:359:15 | stop |
| nsstring.swift:357:11:357:11 | stop | nsstring.swift:357:11:357:11 | SSA def(stop) |
| nsstring.swift:362:7:362:7 | SSA def(str10) | nsstring.swift:365:7:365:7 | str10 |
| nsstring.swift:362:15:362:30 | call to sourceNSString() | nsstring.swift:362:7:362:7 | SSA def(str10) |
| nsstring.swift:363:7:363:7 | SSA def(outLongest) | nsstring.swift:365:32:365:32 | outLongest |
| nsstring.swift:363:20:363:74 | ...! | nsstring.swift:363:7:363:7 | SSA def(outLongest) |
| nsstring.swift:363:21:363:21 | nil | nsstring.swift:363:20:363:74 | ...! |
| nsstring.swift:364:7:364:7 | SSA def(outArray) | nsstring.swift:365:79:365:79 | outArray |
| nsstring.swift:364:18:364:71 | ...! | nsstring.swift:364:7:364:7 | SSA def(outArray) |
| nsstring.swift:364:19:364:19 | nil | nsstring.swift:364:18:364:71 | ...! |
| nsstring.swift:365:32:365:32 | outLongest | nsstring.swift:366:15:366:15 | outLongest |
| nsstring.swift:365:79:365:79 | outArray | nsstring.swift:369:15:369:15 | outArray |
| nsstring.swift:366:15:366:15 | outLongest | nsstring.swift:367:15:367:15 | outLongest |
| nsstring.swift:367:15:367:15 | [post] outLongest | nsstring.swift:368:15:368:15 | outLongest |
| nsstring.swift:367:15:367:15 | outLongest | nsstring.swift:368:15:368:15 | outLongest |
| nsstring.swift:368:15:368:26 | .pointee | nsstring.swift:368:15:368:33 | ...! |
| nsstring.swift:369:15:369:15 | outArray | nsstring.swift:370:15:370:15 | outArray |
| nsstring.swift:370:15:370:15 | [post] outArray | nsstring.swift:371:15:371:15 | outArray |
| nsstring.swift:370:15:370:15 | outArray | nsstring.swift:371:15:371:15 | outArray |
| nsstring.swift:371:15:371:24 | .pointee | nsstring.swift:371:15:371:31 | ...! |
| nsstring.swift:374:7:374:7 | SSA def(str11) | nsstring.swift:376:7:376:7 | str11 |
| nsstring.swift:374:15:374:30 | call to sourceNSString() | nsstring.swift:374:7:374:7 | SSA def(str11) |
| nsstring.swift:375:7:375:7 | SSA def(outBuffer) | nsstring.swift:376:41:376:41 | outBuffer |
| nsstring.swift:375:19:375:56 | ...! | nsstring.swift:375:7:375:7 | SSA def(outBuffer) |
| nsstring.swift:375:20:375:20 | nil | nsstring.swift:375:19:375:56 | ...! |
| nsstring.swift:376:41:376:41 | outBuffer | nsstring.swift:377:15:377:15 | outBuffer |
| nsstring.swift:377:15:377:15 | outBuffer | nsstring.swift:378:15:378:15 | outBuffer |
| nsstring.swift:383:7:383:7 | SSA def(str20) | nsstring.swift:385:13:385:13 | str20 |
| nsstring.swift:383:15:383:30 | call to sourceNSString() | nsstring.swift:383:7:383:7 | SSA def(str20) |
| nsstring.swift:385:13:385:13 | [post] str20 | nsstring.swift:386:13:386:13 | str20 |
| nsstring.swift:385:13:385:13 | str20 | nsstring.swift:385:13:385:24 | call to copy() |
| nsstring.swift:385:13:385:13 | str20 | nsstring.swift:386:13:386:13 | str20 |
| nsstring.swift:386:13:386:13 | [post] str20 | nsstring.swift:387:13:387:13 | str20 |
| nsstring.swift:386:13:386:13 | str20 | nsstring.swift:386:13:386:31 | call to mutableCopy() |
| nsstring.swift:386:13:386:13 | str20 | nsstring.swift:387:13:387:13 | str20 |
| nsstring.swift:387:13:387:13 | [post] str20 | nsstring.swift:388:13:388:13 | str20 |
| nsstring.swift:387:13:387:13 | str20 | nsstring.swift:387:13:387:33 | call to copy(with:) |
| nsstring.swift:387:13:387:13 | str20 | nsstring.swift:388:13:388:13 | str20 |
| nsstring.swift:388:13:388:13 | str20 | nsstring.swift:388:13:388:40 | call to mutableCopy(with:) |
| nsstring.swift:392:13:392:35 | call to sourceNSMutableString() | nsstring.swift:392:13:392:58 | call to capitalized(with:) |
| nsstring.swift:394:7:394:7 | SSA def(str30) | nsstring.swift:395:13:395:13 | str30 |
| nsstring.swift:394:15:394:41 | call to NSMutableString.init(string:) | nsstring.swift:394:7:394:7 | SSA def(str30) |
| nsstring.swift:394:39:394:39 | | nsstring.swift:394:15:394:41 | call to NSMutableString.init(string:) |
| nsstring.swift:395:13:395:13 | [post] str30 | nsstring.swift:396:3:396:3 | str30 |
| nsstring.swift:395:13:395:13 | str30 | nsstring.swift:396:3:396:3 | str30 |
| nsstring.swift:396:3:396:3 | [post] str30 | nsstring.swift:397:13:397:13 | str30 |
| nsstring.swift:396:3:396:3 | str30 | nsstring.swift:397:13:397:13 | str30 |
| nsstring.swift:396:16:396:29 | call to sourceString() | nsstring.swift:396:3:396:3 | [post] str30 |
| nsstring.swift:399:7:399:7 | SSA def(str31) | nsstring.swift:400:13:400:13 | str31 |
| nsstring.swift:399:15:399:41 | call to NSMutableString.init(string:) | nsstring.swift:399:7:399:7 | SSA def(str31) |
| nsstring.swift:399:39:399:39 | | nsstring.swift:399:15:399:41 | call to NSMutableString.init(string:) |
| nsstring.swift:400:13:400:13 | [post] str31 | nsstring.swift:401:3:401:3 | str31 |
| nsstring.swift:400:13:400:13 | str31 | nsstring.swift:401:3:401:3 | str31 |
| nsstring.swift:401:3:401:3 | [post] str31 | nsstring.swift:402:13:402:13 | str31 |
| nsstring.swift:401:3:401:3 | str31 | nsstring.swift:402:13:402:13 | str31 |
| nsstring.swift:401:16:401:29 | call to sourceString() | nsstring.swift:401:3:401:3 | [post] str31 |
| nsstring.swift:404:7:404:7 | SSA def(str32) | nsstring.swift:405:13:405:13 | str32 |
| nsstring.swift:404:15:404:41 | call to NSMutableString.init(string:) | nsstring.swift:404:7:404:7 | SSA def(str32) |
| nsstring.swift:404:39:404:39 | | nsstring.swift:404:15:404:41 | call to NSMutableString.init(string:) |
| nsstring.swift:405:13:405:13 | [post] str32 | nsstring.swift:406:3:406:3 | str32 |
| nsstring.swift:405:13:405:13 | str32 | nsstring.swift:406:3:406:3 | str32 |
| nsstring.swift:406:3:406:3 | [post] str32 | nsstring.swift:407:13:407:13 | str32 |
| nsstring.swift:406:3:406:3 | str32 | nsstring.swift:407:13:407:13 | str32 |
| nsstring.swift:406:31:406:31 | myRange | nsstring.swift:411:66:411:66 | myRange |
| nsstring.swift:406:46:406:59 | call to sourceString() | nsstring.swift:406:3:406:3 | [post] str32 |
| nsstring.swift:409:7:409:7 | SSA def(str33) | nsstring.swift:410:13:410:13 | str33 |
| nsstring.swift:409:15:409:41 | call to NSMutableString.init(string:) | nsstring.swift:409:7:409:7 | SSA def(str33) |
| nsstring.swift:409:39:409:39 | | nsstring.swift:409:15:409:41 | call to NSMutableString.init(string:) |
| nsstring.swift:410:13:410:13 | [post] str33 | nsstring.swift:411:3:411:3 | str33 |
| nsstring.swift:410:13:410:13 | str33 | nsstring.swift:411:3:411:3 | str33 |
| nsstring.swift:411:3:411:3 | [post] str33 | nsstring.swift:412:13:412:13 | str33 |
| nsstring.swift:411:3:411:3 | str33 | nsstring.swift:412:13:412:13 | str33 |
| nsstring.swift:411:43:411:56 | call to sourceString() | nsstring.swift:411:3:411:3 | [post] str33 |
| nsstring.swift:414:7:414:7 | SSA def(str34) | nsstring.swift:415:13:415:13 | str34 |
| nsstring.swift:414:15:414:41 | call to NSMutableString.init(string:) | nsstring.swift:414:7:414:7 | SSA def(str34) |
| nsstring.swift:414:39:414:39 | | nsstring.swift:414:15:414:41 | call to NSMutableString.init(string:) |
| nsstring.swift:415:13:415:13 | [post] str34 | nsstring.swift:416:3:416:3 | str34 |
| nsstring.swift:415:13:415:13 | str34 | nsstring.swift:416:3:416:3 | str34 |
| nsstring.swift:416:3:416:3 | [post] str34 | nsstring.swift:417:13:417:13 | str34 |
| nsstring.swift:416:3:416:3 | str34 | nsstring.swift:417:13:417:13 | str34 |
| nsstring.swift:416:19:416:32 | call to sourceString() | nsstring.swift:416:3:416:3 | [post] str34 |
| nsstring.swift:417:13:417:13 | [post] str34 | nsstring.swift:418:3:418:3 | str34 |
| nsstring.swift:417:13:417:13 | str34 | nsstring.swift:418:3:418:3 | str34 |
| nsstring.swift:418:3:418:3 | [post] str34 | nsstring.swift:419:13:419:13 | str34 |
| nsstring.swift:418:3:418:3 | str34 | nsstring.swift:419:13:419:13 | str34 |
| nsstring.swift:418:16:418:16 | -append | nsstring.swift:418:3:418:3 | [post] str34 |
| nsstring.swift:419:13:419:13 | [post] str34 | nsstring.swift:420:3:420:3 | str34 |
| nsstring.swift:419:13:419:13 | str34 | nsstring.swift:420:3:420:3 | str34 |
| nsstring.swift:420:3:420:3 | [post] str34 | nsstring.swift:421:13:421:13 | str34 |
| nsstring.swift:420:3:420:3 | str34 | nsstring.swift:421:13:421:13 | str34 |
| nsstring.swift:420:19:420:19 | | nsstring.swift:420:3:420:3 | [post] str34 |
| nsstring.swift:425:13:425:28 | call to sourceNSString() | nsstring.swift:425:13:425:30 | .utf8String |
| nsstring.swift:426:13:426:62 | call to Self.init(utf8String:) | nsstring.swift:426:13:426:63 | ...! |
| nsstring.swift:426:34:426:49 | call to sourceNSString() | nsstring.swift:426:34:426:51 | .utf8String |
| nsstring.swift:426:34:426:51 | .utf8String | nsstring.swift:426:34:426:61 | ...! |
| nsstring.swift:426:34:426:61 | ...! | nsstring.swift:426:13:426:62 | call to Self.init(utf8String:) |
| nsstring.swift:427:13:427:28 | call to sourceNSString() | nsstring.swift:427:13:427:30 | .lowercased |
| nsstring.swift:429:13:429:28 | call to sourceNSString() | nsstring.swift:429:13:429:30 | .uppercased |
| nsstring.swift:430:13:430:28 | call to sourceNSString() | nsstring.swift:430:13:430:30 | .localizedUppercase |
| nsstring.swift:431:13:431:28 | call to sourceNSString() | nsstring.swift:431:13:431:30 | .capitalized |
| nsstring.swift:432:13:432:28 | call to sourceNSString() | nsstring.swift:432:13:432:30 | .localizedCapitalized |
| nsstring.swift:433:13:433:28 | call to sourceNSString() | nsstring.swift:433:13:433:30 | .decomposedStringWithCanonicalMapping |
| nsstring.swift:434:13:434:28 | call to sourceNSString() | nsstring.swift:434:13:434:30 | .decomposedStringWithCompatibilityMapping |
| nsstring.swift:435:13:435:28 | call to sourceNSString() | nsstring.swift:435:13:435:30 | .precomposedStringWithCanonicalMapping |
| nsstring.swift:436:13:436:28 | call to sourceNSString() | nsstring.swift:436:13:436:30 | .precomposedStringWithCompatibilityMapping |
| nsstring.swift:437:13:437:28 | call to sourceNSString() | nsstring.swift:437:13:437:30 | .doubleValue |
| nsstring.swift:438:13:438:28 | call to sourceNSString() | nsstring.swift:438:13:438:30 | .floatValue |
| nsstring.swift:439:13:439:28 | call to sourceNSString() | nsstring.swift:439:13:439:30 | .intValue |
| nsstring.swift:440:13:440:28 | call to sourceNSString() | nsstring.swift:440:13:440:30 | .integerValue |
| nsstring.swift:441:13:441:28 | call to sourceNSString() | nsstring.swift:441:13:441:30 | .longLongValue |
| nsstring.swift:442:13:442:28 | call to sourceNSString() | nsstring.swift:442:13:442:30 | .boolValue |
| nsstring.swift:443:13:443:28 | call to sourceNSString() | nsstring.swift:443:13:443:30 | .description |
| nsstring.swift:444:13:444:28 | call to sourceNSString() | nsstring.swift:444:13:444:30 | .pathComponents |
| nsstring.swift:445:13:445:28 | call to sourceNSString() | nsstring.swift:445:13:445:30 | .pathComponents |
| nsstring.swift:445:13:445:30 | .pathComponents | nsstring.swift:445:13:445:46 | ...[...] |
| nsstring.swift:446:13:446:28 | call to sourceNSString() | nsstring.swift:446:13:446:30 | .fileSystemRepresentation |
| nsstring.swift:447:13:447:28 | call to sourceNSString() | nsstring.swift:447:13:447:30 | .lastPathComponent |
| nsstring.swift:448:13:448:28 | call to sourceNSString() | nsstring.swift:448:13:448:30 | .pathExtension |
| nsstring.swift:449:13:449:28 | call to sourceNSString() | nsstring.swift:449:13:449:30 | .abbreviatingWithTildeInPath |
| nsstring.swift:450:13:450:28 | call to sourceNSString() | nsstring.swift:450:13:450:30 | .deletingLastPathComponent |
| nsstring.swift:451:13:451:28 | call to sourceNSString() | nsstring.swift:451:13:451:30 | .deletingPathExtension |
| nsstring.swift:452:13:452:28 | call to sourceNSString() | nsstring.swift:452:13:452:30 | .expandingTildeInPath |
| nsstring.swift:453:13:453:28 | call to sourceNSString() | nsstring.swift:453:13:453:30 | .resolvingSymlinksInPath |
| nsstring.swift:454:13:454:28 | call to sourceNSString() | nsstring.swift:454:13:454:30 | .standardizingPath |
| nsstring.swift:455:13:455:28 | call to sourceNSString() | nsstring.swift:455:13:455:30 | .removingPercentEncoding |
| simple.swift:12:13:12:13 | 1 | simple.swift:12:13:12:24 | ... .+(_:_:) ... |
| simple.swift:12:17:12:24 | call to source() | simple.swift:12:13:12:24 | ... .+(_:_:) ... |
| simple.swift:13:13:13:20 | call to source() | simple.swift:13:13:13:24 | ... .+(_:_:) ... |

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,456 @@
// --- stubs ---
typealias unichar = UInt16
struct AutoreleasingUnsafeMutablePointer<Pointee> {
var pointee: Pointee { get { return (0 as! Pointee?)! } nonmutating set { } }
}
class NSObject {
func copy() -> Any { return 0 }
func mutableCopy() -> Any { return 0 }
}
struct NSZone {
}
protocol NSCopying {
func copy(with zone: NSZone?) -> Any
}
protocol NSMutableCopying {
func mutableCopy(with zone: NSZone?) -> Any
}
class NSString : NSObject, NSCopying, NSMutableCopying {
struct EncodingConversionOptions : OptionSet { let rawValue: Int }
struct CompareOptions : OptionSet { let rawValue: Int }
init(characters: UnsafePointer<unichar>, length: Int) {}
init(charactersNoCopy characters: UnsafeMutablePointer<unichar>, length: Int, freeWhenDone freeBuffer: Bool) {}
init(string aString: String) {}
convenience init(format: String, arguments argList: CVaListPointer) { self.init(string: "") }
convenience init(format: String, locale: Any?, arguments argList: CVaListPointer) { self.init(string: "") }
convenience init(format: NSString, _ args: CVarArg...) { self.init(string: "") }
convenience init(format: NSString, locale: Locale?, _ args: CVarArg...) { self.init(string: "") }
convenience init(contentsOfFile path: String, encoding enc: UInt) throws { self.init(string: "") }
convenience init(contentsOfFile path: String, usedEncoding enc: UnsafeMutablePointer<UInt>?) throws { self.init(string: "") }
convenience init(contentsOf url: URL, encoding enc: UInt) throws { self.init(string: "") }
convenience init(contentsOf url: URL, usedEncoding enc: UnsafeMutablePointer<UInt>?) throws { self.init(string: "") }
convenience init?(bytes: UnsafeRawPointer, length len: Int, encoding: UInt) { self.init(string: "") }
convenience init?(bytesNoCopy bytes: UnsafeMutableRawPointer, length len: Int, encoding: UInt, freeWhenDone freeBuffer: Bool) { self.init(string: "") }
convenience init?(cString nullTerminatedCString: UnsafePointer<CChar>, encoding: UInt) { self.init(string: "") }
convenience init?(cString bytes: UnsafePointer<CChar>) { self.init(string: "") }
convenience init?(utf8String nullTerminatedCString: UnsafePointer<CChar>) { self.init(string: "") }
convenience init?(data: Data, encoding: UInt) { self.init(string: "") }
convenience init?(contentsOfFile path: String) { self.init(string: "") }
convenience init?(contentsOf url: URL) { self.init(string: "") }
func copy(with zone: NSZone? = nil) -> Any { return 0 }
func mutableCopy(with zone: NSZone? = nil) -> Any { return 0 }
class func localizedStringWithFormat(_ format: NSString, _ args: CVarArg) -> Self { return (nil as Self?)! }
class func path(withComponents components: [String]) -> String { return "" }
class func string(withCString bytes: UnsafePointer<CChar>) -> Any? { return nil }
class func string(withCString bytes: UnsafePointer<CChar>, length: Int) -> Any? { return nil }
class func string(withContentsOfFile path: String) -> Any? { return nil }
class func string(withContentsOf url: URL) -> Any? { return nil }
func character(at index: Int) -> unichar { return 0 }
func getCharacters(_ buffer: UnsafeMutablePointer<unichar>, range: NSRange) {}
func getCharacters(_ buffer: UnsafeMutablePointer<unichar>) {}
func getBytes(_ buffer: UnsafeMutableRawPointer?, maxLength maxBufferCount: Int, usedLength usedBufferCount: UnsafeMutablePointer<Int>?, encoding: UInt, options: NSString.EncodingConversionOptions = [], range: NSRange, remaining leftover: NSRangePointer?) -> Bool { return true }
func cString(using encoding: UInt) -> UnsafePointer<CChar>? { return nil }
func cString() -> UnsafePointer<CChar>? { return nil }
func lossyCString() -> UnsafePointer<CChar>? { return nil }
func getCString(_ buffer: UnsafeMutablePointer<CChar>, maxLength maxBufferCount: Int, encoding: UInt) -> Bool { return false }
func getCString(_ bytes: UnsafeMutablePointer<CChar>) {}
func appendingFormat(_ format: NSString, _ args: CVarArg...) -> NSString { return NSString(string: "") }
func appending(_ aString: String) -> String { return "" }
func padding(toLength newLength: Int, withPad padString: String, startingAt padIndex: Int) -> String { return "" }
func lowercased(with locale: Locale?) -> String { return "" }
func uppercased(with locale: Locale?) -> String { return "" }
func capitalized(with locale: Locale?) -> String { return "" }
func components(separatedBy separator: String) -> [String] { return [] }
func components(separatedBy separator: CharacterSet) -> [String] { return [] }
func trimmingCharacters(in set: CharacterSet) -> String { return "" }
func substring(from: Int) -> String { return "" }
func substring(with range: NSRange) -> String { return "" }
func substring(to: Int) -> String { return "" }
func folding(options: NSString.CompareOptions = [], locale: Locale?) -> String { return "" }
func applyingTransform(_ transform: StringTransform, reverse: Bool) -> String? { return "" }
func enumerateLines(_ block: @escaping (String, UnsafeMutablePointer<ObjCBool>) -> Void) { }
func replacingOccurrences(of target: String, with replacement: String) -> String { return "" }
func replacingOccurrences(of target: String, with replacement: String, options: NSString.CompareOptions = [], range searchRange: NSRange) -> String { return "" }
func propertyList() -> Any { return 0 }
func propertyListFromStringsFileFormat() -> [AnyHashable: Any]? { return nil }
func variantFittingPresentationWidth(_ width: Int) -> String { return "" }
func data(using encoding: UInt) -> Data? { return nil }
func data(using encoding: UInt, allowLossyConversion lossy: Bool) -> Data? { return nil }
func appendingPathComponent(_ str: String) -> String { return "" }
func appendingPathComponent(_ partialName: String, conformingTo contentType: UTType) -> String { return "" }
func appendingPathExtension(_ str: String) -> String? { return "" }
func strings(byAppendingPaths paths: [String]) -> [String] { return [] }
func completePath(into outputName: AutoreleasingUnsafeMutablePointer<NSString?>?, caseSensitive flag: Bool, matchesInto outputArray: AutoreleasingUnsafeMutablePointer<NSArray?>?, filterTypes: [String]?) -> Int { return 1 }
func getFileSystemRepresentation(_ cname: UnsafeMutablePointer<CChar>, maxLength max: Int) -> Bool { return true }
var utf8String: UnsafePointer<CChar>? { get { return nil } }
var lowercased: String { get { return "" } }
var localizedLowercase: String { get { return "" } }
var uppercased: String { get { return "" } }
var localizedUppercase: String { get { return "" } }
var capitalized: String { get { return "" } }
var localizedCapitalized: String { get { return "" } }
var decomposedStringWithCanonicalMapping: String { get { return "" } }
var decomposedStringWithCompatibilityMapping: String { get { return "" } }
var precomposedStringWithCanonicalMapping: String { get { return "" } }
var precomposedStringWithCompatibilityMapping: String { get { return "" } }
var doubleValue: Double { get { return 0.0 } }
var floatValue: Float { get { return 0.0 } }
var intValue: Int32 { get { return 0 } }
var integerValue: Int { get { return 0 } }
var longLongValue: Int64 { get { return 0 } }
var boolValue: Bool { get { return false } }
var description: String { get { return "" } }
var pathComponents: [String] { get { return [] } }
var fileSystemRepresentation: UnsafePointer<CChar> { get { return (nil as UnsafePointer<CChar>?)! } }
var lastPathComponent: String { get { return "" } }
var pathExtension: String { get { return "" } }
var abbreviatingWithTildeInPath: String { get { return "" } }
var deletingLastPathComponent: String { get { return "" } }
var deletingPathExtension: String { get { return "" } }
var expandingTildeInPath: String { get { return "" } }
var resolvingSymlinksInPath: String { get { return "" } }
var standardizingPath: String { get { return "" } }
var removingPercentEncoding: String? { get { return "" } }
}
class NSMutableString: NSString {
func append(_ aString: String) {}
func insert(_ aString: String, at loc: Int) {}
func replaceCharacters(in range: NSRange, with aString: String) {}
func replaceOccurrences(of target: String, with replacement: String, options: NSString.CompareOptions = [], range searchRange: NSRange) -> Int { return 0 }
func setString(_ aString: String) {}
}
class NSArray : NSObject {
}
struct _NSRange {
init(location: Int, length: Int) {}
}
typealias NSRange = _NSRange
typealias NSRangePointer = UnsafeMutablePointer<NSRange>
struct URL {
init?(string: String) {}
}
struct Data {
init<S>(_ elements: S) {}
init(bytes: UnsafeRawPointer, count: Int) {}
}
struct CharacterSet {
static var whitespaces: CharacterSet { get { return CharacterSet() } }
}
struct StringTransform {
static var toLatin: StringTransform { get { return StringTransform() } }
}
struct Locale {
}
struct ObjCBool {
}
struct UTType {
}
// --- tests ---
func sourceString() -> String { return "" }
func sourceNSString() -> NSString { return NSString(string: "") }
func sourceNSMutableString() -> NSMutableString { return NSMutableString(string: "") }
func sourceUnicharString() -> UnsafePointer<unichar> { return (nil as UnsafePointer<unichar>?)! }
func sourceMutableUnicharString() -> UnsafeMutablePointer<unichar> { return (nil as UnsafeMutablePointer<unichar>?)! }
func sourceURL() -> URL { return URL(string: "")! }
func sourceUnsafeRawPointer() -> UnsafeRawPointer { return (nil as UnsafeRawPointer?)! }
func sourceUnsafeMutableRawPointer() -> UnsafeMutableRawPointer { return (nil as UnsafeMutableRawPointer?)! }
func sourceCString() -> UnsafePointer<CChar> { return (nil as UnsafePointer<CChar>?)! }
func sourceData() -> Data { return Data(0) }
func sourceStringArray() -> [String] { return [] }
func sink(arg: Any) {}
func taintThroughInterpolatedStrings() {
// simple initializers
sink(arg: NSString(characters: sourceUnicharString(), length: 512)) // $ tainted=194
sink(arg: NSString(charactersNoCopy: sourceMutableUnicharString(), length: 512, freeWhenDone: false)) // $ tainted=195
sink(arg: NSString(string: sourceString())) // $ tainted=196
sink(arg: NSString(format: sourceString(), arguments: (nil as CVaListPointer?)!)) // $ tainted=197
sink(arg: NSString(format: sourceString(), locale: nil, arguments: (nil as CVaListPointer?)!)) // $ tainted=198
sink(arg: NSString(format: sourceNSString())) // $ tainted=199
sink(arg: NSString(format: sourceNSString(), locale: nil)) // $ tainted=200
// initializers that can throw
sink(arg: try! NSString(contentsOfFile: sourceString(), encoding: 0)) // $ tainted=204
sink(arg: try! NSString(contentsOfFile: sourceString(), usedEncoding: nil)) // $ tainted=205
sink(arg: try! NSString(contentsOf: sourceURL(), encoding: 0)) // $: tainted=206
sink(arg: try! NSString(contentsOf: URL(string: sourceString())!, encoding: 0)) // $ tainted=207
sink(arg: try! NSString(contentsOf: sourceURL(), usedEncoding: nil)) // $ tainted=208
sink(arg: try! NSString(contentsOf: URL(string: sourceString())!, usedEncoding: nil)) // $ tainted=209
// initializers returning an optional
sink(arg: NSString(bytes: sourceUnsafeRawPointer(), length: 1024, encoding: 0)) // $ tainted=213
sink(arg: NSString(bytes: sourceUnsafeRawPointer(), length: 1024, encoding: 0)!) // $ tainted=214
sink(arg: NSString(bytes: UnsafeRawPointer(sourceUnsafeMutableRawPointer()), length: 1024, encoding: 0)!) // $ MISSING: tainted=
sink(arg: NSString(bytesNoCopy: sourceUnsafeMutableRawPointer(), length: 1024, encoding: 0, freeWhenDone: false)) // $ tainted=217
sink(arg: NSString(bytesNoCopy: sourceUnsafeMutableRawPointer(), length: 1024, encoding: 0, freeWhenDone: false)!) // $ tainted=218
sink(arg: NSString(bytesNoCopy: UnsafeMutableRawPointer(mutating: sourceUnsafeRawPointer()), length: 1024, encoding: 0, freeWhenDone: false)!) // $ MISSING: tainted=
sink(arg: NSString(cString: sourceCString(), encoding: 0)) // $ tainted=221
sink(arg: NSString(cString: sourceCString(), encoding: 0)!) // $ tainted=222
sink(arg: NSString(cString: sourceUnsafeRawPointer().bindMemory(to: CChar.self, capacity: 1024), encoding: 0)!) // $ MISSING: tainted=
sink(arg: NSString(cString: sourceCString())) // $ tainted=225
sink(arg: NSString(cString: sourceCString())!) // $ tainted=226
sink(arg: NSString(cString: sourceUnsafeRawPointer().bindMemory(to: CChar.self, capacity: 1024))!) // $ MISSING: tainted=
sink(arg: NSString(utf8String: sourceCString())) // $ tainted=229
sink(arg: NSString(utf8String: sourceCString())!) // $ tainted=230
sink(arg: NSString(utf8String: sourceUnsafeRawPointer().bindMemory(to: CChar.self, capacity: 1024))!) // $ MISSING: tainted=
sink(arg: NSString(data: sourceData(), encoding: 0)) // $ tainted=233
sink(arg: NSString(data: sourceData(), encoding: 0)!) // $ tainted=234
sink(arg: NSString(data: Data(bytes: sourceUnsafeRawPointer(), count: 1024), encoding: 0)!) // $ tainted=235
sink(arg: NSString(contentsOfFile: sourceString())) // $ tainted=237
sink(arg: NSString(contentsOfFile: sourceString())!) // $ tainted=238
sink(arg: NSString(contentsOf: sourceURL())) // $ tainted=240
sink(arg: NSString(contentsOf: sourceURL())!) // $ tainted=241
// simple methods (taint flow to return value)
let harmless = NSString(string: "harmless")
let myRange = NSRange(location:0, length: 128)
sink(arg: NSString.localizedStringWithFormat(sourceNSString(), (nil as CVarArg?)!)) // $ tainted=248
sink(arg: sourceNSString().character(at: 0)) // $ tainted=249
sink(arg: sourceNSString().cString(using: 0)!) // $ tainted=250
sink(arg: sourceNSString().cString()) // $ tainted=251
sink(arg: sourceNSString().lossyCString()) // $ tainted=252
sink(arg: sourceNSString().padding(toLength: 256, withPad: " ", startingAt: 0)) // $ tainted=253
sink(arg: harmless.padding(toLength: 256, withPad: sourceString(), startingAt: 0)) // $ tainted=254
sink(arg: sourceNSString().lowercased(with: nil)) // $ tainted=255
sink(arg: sourceNSString().uppercased(with: nil)) // $ tainted=256
sink(arg: sourceNSString().capitalized(with: nil)) // $ tainted=257
sink(arg: sourceNSString().components(separatedBy: ",")) // $ tainted=258
sink(arg: sourceNSString().components(separatedBy: ",")[0]) // $ tainted=259
sink(arg: sourceNSString().components(separatedBy: CharacterSet.whitespaces)) // $ tainted=260
sink(arg: sourceNSString().components(separatedBy: CharacterSet.whitespaces)[0]) // $ tainted=261
sink(arg: sourceNSString().trimmingCharacters(in: CharacterSet.whitespaces)) // $ tainted=262
sink(arg: sourceNSString().substring(from: 0)) // $ tainted=263
sink(arg: sourceNSString().substring(with: myRange)) // $ tainted=264
sink(arg: sourceNSString().substring(to: 80)) // $ tainted=265
sink(arg: sourceNSString().folding(locale: nil)) // $ tainted=266
sink(arg: sourceNSString().applyingTransform(StringTransform.toLatin, reverse: false)) // $ tainted=267
sink(arg: sourceNSString().propertyList()) // $ tainted=268
sink(arg: sourceNSString().propertyListFromStringsFileFormat()) // $ tainted=269
sink(arg: sourceNSString().variantFittingPresentationWidth(80)) // $ tainted=270
sink(arg: sourceNSString().data(using: 0)) // $ tainted=271
sink(arg: sourceNSString().data(using: 0, allowLossyConversion: false)) // $ tainted=272
sink(arg: sourceNSString().replacingOccurrences(of: "a", with: "b")) // $ tainted=273
sink(arg: harmless.replacingOccurrences(of: "a", with: sourceString())) // $ tainted=274
sink(arg: sourceNSString().replacingOccurrences(of: "a", with: "b", range: NSRange(location: 0, length: 10))) // $ tainted=275
sink(arg: harmless.replacingOccurrences(of: "a", with: sourceString(), range: NSRange(location: 0, length: 10))) // $ tainted=276
sink(arg: NSString.path(withComponents: ["a", "b", "c"]))
sink(arg: NSString.path(withComponents: sourceStringArray())) // $ tainted=278
sink(arg: NSString.path(withComponents: ["a", sourceString(), "c"])) // $ MISSING: tainted=
sink(arg: NSString.string(withCString: sourceCString())) // $ tainted=280
sink(arg: NSString.string(withCString: sourceCString(), length: 128)) // $ tainted=281
sink(arg: NSString.string(withContentsOfFile: sourceString())) // $ tainted=282
sink(arg: NSString.string(withContentsOf: sourceURL())) // $ tainted=283
// appending
sink(arg: harmless.appendingFormat(harmless, (nil as CVarArg?)!))
sink(arg: harmless.appendingFormat(sourceNSString(), (nil as CVarArg?)!)) // $ tainted=288
sink(arg: sourceNSString().appendingFormat(harmless, (nil as CVarArg?)!)) // $ tainted=289
sink(arg: harmless.appendingPathComponent(""))
sink(arg: harmless.appendingPathComponent(sourceString())) // $ tainted=292
sink(arg: sourceNSString().appendingPathComponent("")) // $ tainted=293
sink(arg: harmless.appendingPathComponent("", conformingTo: (nil as UTType?)!))
sink(arg: harmless.appendingPathComponent(sourceString(), conformingTo: (nil as UTType?)!)) // $ tainted=296
sink(arg: sourceNSString().appendingPathComponent("", conformingTo: (nil as UTType?)!)) // $ tainted=297
sink(arg: harmless.appendingPathExtension(""))
sink(arg: harmless.appendingPathExtension(sourceString())) // $ tainted=300
sink(arg: sourceNSString().appendingPathExtension("")) // $ tainted=301
sink(arg: harmless.appending(""))
sink(arg: sourceNSString().appending("")) // $ tainted=304
sink(arg: harmless.appending(sourceString())) // $ tainted=305
sink(arg: harmless.strings(byAppendingPaths: [""]))
sink(arg: harmless.strings(byAppendingPaths: [""])[0])
sink(arg: harmless.strings(byAppendingPaths: [sourceString()])) // $ MISSING: tainted=
sink(arg: harmless.strings(byAppendingPaths: [sourceString()])[0]) // $ MISSING: tainted=
sink(arg: sourceNSString().strings(byAppendingPaths: [""])) // $ tainted=311
sink(arg: sourceNSString().strings(byAppendingPaths: [""])[0]) // $ tainted=312
// other methods
var ptr1 = (nil as UnsafeMutablePointer<unichar>?)!
sink(arg: ptr1)
harmless.getCharacters(ptr1, range: myRange)
sink(arg: ptr1)
sourceNSString().getCharacters(ptr1, range: myRange)
sink(arg: ptr1) // $ MISSING: tainted=
var ptr2 = (nil as UnsafeMutablePointer<unichar>?)!
sink(arg: ptr2)
harmless.getCharacters(ptr2)
sink(arg: ptr2)
sourceNSString().getCharacters(ptr2)
sink(arg: ptr2) // $ MISSING: tainted=
var ptr3 = (nil as UnsafeMutableRawPointer?)!
sink(arg: ptr3)
harmless.getBytes(ptr3, maxLength: 128, usedLength: nil, encoding: 0, range: myRange, remaining: nil)
sink(arg: ptr3)
sourceNSString().getBytes(ptr3, maxLength: 128, usedLength: nil, encoding: 0, range: myRange, remaining: nil)
sink(arg: ptr3) // $ tainted=334
var ptr4 = (nil as UnsafeMutablePointer<CChar>?)!
sink(arg: ptr4)
harmless.getCString(ptr4, maxLength: 128, encoding: 0)
sink(arg: ptr4)
sourceNSString().getCString(ptr4, maxLength: 128, encoding: 0)
sink(arg: ptr4) // $ MISSING: tainted=
var ptr5 = (nil as UnsafeMutablePointer<CChar>?)!
sink(arg: ptr5)
harmless.getCString(ptr5)
sink(arg: ptr5)
sourceNSString().getCString(ptr5)
sink(arg: ptr5) // $ MISSING: tainted=
sink(arg: harmless.enumerateLines({
line, stop in
sink(arg: line)
sink(arg: stop)
}))
sink(arg: sourceNSString().enumerateLines({
line, stop in
sink(arg: line) // $ MISSING: tainted=
sink(arg: stop)
}))
var str10 = sourceNSString()
var outLongest = (nil as AutoreleasingUnsafeMutablePointer<NSString?>?)!
var outArray = (nil as AutoreleasingUnsafeMutablePointer<NSArray?>?)!
if (str10.completePath(into: outLongest, caseSensitive: false, matchesInto: outArray, filterTypes: nil) > 0) {
sink(arg: outLongest) // $ MISSING: tainted=
sink(arg: outLongest.pointee) // $ MISSING: tainted=
sink(arg: outLongest.pointee!) // $ MISSING: tainted=
sink(arg: outArray) // $ MISSING: tainted=
sink(arg: outArray.pointee) // $ MISSING: tainted=
sink(arg: outArray.pointee!) // $ MISSING: tainted=
}
var str11 = sourceNSString()
var outBuffer = (nil as UnsafeMutablePointer<CChar>?)!
if (str11.getFileSystemRepresentation(outBuffer, maxLength: 256)) {
sink(arg: outBuffer) // $ MISSING: tainted=
sink(arg: outBuffer.pointee) // $ MISSING: tainted=
}
// `NSObject` methods
var str20 = sourceNSString()
sink(arg: str20.copy()) // $ tainted=383
sink(arg: str20.mutableCopy()) // $ tainted=383
sink(arg: str20.copy(with: nil)) // $ tainted=383
sink(arg: str20.mutableCopy(with: nil)) // $ tainted=383
// `NSMutableString` methods
sink(arg: sourceNSMutableString().capitalized(with: nil)) // $ tainted=392
var str30 = NSMutableString(string: "")
sink(arg: str30)
str30.append(sourceString())
sink(arg: str30) // $ tainted=396
var str31 = NSMutableString(string: "")
sink(arg: str31)
str31.insert(sourceString(), at: 0)
sink(arg: str31) // $ tainted=401
var str32 = NSMutableString(string: "")
sink(arg: str32)
str32.replaceCharacters(in: myRange, with: sourceString())
sink(arg: str32) // $ tainted=406
var str33 = NSMutableString(string: "")
sink(arg: str33)
str33.replaceOccurrences(of: "a", with: sourceString(), range: myRange)
sink(arg: str33) // $ tainted=411
var str34 = NSMutableString(string: "")
sink(arg: str34)
str34.setString(sourceString())
sink(arg: str34) // $ tainted=416
str34.append("-append")
sink(arg: str34) // $ tainted=416
str34.setString("")
sink(arg: str34) // $ SPURIOUS: tainted=416
// member variables
sink(arg: sourceNSString().utf8String) // $ tainted=425
sink(arg: NSString(utf8String: sourceNSString().utf8String!)!) // $ tainted=426
sink(arg: sourceNSString().lowercased) // $ tainted=427
sink(arg: sourceNSString().localizedLowercase) // $ MISSING: tainted=
sink(arg: sourceNSString().uppercased) // $ tainted=429
sink(arg: sourceNSString().localizedUppercase) // $ tainted=430
sink(arg: sourceNSString().capitalized) // $ tainted=431
sink(arg: sourceNSString().localizedCapitalized) // $ tainted=432
sink(arg: sourceNSString().decomposedStringWithCanonicalMapping) // $ tainted=433
sink(arg: sourceNSString().decomposedStringWithCompatibilityMapping) // $ tainted=434
sink(arg: sourceNSString().precomposedStringWithCanonicalMapping) // $ tainted=435
sink(arg: sourceNSString().precomposedStringWithCompatibilityMapping) // $ tainted=436
sink(arg: sourceNSString().doubleValue) // $ tainted=437
sink(arg: sourceNSString().floatValue) // $ tainted=438
sink(arg: sourceNSString().intValue) // $ tainted=439
sink(arg: sourceNSString().integerValue) // $ tainted=440
sink(arg: sourceNSString().longLongValue) // $ tainted=441
sink(arg: sourceNSString().boolValue) // $ tainted=442
sink(arg: sourceNSString().description) // $ tainted=443
sink(arg: sourceNSString().pathComponents) // $ tainted=444
sink(arg: sourceNSString().pathComponents[0]) // $ tainted=445
sink(arg: sourceNSString().fileSystemRepresentation) // $ tainted=446
sink(arg: sourceNSString().lastPathComponent) // $ tainted=447
sink(arg: sourceNSString().pathExtension) // $ tainted=448
sink(arg: sourceNSString().abbreviatingWithTildeInPath) // $ tainted=449
sink(arg: sourceNSString().deletingLastPathComponent) // $ tainted=450
sink(arg: sourceNSString().deletingPathExtension) // $ tainted=451
sink(arg: sourceNSString().expandingTildeInPath) // $ tainted=452
sink(arg: sourceNSString().resolvingSymlinksInPath) // $ tainted=453
sink(arg: sourceNSString().standardizingPath) // $ tainted=454
sink(arg: sourceNSString().removingPercentEncoding) // $ tainted=455
}

View File

@@ -1,4 +1,5 @@
edges
| UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in NSString.init(string:) : |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:70:28:70:28 | tainted |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:73:28:73:28 | tainted |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:74:28:74:28 | tainted |
@@ -6,9 +7,22 @@ edges
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:77:28:77:28 | tainted |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:78:28:78:28 | tainted |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:79:46:79:46 | tainted |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:81:47:81:47 | tainted : |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:82:65:82:65 | tainted : |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:84:54:84:54 | tainted : |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:85:72:85:72 | tainted : |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:88:11:88:11 | tainted |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:91:61:91:61 | tainted |
| UncontrolledFormatString.swift:81:47:81:47 | tainted : | UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : |
| UncontrolledFormatString.swift:81:47:81:47 | tainted : | UncontrolledFormatString.swift:81:30:81:54 | call to NSString.init(string:) |
| UncontrolledFormatString.swift:82:65:82:65 | tainted : | UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : |
| UncontrolledFormatString.swift:82:65:82:65 | tainted : | UncontrolledFormatString.swift:82:48:82:72 | call to NSString.init(string:) |
| UncontrolledFormatString.swift:84:54:84:54 | tainted : | UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : |
| UncontrolledFormatString.swift:84:54:84:54 | tainted : | UncontrolledFormatString.swift:84:37:84:61 | call to NSString.init(string:) |
| UncontrolledFormatString.swift:85:72:85:72 | tainted : | UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : |
| UncontrolledFormatString.swift:85:72:85:72 | tainted : | UncontrolledFormatString.swift:85:55:85:79 | call to NSString.init(string:) |
nodes
| UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : | semmle.label | [summary param] 0 in NSString.init(string:) : |
| UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | semmle.label | call to String.init(contentsOf:) : |
| UncontrolledFormatString.swift:70:28:70:28 | tainted | semmle.label | tainted |
| UncontrolledFormatString.swift:73:28:73:28 | tainted | semmle.label | tainted |
@@ -17,9 +31,22 @@ nodes
| UncontrolledFormatString.swift:77:28:77:28 | tainted | semmle.label | tainted |
| UncontrolledFormatString.swift:78:28:78:28 | tainted | semmle.label | tainted |
| UncontrolledFormatString.swift:79:46:79:46 | tainted | semmle.label | tainted |
| UncontrolledFormatString.swift:81:30:81:54 | call to NSString.init(string:) | semmle.label | call to NSString.init(string:) |
| UncontrolledFormatString.swift:81:47:81:47 | tainted : | semmle.label | tainted : |
| UncontrolledFormatString.swift:82:48:82:72 | call to NSString.init(string:) | semmle.label | call to NSString.init(string:) |
| UncontrolledFormatString.swift:82:65:82:65 | tainted : | semmle.label | tainted : |
| UncontrolledFormatString.swift:84:37:84:61 | call to NSString.init(string:) | semmle.label | call to NSString.init(string:) |
| UncontrolledFormatString.swift:84:54:84:54 | tainted : | semmle.label | tainted : |
| UncontrolledFormatString.swift:85:55:85:79 | call to NSString.init(string:) | semmle.label | call to NSString.init(string:) |
| UncontrolledFormatString.swift:85:72:85:72 | tainted : | semmle.label | tainted : |
| UncontrolledFormatString.swift:88:11:88:11 | tainted | semmle.label | tainted |
| UncontrolledFormatString.swift:91:61:91:61 | tainted | semmle.label | tainted |
| file://:0:0:0:0 | [summary] to write: return (return) in NSString.init(string:) : | semmle.label | [summary] to write: return (return) in NSString.init(string:) : |
subpaths
| UncontrolledFormatString.swift:81:47:81:47 | tainted : | UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in NSString.init(string:) : | UncontrolledFormatString.swift:81:30:81:54 | call to NSString.init(string:) |
| UncontrolledFormatString.swift:82:65:82:65 | tainted : | UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in NSString.init(string:) : | UncontrolledFormatString.swift:82:48:82:72 | call to NSString.init(string:) |
| UncontrolledFormatString.swift:84:54:84:54 | tainted : | UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in NSString.init(string:) : | UncontrolledFormatString.swift:84:37:84:61 | call to NSString.init(string:) |
| UncontrolledFormatString.swift:85:72:85:72 | tainted : | UncontrolledFormatString.swift:30:5:30:35 | [summary param] 0 in NSString.init(string:) : | file://:0:0:0:0 | [summary] to write: return (return) in NSString.init(string:) : | UncontrolledFormatString.swift:85:55:85:79 | call to NSString.init(string:) |
#select
| UncontrolledFormatString.swift:70:28:70:28 | tainted | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:70:28:70:28 | tainted | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:73:28:73:28 | tainted | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:73:28:73:28 | tainted | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
@@ -28,5 +55,9 @@ subpaths
| UncontrolledFormatString.swift:77:28:77:28 | tainted | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:77:28:77:28 | tainted | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:78:28:78:28 | tainted | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:78:28:78:28 | tainted | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:79:46:79:46 | tainted | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:79:46:79:46 | tainted | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:81:30:81:54 | call to NSString.init(string:) | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:81:30:81:54 | call to NSString.init(string:) | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:82:48:82:72 | call to NSString.init(string:) | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:82:48:82:72 | call to NSString.init(string:) | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:84:37:84:61 | call to NSString.init(string:) | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:84:37:84:61 | call to NSString.init(string:) | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:85:55:85:79 | call to NSString.init(string:) | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:85:55:85:79 | call to NSString.init(string:) | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:88:11:88:11 | tainted | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:88:11:88:11 | tainted | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |
| UncontrolledFormatString.swift:91:61:91:61 | tainted | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) : | UncontrolledFormatString.swift:91:61:91:61 | tainted | This format string depends on $@. | UncontrolledFormatString.swift:64:24:64:77 | call to String.init(contentsOf:) | this user-provided value |

View File

@@ -78,11 +78,11 @@ func tests() {
let k = String(format: tainted, locale: nil, arguments: []) // BAD
let l = String.localizedStringWithFormat(tainted) // BAD
let m = NSString(format: NSString(string: tainted), "abc") // BAD [NOT DETECTED]
let n = NSString.localizedStringWithFormat(NSString(string: tainted)) // BAD [NOT DETECTED]
let m = NSString(format: NSString(string: tainted), "abc") // BAD
let n = NSString.localizedStringWithFormat(NSString(string: tainted)) // BAD
var o = NSMutableString(format: NSString(string: tainted), "abc") // BAD [NOT DETECTED]
var p = NSMutableString.localizedStringWithFormat(NSString(string: tainted)) // BAD [NOT DETECTED]
var o = NSMutableString(format: NSString(string: tainted), "abc") // BAD
var p = NSMutableString.localizedStringWithFormat(NSString(string: tainted)) // BAD
NSLog("abc") // GOOD: not tainted
NSLog(tainted) // BAD