From 740a94742767dd914acd021c1cde9fb51b20797a Mon Sep 17 00:00:00 2001 From: Dan Pashin Date: Fri, 14 Jun 2024 16:03:12 +0300 Subject: [PATCH] Do not crash when tw_get_packages returned -1 --- twackup-gui/Twackup/Sources/FFI Models/Dpkg.swift | 13 +++++++++++++ .../Packages/Data Providers/DpkgDataProvider.swift | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/twackup-gui/Twackup/Sources/FFI Models/Dpkg.swift b/twackup-gui/Twackup/Sources/FFI Models/Dpkg.swift index 87e9caa..ef2758b 100644 --- a/twackup-gui/Twackup/Sources/FFI Models/Dpkg.swift +++ b/twackup-gui/Twackup/Sources/FFI Models/Dpkg.swift @@ -7,6 +7,16 @@ import Sentry +enum DpkgError: Error, LocalizedError { + case `internal` + + var errorDescription: String? { + switch self { + case .internal: "Internal error. Needs more details" + } + } +} + actor Dpkg { enum MessageLevel: UInt8 { case debug @@ -42,6 +52,9 @@ actor Dpkg { func parsePackages(onlyLeaves: Bool) throws -> [FFIPackage] { var packagesPtr: UnsafeMutablePointer? let count = tw_get_packages(innerDpkg, onlyLeaves, TW_PACKAGES_SORT_NAME.clampedToU8, &packagesPtr) + if count == -1 { + throw DpkgError.internal + } let buffer = UnsafeBufferPointer(start: packagesPtr, count: Int(count)) defer { tw_free_packages(packagesPtr, count) } diff --git a/twackup-gui/Twackup/Sources/Models/Packages/Data Providers/DpkgDataProvider.swift b/twackup-gui/Twackup/Sources/Models/Packages/Data Providers/DpkgDataProvider.swift index c83e1da..4476591 100644 --- a/twackup-gui/Twackup/Sources/Models/Packages/Data Providers/DpkgDataProvider.swift +++ b/twackup-gui/Twackup/Sources/Models/Packages/Data Providers/DpkgDataProvider.swift @@ -25,7 +25,7 @@ class DpkgDataProvier: PackageDataProvider, @unchecked Sendable { do { allPackages = try await dpkg.parsePackages(onlyLeaves: onlyLeaves) } catch { - await FFILogger.shared.log("\(error)", level: .error) + await FFILogger.shared.log("Error \(error): \(error.localizedDescription)", level: .error) SentrySDK.capture(error: error) }