Remove force unwraps on XPC error set/get (#1958)

Signed-off-by: Kathryn Baldauf <k_baldauf@apple.com>
This commit is contained in:
Kathryn Baldauf
2026-07-20 15:14:05 -07:00
committed by GitHub
parent 9e1d6e8b6e
commit 3f543ba12f
+19 -6
View File
@@ -78,23 +78,36 @@ extension XPCMessage {
public func error() throws {
let data = data(key: Self.errorKey)
if let data {
let item = try? JSONDecoder().decode(ContainerXPCError.self, from: data)
precondition(item != nil, "expected to receive a ContainerXPCXPCError")
guard let item = try? JSONDecoder().decode(ContainerXPCError.self, from: data) else {
throw ContainerizationError(
.internalError,
message: "received a malformed error payload from the XPC peer"
)
}
throw ContainerizationError(item!.code, message: item!.message)
throw ContainerizationError(item.code, message: item.message)
}
}
/// Fallback error if `JSONEncoder` fails to encode the original error. In practice this should
/// never get used.
private static let fallbackErrorData = Data(
#"{"code":"\#(ContainerizationError.Code.internalError.description)","message":"the daemon failed to encode the original error"}"#
.utf8
)
public func set(error: ContainerizationError) {
var message = error.message
if let cause = error.cause {
message += " (cause: \"\(cause)\")"
}
let serializableError = ContainerXPCError(code: error.code.description, message: message)
let data = try? JSONEncoder().encode(serializableError)
precondition(data != nil)
guard let data = try? JSONEncoder().encode(serializableError) else {
set(key: Self.errorKey, value: Self.fallbackErrorData)
return
}
set(key: Self.errorKey, value: data!)
set(key: Self.errorKey, value: data)
}
}