Fix memory leaks
authorJaekyun Lee <jkyun.lee@samsung.com>
Thu, 4 Apr 2013 09:04:02 +0000 (18:04 +0900)
committerJaekyun Lee <jkyun.lee@samsung.com>
Mon, 8 Apr 2013 04:48:14 +0000 (13:48 +0900)
Change-Id: I5e7915af51439e92bf5e05abcac288a6518034df

src/nfc.c

index 7e43428..02b0685 100644 (file)
--- a/src/nfc.c
+++ b/src/nfc.c
@@ -1260,16 +1260,22 @@ int nfc_ndef_message_get_record_count(nfc_ndef_message_h ndef_message , int *cou
 
 int nfc_ndef_message_get_rawdata(nfc_ndef_message_h ndef_message , unsigned char ** rawdata , int *rawdata_size)
 {
-
-       if( ndef_message == NULL || rawdata == NULL || rawdata_size == NULL)
-               return _return_invalid_param(__func__);
        int ret=0;
        data_s *rawdata_data;
-       ret = net_nfc_create_rawdata_from_ndef_message(ndef_message , (data_h*)&rawdata_data);
-       if( ret == 0 )
-       {
-               *rawdata = rawdata_data->buffer;
+
+       if (ndef_message == NULL || rawdata == NULL || rawdata_size == NULL )
+               return _return_invalid_param(__func__);
+
+       *rawdata = NULL;
+       *rawdata_size = 0;
+
+       ret = net_nfc_create_rawdata_from_ndef_message(ndef_message, (data_h *)&rawdata_data);
+       if (ret == 0) {
+               *rawdata = calloc(1, rawdata_data->length);
+               memcpy(*rawdata, rawdata_data->buffer, rawdata_data->length);
                *rawdata_size = rawdata_data->length;
+
+               net_nfc_free_data((data_h)rawdata_data);
        }
        return _convert_error_code(__func__, ret);
 }