From b089ba2e04575024c411c0913aa3984f9ff667af Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Sat, 13 Jul 2019 17:33:58 +0200 Subject: [PATCH] Free memory of service descriptor and fix possible crashes --- src/device/imobiledeviceconnection.cpp | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/device/imobiledeviceconnection.cpp b/src/device/imobiledeviceconnection.cpp index 6a1ee0cd..1181881b 100644 --- a/src/device/imobiledeviceconnection.cpp +++ b/src/device/imobiledeviceconnection.cpp @@ -41,17 +41,17 @@ iMobileDeviceConnection::iMobileDeviceConnection(const QString &uuid) : device_( return; } - lockdownd_client_t lockdown; - lockdownd_service_descriptor_t lockdown_service_desc; - - QByteArray label_ascii = QCoreApplication::applicationName().toLatin1(); + QByteArray label_ascii = QCoreApplication::applicationName().toUtf8(); const char *label = label_ascii.constData(); + + lockdownd_client_t lockdown; lockdownd_error_t lockdown_err = lockdownd_client_new_with_handshake(device_, &lockdown, label); if (lockdown_err != LOCKDOWN_E_SUCCESS) { qLog(Warning) << "lockdown error:" << lockdown_err; return; } + lockdownd_service_descriptor_t lockdown_service_desc; lockdown_err = lockdownd_start_service(lockdown, "com.apple.afc", &lockdown_service_desc); if (lockdown_err != LOCKDOWN_E_SUCCESS) { qLog(Warning) << "lockdown error:" << lockdown_err; @@ -62,10 +62,12 @@ iMobileDeviceConnection::iMobileDeviceConnection(const QString &uuid) : device_( afc_error_t afc_err = afc_client_new(device_, lockdown_service_desc, &afc_); if (afc_err != 0) { qLog(Warning) << "afc error:" << afc_err; + lockdownd_service_descriptor_free(lockdown_service_desc); lockdownd_client_free(lockdown); return; } + lockdownd_service_descriptor_free(lockdown_service_desc); lockdownd_client_free(lockdown); } @@ -90,8 +92,10 @@ T GetPListValue(plist_t node, F f) { QVariant iMobileDeviceConnection::GetProperty(const QString &property, const QString &domain) { + if (!device_) return QVariant(); + lockdownd_client_t lockdown; - QByteArray label_ascii = QCoreApplication::applicationName().toLatin1(); + QByteArray label_ascii = QCoreApplication::applicationName().toUtf8(); const char *label = label_ascii.constData(); lockdownd_error_t lockdown_err = lockdownd_client_new_with_handshake(device_, &lockdown, label); @@ -101,10 +105,10 @@ QVariant iMobileDeviceConnection::GetProperty(const QString &property, const QSt } plist_t node = NULL; - QByteArray domain_ascii = domain.toLatin1(); + QByteArray domain_ascii = domain.toUtf8(); const char *d = domain_ascii.isEmpty() ? NULL : domain_ascii.constData(); //const char *d = domain.isEmpty() ? NULL : "com.apple.disk_usage"; - lockdownd_get_value(lockdown, d, property.toLatin1().constData(), &node); + lockdownd_get_value(lockdown, d, property.toUtf8().constData(), &node); lockdownd_client_free(lockdown); if (!node) { @@ -135,6 +139,8 @@ QVariant iMobileDeviceConnection::GetProperty(const QString &property, const QSt QStringList iMobileDeviceConnection::ReadDirectory(const QString &path, QDir::Filters filters) { + if (!afc_) return QStringList(); + char **list = NULL; afc_error_t err = afc_read_directory(afc_, path.toUtf8().constData(), &list); if (err != AFC_E_SUCCESS || !list) { @@ -166,12 +172,17 @@ QStringList iMobileDeviceConnection::ReadDirectory(const QString &path, QDir::Fi } bool iMobileDeviceConnection::MkDir(const QString &path) { + + if (!afc_) return false; + afc_error_t err = afc_make_directory(afc_, path.toUtf8().constData()); return err == AFC_E_SUCCESS; } QString iMobileDeviceConnection::GetFileInfo(const QString &path, const QString &key) { + if (!afc_) return QString(); + QString ret; char **infolist = NULL; afc_error_t err = afc_get_file_info(afc_, path.toUtf8().constData(), &infolist);