fix memory leak 96/147596/4 submit/tizen/20170912.013511
authorjkjo92 <jkjo92@samsung.com>
Tue, 5 Sep 2017 05:13:21 +0000 (14:13 +0900)
committerjkjo92 <jkjo92@samsung.com>
Mon, 11 Sep 2017 11:08:15 +0000 (20:08 +0900)
Change-Id: I7a408dc99ec2109df98fd99f056e06d12932b5a4
Signed-off-by: jkjo92 <jkjo92@samsung.com>
common/fido_b64_util.c [changed mode: 0644->0755]
server/fido_app_id_handler.c

old mode 100644 (file)
new mode 100755 (executable)
index cbb4141..c5fbbd4
@@ -40,6 +40,11 @@ _fido_b64url_encode(const unsigned char *input,  int inlen, unsigned char *outpu
        BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
 
        bmem = BIO_new(BIO_s_mem());
+       if (bmem == NULL) {
+               _ERR("BIO_new with BIO_s_mem failed ");
+               BIO_free(b64);
+               return -1;
+       }
        b64 = BIO_push(b64, bmem);
        BIO_write(b64, input, inlen);
        BIO_flush(b64);
@@ -113,6 +118,7 @@ _fido_b64url_decode(const unsigned char *in,  int inlen, unsigned char *out, int
                _ERR("BIO_new_mem_buf failed");
 
                SAFE_DELETE(base64);
+               BIO_free(b64);
                return -1;
        }
 
@@ -122,6 +128,7 @@ _fido_b64url_decode(const unsigned char *in,  int inlen, unsigned char *out, int
                _ERR("BIO_read failed");
 
                SAFE_DELETE(base64);
+               BIO_free_all(b64);
                return -1;
        }
 
index dc38c69..23b01fa 100755 (executable)
@@ -333,6 +333,12 @@ __b64_encode(unsigned char *input, int ip_len)
        BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
 
        bmem = BIO_new(BIO_s_mem());
+       if (bmem == NULL) {
+               _ERR("BIO_new failed \n");
+               free(output);
+               BIO_free(b64);
+               return NULL;
+       }
        b64 = BIO_push(b64, bmem);
        BIO_write(b64, input, ip_len);
        BIO_flush(b64);
@@ -341,8 +347,7 @@ __b64_encode(unsigned char *input, int ip_len)
        memcpy(output, bptr->data, bptr->length);
        output[bptr->length] = 0;
 
-       if (b64)
-               BIO_free_all(b64);
+       BIO_free_all(b64);
 
        return (char*)output;
 }
@@ -358,8 +363,17 @@ __b64_decode(const char *encoded_data, int encoded_size, unsigned char **decoded
        (*decoded_data) = (unsigned char *) calloc((*decoded_size) * 1.5, sizeof(char));
 
        BIO *bmem = BIO_new_mem_buf((void *) encoded_data, (*decoded_size));
+       if (bmem == NULL) {
+               _ERR("BIO_new failed \n");
+               return -1;
+       }
 
        BIO *bioCmd = BIO_new(BIO_f_base64());
+       if (bioCmd == NULL) {
+               _ERR("BIO_new failed \n");
+               BIO_free(bmem);
+               return -1;
+       }
 
        BIO_set_flags(bioCmd, BIO_FLAGS_BASE64_NO_NL);
 
@@ -422,6 +436,7 @@ __get_pub_key_from_cert(const char *cert_b64)
        if (ret != 1) {
                _ERR("EVP_Digest failed");
                OPENSSL_free(der_pubkey);
+               free(cert_raw);
 
                return NULL;
        }
@@ -429,6 +444,7 @@ __get_pub_key_from_cert(const char *cert_b64)
        char *pub_key =  __b64_encode(pubkey_der_digest, (int)hashed_len);
 
        OPENSSL_free(der_pubkey);
+       free(cert_raw);
 
        if (pub_key != NULL)
                _INFO("%s", pub_key);
@@ -575,6 +591,7 @@ _verify_and_get_facet_id(const char *uaf_app_id, GDBusMethodInvocation *invocati
        */
        cb_data->caller_app_id = __get_tz_facet_id_of_caller(app_id, invocation);
        if (cb_data->caller_app_id == NULL) {
+               SAFE_DELETE(app_id);
                SAFE_DELETE(cb_data);
                return FIDO_ERROR_PERMISSION_DENIED;
        }
@@ -588,6 +605,7 @@ _verify_and_get_facet_id(const char *uaf_app_id, GDBusMethodInvocation *invocati
                _DBG("UAF msg does not have appID");
                cb_data->real_app_id = __get_tz_facet_id_of_caller(app_id, invocation);
                g_timeout_add(2, __timer_expired, cb_data);
+               SAFE_DELETE(app_id);
                return FIDO_ERROR_NONE;
        }
 
@@ -597,7 +615,7 @@ _verify_and_get_facet_id(const char *uaf_app_id, GDBusMethodInvocation *invocati
 
                cb_data->real_app_id = strdup(uaf_app_id);
                g_timeout_add(2, __timer_expired, cb_data);
-
+               SAFE_DELETE(app_id);
                return FIDO_ERROR_NONE;
        }
 
@@ -606,6 +624,7 @@ _verify_and_get_facet_id(const char *uaf_app_id, GDBusMethodInvocation *invocati
 
                _INFO("soup_uri_new failed");
                _free_app_id_cb_data(cb_data);
+               SAFE_DELETE(app_id);
                return FIDO_ERROR_PERMISSION_DENIED;
        }
 
@@ -616,11 +635,13 @@ _verify_and_get_facet_id(const char *uaf_app_id, GDBusMethodInvocation *invocati
        const char *scheme = soup_uri_get_scheme(parsed_uri);
        if (scheme == NULL) {
                 _free_app_id_cb_data(cb_data);
+                SAFE_DELETE(app_id);
                 return FIDO_ERROR_INVALID_PARAMETER;
        }
 
        if (strcmp(SOUP_URI_SCHEME_HTTPS, scheme) != 0) {
                _free_app_id_cb_data(cb_data);
+               SAFE_DELETE(app_id);
                return FIDO_ERROR_INVALID_PARAMETER;
        }
 
@@ -653,5 +674,6 @@ _verify_and_get_facet_id(const char *uaf_app_id, GDBusMethodInvocation *invocati
 
        _INFO("Added in soup_session_queue_message");
 
+       SAFE_DELETE(app_id);
        return FIDO_ERROR_NONE;
 }