Fix memory leak, tainted int, uninitialized value 21/87621/1 accepted/tizen/common/20160912.180715 accepted/tizen/ivi/20160912.093241 accepted/tizen/mobile/20160912.093153 accepted/tizen/tv/20160912.093206 accepted/tizen/wearable/20160912.093225 submit/tizen/20160911.233959
authorHyunho Kang <hhstark.kang@samsung.com>
Fri, 9 Sep 2016 01:58:14 +0000 (10:58 +0900)
committerHyunho Kang <hhstark.kang@samsung.com>
Fri, 9 Sep 2016 01:59:23 +0000 (10:59 +0900)
Change-Id: Ib84ae22dce8b4d32fb2541a6b08fb6996adfa27e
Signed-off-by: Hyunho Kang <hhstark.kang@samsung.com>
src/data-control-internal.c
src/data-control-map.c
src/data-control-sql.c

index 1d7e1aa..fbecd5c 100755 (executable)
@@ -200,10 +200,21 @@ int _recv_bulk_process(int fd, data_control_bulk_result_data_h *result_data_h)
                        goto out;
                }
                LOGI("##### encode_datalen : %d", encode_datalen);
+               if (encode_datalen <= 0 || encode_datalen >= MAX_REQUEST_ARGUMENT_SIZE) {
+                       retval = DATACONTROL_ERROR_IO_ERROR;
+                       LOGE("Invalid encode_datalen %d", encode_datalen);
+                       goto out;
+               }
                encode_data = (char *)calloc(encode_datalen, sizeof(char));
+               if (encode_data == NULL) {
+                       retval = DATACONTROL_ERROR_IO_ERROR;
+                       LOGE("FAIL to alloc encode data");
+                       goto out;
+               }
                if (_read_socket(fd, encode_data, encode_datalen, &nb) != DATACONTROL_ERROR_NONE) {
                        retval = DATACONTROL_ERROR_IO_ERROR;
                        LOGE("read socket fail: encode_data");
+                       free(encode_data);
                        goto out;
                }
                result_data = bundle_decode_raw((bundle_raw *)encode_data, encode_datalen);
index 55ef37d..1552bd2 100755 (executable)
@@ -891,7 +891,7 @@ int datacontrol_map_set(datacontrol_h provider, const char *key, const char *old
 
 int datacontrol_map_add_bulk_data(datacontrol_h provider, data_control_bulk_data_h bulk_data_h, int *request_id)
 {
-       long long arg_size;
+       long long arg_size = 0;
        bundle *b;
        bundle *data;
        const char *arg_list[3];
index b4dfbad..781e5e0 100755 (executable)
@@ -325,10 +325,21 @@ static int __recv_sql_bulk_insert_process(int fd, data_control_bulk_result_data_
                        goto out;
                }
                LOGI("##### encode_datalen : %d", encode_datalen);
+               if (encode_datalen <= 0 || encode_datalen >= MAX_REQUEST_ARGUMENT_SIZE) {
+                       retval = DATACONTROL_ERROR_IO_ERROR;
+                       LOGE("Invalid encode_datalen %d", encode_datalen);
+                       goto out;
+               }
                encode_data = (char *)calloc(encode_datalen, sizeof(char));
+               if (encode_data == NULL) {
+                       retval = DATACONTROL_ERROR_IO_ERROR;
+                       LOGE("FAIL to alloc encode data");
+                       goto out;
+               }
                if (_read_socket(fd, encode_data, encode_datalen, &nb) != DATACONTROL_ERROR_NONE) {
                        retval = DATACONTROL_ERROR_IO_ERROR;
                        LOGE("read socket fail: encode_data");
+                       free(encode_data);
                        goto out;
                }
                result_data = bundle_decode_raw((bundle_raw *)encode_data, encode_datalen);