From 4222bc1b880d6535462e3b5ba5431809a3c5fddc Mon Sep 17 00:00:00 2001
From: Nikias Bassen
Date: Thu, 14 Mar 2013 03:09:14 +0100
Subject: global: make sure to check service before checking service->port to
 prevent crashes

---
 dev/afccheck.c      |  2 +-
 dev/ideviceclient.c | 17 +++++------------
 2 files changed, 6 insertions(+), 13 deletions(-)

(limited to 'dev')

diff --git a/dev/afccheck.c b/dev/afccheck.c
index ead0ca0..d7ee7d1 100644
--- a/dev/afccheck.c
+++ b/dev/afccheck.c
@@ -111,7 +111,7 @@ int main(int argc, char *argv[])
 		return 1;
 	}
 
-	if (LOCKDOWN_E_SUCCESS == lockdownd_start_service(client, "com.apple.afc", &service) && !service->port) {
+	if (LOCKDOWN_E_SUCCESS != lockdownd_start_service(client, "com.apple.afc", &service) || !service || !service->port) {
 		lockdownd_client_free(client);
 		idevice_free(phone);
 		fprintf(stderr, "Something went wrong when starting AFC.");
diff --git a/dev/ideviceclient.c b/dev/ideviceclient.c
index c8635d8..778f20e 100644
--- a/dev/ideviceclient.c
+++ b/dev/ideviceclient.c
@@ -49,7 +49,7 @@ static void perform_notification(idevice_t phone, lockdownd_client_t client, con
 	np_client_t np;
 
 	lockdownd_start_service(client, "com.apple.mobile.notification_proxy", &service);
-	if (service->port) {
+	if (service && service->port) {
 		printf("::::::::::::::: np was started ::::::::::::\n");
 		np_client_new(phone, service, &np);
 		if (np) {
@@ -109,15 +109,10 @@ int main(int argc, char *argv[])
 
 	lockdownd_start_service(client, "com.apple.afc", &service);
 
-	if (service->port) {
+	if (service && service->port) {
 		afc_client_t afc = NULL;
 		afc_client_new(phone, service, &afc);
 
-		if (service) {
-			lockdownd_service_descriptor_free(service);
-			service = NULL;
-		}
-
 		if (afc) {
 			service->port = 0;
 			service->ssl_enabled = 0;
@@ -129,11 +124,6 @@ int main(int argc, char *argv[])
 				printf("ERROR: Notification proxy could not be started.\n");
 			}
 
-			if (service) {
-				lockdownd_service_descriptor_free(service);
-				service = NULL;
-			}
-
 			if (gnp) {
 				const char *nspec[5] = {
 					NP_SYNC_CANCEL_REQUEST,
@@ -266,6 +256,9 @@ int main(int argc, char *argv[])
 		}
 
 		afc_client_free(afc);
+
+		lockdownd_service_descriptor_free(service);
+		service = NULL;
 	} else {
 		printf("Start service failure.\n");
 	}
-- 
cgit v1.1-32-gdbae