From ac694692b7c658230610cee0e9e25012fed6c99f Mon Sep 17 00:00:00 2001 From: Arron Wang Date: Mon, 7 Jul 2014 14:17:55 +0800 Subject: [PATCH] Fixed failed to handle empty tag issue Some NFC tag has empty record, we should also handle them properly and allow use the write new data to it Fixed TC-173 Change-Id: I26c712ec0939ee82a6a154865412d5c1f9411aaa --- client/net_nfc_client_ndef_message.c | 2 +- client/net_nfc_neard.c | 9 ++++++--- common/net_nfc_util_ndef_message.c | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/client/net_nfc_client_ndef_message.c b/client/net_nfc_client_ndef_message.c index 7f561a9..4634f1b 100644 --- a/client/net_nfc_client_ndef_message.c +++ b/client/net_nfc_client_ndef_message.c @@ -91,7 +91,7 @@ API net_nfc_error_e net_nfc_get_ndef_message_byte_length( RETV_IF(NULL == length, NET_NFC_NULL_PARAMETER); *length = net_nfc_util_get_ndef_message_length(ndef_message); - if (*length > 0) + if (*length >= 0) result = NET_NFC_OK; else result = NET_NFC_INVALID_PARAM; diff --git a/client/net_nfc_neard.c b/client/net_nfc_neard.c index c2eafe1..ed3bee8 100644 --- a/client/net_nfc_neard.c +++ b/client/net_nfc_neard.c @@ -303,7 +303,7 @@ static void _tag_found_cb(const char *tagName, void *user_data) if (neardal_get_tag_properties(tagName, &tag) != NEARDAL_SUCCESS) return; - if (tag == NULL || tag->records == NULL) + if (tag == NULL) return; net_nfc_manager_util_play_sound(NET_NFC_TASK_START); @@ -425,7 +425,7 @@ static void _read_completed_cb(GVariant *ret, void *user_data) rawNDEF->length = (int)length; rawNDEF->buffer = g_try_malloc0(rawNDEF->length); - if (rawNDEF->buffer == NULL) { + if (rawNDEF->length > 0 && rawNDEF->buffer == NULL) { g_free(rawNDEF); goto exit; } @@ -768,7 +768,10 @@ net_nfc_error_e net_nfc_neard_write_ndef(net_nfc_target_handle_s *handle, if (record == NULL) return NET_NFC_ALLOC_FAIL; - record->name = g_strdup(tag->records[0]); + if (tag->records != NULL) + record->name = g_strdup(tag->records[0]); + else + record->name = g_strdup(tag->name); record->type = g_strdup("Raw"); record->rawNDEF = g_try_malloc0(data->length); if (record->rawNDEF == NULL) { diff --git a/common/net_nfc_util_ndef_message.c b/common/net_nfc_util_ndef_message.c index 1bbb629..35f254e 100644 --- a/common/net_nfc_util_ndef_message.c +++ b/common/net_nfc_util_ndef_message.c @@ -35,7 +35,7 @@ net_nfc_error_e net_nfc_util_convert_rawdata_to_ndef_message( RETV_IF(NULL == ndef, NET_NFC_NULL_PARAMETER); RETV_IF(NULL == rawdata, NET_NFC_NULL_PARAMETER); - RETV_IF(rawdata->length < 3, NET_NFC_INVALID_FORMAT); + RETV_IF(rawdata->length < 0, NET_NFC_INVALID_FORMAT); current = rawdata->buffer; last = current + rawdata->length; @@ -200,7 +200,7 @@ net_nfc_error_e net_nfc_util_convert_rawdata_to_ndef_message( ndef->recordCount++; - if((current != last) || ((ndef_header & NET_NFC_NDEF_RECORD_MASK_ME) == 0)) + if((current != last) || (((ndef_header & NET_NFC_NDEF_RECORD_MASK_ME) == 0) && (rawdata->length != 0))) { result = NET_NFC_INVALID_FORMAT; goto error; -- 2.7.4