From c3377e0f2010d8e664cc92a3e13fde92c6e72e9b Mon Sep 17 00:00:00 2001 From: Jongkyu Koo Date: Wed, 30 Nov 2016 18:47:45 +0900 Subject: [PATCH] add handling when realloc() returns NULL Change-Id: Ia611c453a7176c455ef8f15be7cbb6d3f863bf3e Signed-off-by: Jongkyu Koo --- server/ctsvc_server_person.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/server/ctsvc_server_person.c b/server/ctsvc_server_person.c index 23c342b..5597d18 100644 --- a/server/ctsvc_server_person.c +++ b/server/ctsvc_server_person.c @@ -836,14 +836,24 @@ int ctsvc_person_aggregate(int person_id) } addr_len = snprintf(addr, sizeof(addr), "%d%s", addressbook_id, ADDRESSBOOK_ID_DELIM); - if (NULL == addressbook_ids) + if (NULL == addressbook_ids) { addressbook_ids = calloc(addressbooks_len+1, sizeof(char)); + if (NULL == addressbook_ids) + ERR("alloc() failed"); + } else if (addressbooks_len <= strlen(addressbook_ids)+addr_len) { - addressbooks_len = MAX(addressbooks_len*2, strlen(addressbook_ids)+addr_len+1); - addressbook_ids = realloc(addressbook_ids, addressbooks_len); + int new_addressbooks_len = MAX(addressbooks_len*2, strlen(addressbook_ids)+addr_len+1); + char *new_addressbook_ids = realloc(addressbook_ids, new_addressbooks_len); + if (new_addressbook_ids) { + addressbook_ids = new_addressbook_ids; + addressbooks_len = new_addressbooks_len + } else { + ERR("realloc() failed"); + } } - len += snprintf(addressbook_ids + len, addressbooks_len -len, "%d%s", addressbook_id, ADDRESSBOOK_ID_DELIM); + if (addressbook_ids && addressbooks_len -len > addr_len) + len += snprintf(addressbook_ids + len, addressbooks_len -len, "%d%s", addressbook_id, ADDRESSBOOK_ID_DELIM); if (NULL == image_thumbnail_path && contact_image_thumbnail_path && *contact_image_thumbnail_path) { image_thumbnail_path = SAFE_STRDUP(contact_image_thumbnail_path); -- 2.7.4