nfc-read-forum-tag3: avoid passing large struct as parameter

Problem reported by Coverity:
CID 1090334 (#1 of 1): Big parameter passed by value (PASS_BY_VALUE)
  pass_by_value: Passing parameter nt of type nfc_target const (size 291 bytes) by value.
This commit is contained in:
Philippe Teuwen 2013-09-22 18:32:47 +02:00
parent 4a91859150
commit 117b58f501

View file

@ -100,7 +100,7 @@ build_felica_frame(const nfc_felica_info nfi, const uint8_t command, const uint8
#define CHECK 0x06 #define CHECK 0x06
static int static int
nfc_forum_tag_type3_check(nfc_device *dev, const nfc_target nt, const uint16_t block, const uint8_t block_count, uint8_t *data, size_t *data_len) nfc_forum_tag_type3_check(nfc_device *dev, const nfc_target *nt, const uint16_t block, const uint8_t block_count, uint8_t *data, size_t *data_len)
{ {
uint8_t payload[1024] = { uint8_t payload[1024] = {
1, // Services 1, // Services
@ -123,7 +123,7 @@ nfc_forum_tag_type3_check(nfc_device *dev, const nfc_target nt, const uint16_t b
uint8_t frame[1024]; uint8_t frame[1024];
size_t frame_len = sizeof(frame); size_t frame_len = sizeof(frame);
build_felica_frame(nt.nti.nfi, CHECK, payload, payload_len, frame, &frame_len); build_felica_frame(nt->nti.nfi, CHECK, payload, payload_len, frame, &frame_len);
uint8_t rx[1024]; uint8_t rx[1024];
int res; int res;
@ -144,7 +144,7 @@ nfc_forum_tag_type3_check(nfc_device *dev, const nfc_target nt, const uint16_t b
// Command return does not match // Command return does not match
return -1; return -1;
} }
if (0 != memcmp(&rx[2], nt.nti.nfi.abtId, 8)) { if (0 != memcmp(&rx[2], nt->nti.nfi.abtId, 8)) {
// NFCID2 does not match // NFCID2 does not match
return -1; return -1;
} }
@ -283,7 +283,7 @@ main(int argc, char *argv[])
uint8_t data[1024]; uint8_t data[1024];
size_t data_len = sizeof(data); size_t data_len = sizeof(data);
if (nfc_forum_tag_type3_check(pnd, nt, 0, 1, data, &data_len) <= 0) { if (nfc_forum_tag_type3_check(pnd, &nt, 0, 1, data, &data_len) <= 0) {
nfc_perror(pnd, "nfc_forum_tag_type3_check"); nfc_perror(pnd, "nfc_forum_tag_type3_check");
fclose(ndef_stream); fclose(ndef_stream);
nfc_close(pnd); nfc_close(pnd);
@ -328,7 +328,7 @@ main(int argc, char *argv[])
data_len = 0; data_len = 0;
for (uint16_t b = 0; b < (block_count_to_check / block_max_per_check); b += block_max_per_check) { for (uint16_t b = 0; b < (block_count_to_check / block_max_per_check); b += block_max_per_check) {
size_t size = sizeof(data) - data_len; size_t size = sizeof(data) - data_len;
if (!nfc_forum_tag_type3_check(pnd, nt, 1 + b, MIN(block_max_per_check, (block_count_to_check - (b * block_max_per_check))), data + data_len, &size)) { if (!nfc_forum_tag_type3_check(pnd, &nt, 1 + b, MIN(block_max_per_check, (block_count_to_check - (b * block_max_per_check))), data + data_len, &size)) {
nfc_perror(pnd, "nfc_forum_tag_type3_check"); nfc_perror(pnd, "nfc_forum_tag_type3_check");
fclose(ndef_stream); fclose(ndef_stream);
nfc_close(pnd); nfc_close(pnd);