From 9245f736a7f2d5ae0f24923c83949a5850844c21 Mon Sep 17 00:00:00 2001 From: Martin Szulecki Date: Wed, 9 Oct 2013 17:14:58 +0200 Subject: preflight: Free version string in all cases to prevent memory leak --- src/preflight.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/preflight.c b/src/preflight.c index b616e5f..44a59ff 100644 --- a/src/preflight.c +++ b/src/preflight.c @@ -118,6 +118,9 @@ static void* preflight_worker_handle_device_add(void* userdata) lockdownd_client_t lockdown = NULL; lockdownd_error_t lerr; + plist_t value = NULL; + char* version_str = NULL; + retry: lerr = lockdownd_client_new(dev, &lockdown, "usbmuxd"); if (lerr != LOCKDOWN_E_SUCCESS) { @@ -171,15 +174,16 @@ retry: break; } - plist_t value = NULL; lerr = lockdownd_get_value(lockdown, NULL, "ProductVersion", &value); if (lerr != LOCKDOWN_E_SUCCESS) { usbmuxd_log(LL_ERROR, "%s: ERROR: Could not get ProductVersion from device %s, lockdown error %d", __func__, _dev->udid, lerr); goto leave; } - char* version_str = NULL; - plist_get_string_val(value, &version_str); + if (value && plist_get_node_type(value) == PLIST_STRING) { + plist_get_string_val(value, &version_str); + } + if (!version_str) { usbmuxd_log(LL_ERROR, "%s: Could not get ProductVersion string from device %s handle %d", __func__, _dev->udid, (int)(long)_dev->conn_data); goto leave; @@ -277,6 +281,10 @@ retry: } leave: + if (value) + plist_free(value); + if (version_str) + free(version_str); if (lockdown) lockdownd_client_free(lockdown); if (dev) -- cgit v1.1-32-gdbae