Reading NFC record under 4 chars causes weird issues.

Hi There,

I'm trying to read the NDEF records stored on my NRF52 DK but I'm having some issues when the the NDEF record payload is less than 4 chars. I just get random symbols or large buffer values instead (See terminal output):

Code:

static char *read_nfc_data()
{
  int err;
  size_t nfc_length = ndef_msg_buf[1];
  uint8_t desc_buf[NFC_NDEF_PARSER_REQIRED_MEMO_SIZE_CALC(10)];
  size_t desc_buf_len = sizeof(desc_buf);

  // Load NDEF message from flash buffer
  err = nfc_ndef_msg_parse(desc_buf, &desc_buf_len, &ndef_msg_buf[2], &nfc_length);
  if (err)
  {
    printk("Error during parsing an NDEF message, err: %d.\n", err);
  }

  // Parse message into NDEF records
  struct nfc_ndef_msg_desc *ndef_message_desc;
  ndef_message_desc = (struct nfc_ndef_msg_desc *)desc_buf;

  // Iterate over records
  for (int i = 0; i < ndef_message_desc->record_count; i++)
  {
    size_t record_size = nfc_length;

    // Extract payload description from NDEF record
    struct nfc_ndef_record_desc record_desc = *ndef_message_desc->record[i];
    struct nfc_ndef_bin_payload_desc * payload_desc = record_desc.payload_descriptor;

    // Remove header from payload to reveal text
    int payload_length = payload_desc->payload_length - 3;
    char *payload_message = malloc(payload_length + 1);
    char *original_message = payload_desc->payload + 3;

    // Copy string from buffer to variable with terminator
    memcpy(&payload_message, &original_message, payload_length);
    payload_message[payload_length] = '\0';
    printk("String: %s (%d)\n", payload_message);
  }

  // Return empty string if failure
  return "";
}


Terminal Output:
E: CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE is 0
String: Aaaa
E: CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE is 0
String: Hello! 
E: CONFIG_MINIMAL_LIBC_MALLOC_ARENA_SIZE is 0
String: ��
         m�� 

^^ The three NDEF values were:
 - Aaaa
 - Hello!
 - A

Parents Reply Children
Related