From: Szymon Jastrzebski Date: Thu, 13 Jul 2017 06:19:53 +0000 (+0200) Subject: [Contact] Fixing bug when adding Contact to AddressBook X-Git-Tag: submit/tizen_3.0/20170719.073651~2^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e7a3c0c0f7c3c2788bea8e7294696deabf2feff6;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Contact] Fixing bug when adding Contact to AddressBook There was a bug, which caused application to crash everytime when adding more than one nickname. In every iteration of nicknames, the same nickname-handler was added to parent-handler. The crash happened during attempting to free parent-handler with all its children (double free). Contact TCT passed 100%. Change-Id: Ibaddf2ce17aacb6dcf40422fc0303ec5e1142089 Signed-off-by: Szymon Jastrzebski --- diff --git a/src/contact/contact_util.cc b/src/contact/contact_util.cc index bcccd3bf..6251ee12 100755 --- a/src/contact/contact_util.cc +++ b/src/contact/contact_util.cc @@ -584,39 +584,29 @@ PlatformResult ExportContactNameToContactsRecord( for (auto& nickname : nicknames) { contacts_record_h nickname_record = nullptr; - err = contacts_record_get_child_record_at_p( - contacts_record, _contacts_contact.nickname, 0, &nickname_record); - if (CONTACTS_ERROR_NONE != err && nullptr == nickname_record) { - err = contacts_record_create(_contacts_nickname._uri, &nickname_record); - PlatformResult status = - ContactUtil::ErrorChecker(err, "Contacts record create error"); - if (status.IsError()) { - LoggerE("Error: %s", status.message().c_str()); - return status; - } - - update = false; + err = contacts_record_create(_contacts_nickname._uri, &nickname_record); + PlatformResult status = ContactUtil::ErrorChecker(err, "Contacts record create error"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; } ContactsRecordHPtr nickname_ptr(&nickname_record, ContactsDeleter); - PlatformResult status = - ContactUtil::SetStrInRecord(*nickname_ptr, _contacts_nickname.name, - JsonCast(nickname).c_str()); + status = ContactUtil::SetStrInRecord(*nickname_ptr, _contacts_nickname.name, + JsonCast(nickname).c_str()); if (status.IsError()) { LoggerE("Error: %s", status.message().c_str()); return status; } - if (!update) { - err = contacts_record_add_child_record( - contacts_record, _contacts_contact.nickname, *nickname_ptr); - PlatformResult status = - ContactUtil::ErrorChecker(err, "Contacts record add child error"); - if (status.IsError()) { - LoggerE("Error: %s", status.message().c_str()); - return status; - } + err = contacts_record_add_child_record(contacts_record, _contacts_contact.nickname, + *nickname_ptr); + status = ContactUtil::ErrorChecker(err, "Contacts record add child error"); + if (status.IsError()) { + LoggerE("Error: %s", status.message().c_str()); + return status; } + // Do not delete record, it is passed to the platform nickname_ptr.release(); }