summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRavi kumar Veeramally <ravikumar.veeramally@linux.intel.com>2012-01-30 12:56:13 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2012-01-31 00:03:33 +0100
commitbac00fbc41bdb9b561e1821bfef50d9400cf86cb (patch)
tree16ab33c27f8576305dbe926e4ad048ff4aa1e009
parent2b6247e44b8e820c16ead00c538e7c97a6c55e9b (diff)
downloadneard-bac00fbc41bdb9b561e1821bfef50d9400cf86cb.tar.gz
neard-bac00fbc41bdb9b561e1821bfef50d9400cf86cb.tar.bz2
neard-bac00fbc41bdb9b561e1821bfef50d9400cf86cb.zip
ndef: Fixed potential crash in ndef record memory free
-rw-r--r--src/ndef.c55
1 files changed, 28 insertions, 27 deletions
diff --git a/src/ndef.c b/src/ndef.c
index b9df27b..898487b 100644
--- a/src/ndef.c
+++ b/src/ndef.c
@@ -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;
}