diff options
author | Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com> | 2012-01-30 12:56:13 +0200 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2012-01-31 00:03:33 +0100 |
commit | bac00fbc41bdb9b561e1821bfef50d9400cf86cb (patch) | |
tree | 16ab33c27f8576305dbe926e4ad048ff4aa1e009 | |
parent | 2b6247e44b8e820c16ead00c538e7c97a6c55e9b (diff) | |
download | neard-bac00fbc41bdb9b561e1821bfef50d9400cf86cb.tar.gz neard-bac00fbc41bdb9b561e1821bfef50d9400cf86cb.tar.bz2 neard-bac00fbc41bdb9b561e1821bfef50d9400cf86cb.zip |
ndef: Fixed potential crash in ndef record memory free
-rw-r--r-- | src/ndef.c | 55 |
1 files changed, 28 insertions, 27 deletions
@@ -457,42 +457,43 @@ static void free_ndef_record(struct near_ndef_record *record) g_free(record->path); - switch (record->header->rec_type) { - case RECORD_TYPE_WKT_SIZE: - case RECORD_TYPE_WKT_TYPE: - case RECORD_TYPE_WKT_ACTION: - case RECORD_TYPE_WKT_HANDOVER_REQUEST: - case RECORD_TYPE_WKT_HANDOVER_SELECT: - case RECORD_TYPE_WKT_HANDOVER_CARRIER: - case RECORD_TYPE_WKT_ALTERNATIVE_CARRIER: - case RECORD_TYPE_WKT_COLLISION_RESOLUTION: - case RECORD_TYPE_WKT_ERROR: - case RECORD_TYPE_UNKNOWN: - case RECORD_TYPE_ERROR: - break; + if (record->header != NULL) { - case RECORD_TYPE_WKT_TEXT: - free_text_record(record->text); - break; + switch (record->header->rec_type) { + case RECORD_TYPE_WKT_SIZE: + case RECORD_TYPE_WKT_TYPE: + case RECORD_TYPE_WKT_ACTION: + case RECORD_TYPE_WKT_HANDOVER_REQUEST: + case RECORD_TYPE_WKT_HANDOVER_SELECT: + case RECORD_TYPE_WKT_HANDOVER_CARRIER: + case RECORD_TYPE_WKT_ALTERNATIVE_CARRIER: + case RECORD_TYPE_WKT_COLLISION_RESOLUTION: + case RECORD_TYPE_WKT_ERROR: + case RECORD_TYPE_UNKNOWN: + case RECORD_TYPE_ERROR: + break; - case RECORD_TYPE_WKT_URI: - free_uri_record(record->uri); - break; + case RECORD_TYPE_WKT_TEXT: + free_text_record(record->text); + break; - case RECORD_TYPE_WKT_SMART_POSTER: - free_sp_record(record->sp); - break; + case RECORD_TYPE_WKT_URI: + free_uri_record(record->uri); + break; - case RECORD_TYPE_MIME_TYPE: - free_mime_record(record->mime); - } + case RECORD_TYPE_WKT_SMART_POSTER: + free_sp_record(record->sp); + break; + + case RECORD_TYPE_MIME_TYPE: + free_mime_record(record->mime); + } - if (record->header != NULL) { g_free(record->header->il_field); g_free(record->header->type_name); - g_free(record->header); } + g_free(record->header); g_free(record); record = NULL; } |