Fix NULL dereferencing
authorLokesh <l.kasana@samsung.com>
Thu, 31 Oct 2019 09:29:40 +0000 (14:59 +0530)
committersaerome.kim <saerome.kim@samsung.com>
Fri, 1 Nov 2019 01:24:50 +0000 (10:24 +0900)
Check null dereferencing while reading payload variables from device database.

Change-Id: Icd52bf9ebe27c6380b3974635f9dce524f94c837
Signed-off-by: Lokesh <l.kasana@samsung.com>
packaging/ua-manager.spec
ua-daemon/src/ua-manager-device-db.c

index f8da4a0..3394cb3 100644 (file)
@@ -1,6 +1,6 @@
 Name:       ua-manager
 Summary:    User awareness manager
-Version:    0.12.6
+Version:    0.12.7
 Release:    1
 License:    Apache-2.0
 Source0:    %{name}-%{version}.tar.gz
index d24c6c0..02e8752 100644 (file)
@@ -533,6 +533,7 @@ int _uam_device_db_get_device(char *device_id, int tech_type, char *address,
        int error_code = UAM_ERROR_NONE;
        sqlite3_stmt *stmt = select_device;
        int sql_ret = SQLITE_OK;
+       char *buf = NULL;
 
        retv_if(NULL == info, UAM_ERROR_INVALID_PARAMETER);
 
@@ -566,12 +567,15 @@ int _uam_device_db_get_device(char *device_id, int tech_type, char *address,
                info->user_id = sqlite3_column_int(stmt, 7);
                info->dev_info.discriminant = sqlite3_column_int(stmt, 8);
                memset(info->dev_info.payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
-               info->dev_info.payload.service_id = *(char *)sqlite3_column_text(stmt, 9);
-               info->dev_info.payload.purpose = *(char *)sqlite3_column_text(stmt, 10);
+               buf = (char *)sqlite3_column_text(stmt, 9);
+               info->dev_info.payload.service_id = buf ? *buf : 0;
+               buf = (char *)sqlite3_column_text(stmt, 10);
+               info->dev_info.payload.purpose = buf ? *buf : 0;
                if ((char*)sqlite3_column_text(stmt, 11))
                        memcpy(info->dev_info.payload.duid, (char *)sqlite3_column_text(stmt, 11),
                                UAM_BLE_PAYLOAD_DUID_LEN);
-               info->dev_info.payload.device_icon = *(char *)sqlite3_column_text(stmt, 12);
+               buf = (char *)sqlite3_column_text(stmt, 12);
+               info->dev_info.payload.device_icon = buf ? *buf : 0;
 
                UAM_INFO("%s-%d-%s-%s-%llu-%d-%d-%d-%d-0x%2.2X",
                        info->dev_info.device_id,
@@ -643,6 +647,7 @@ GSList *_uam_device_db_get_all_devices(void)
        GSList *device_list = NULL;
        db_device_info_t *info = NULL;
        int sql_ret = SQLITE_OK;
+       char *buf = NULL;
 
        do {
                sql_ret = sqlite3_step(stmt);
@@ -665,12 +670,15 @@ GSList *_uam_device_db_get_all_devices(void)
                        info->user_id = sqlite3_column_int(stmt, 7);
                        info->dev_info.discriminant = sqlite3_column_int(stmt, 8);
                        memset(info->dev_info.payload.duid, 0, UAM_BLE_PAYLOAD_DUID_LEN + 1);
-                       info->dev_info.payload.service_id = *(char *)sqlite3_column_text(stmt, 9);
-                       info->dev_info.payload.purpose = *(char *)sqlite3_column_text(stmt, 10);
+                       buf = (char *)sqlite3_column_text(stmt, 9);
+                       info->dev_info.payload.service_id = buf ? *buf : 0;
+                       buf = (char *)sqlite3_column_text(stmt, 10);
+                       info->dev_info.payload.purpose = buf ? *buf : 0;
                        if ((char*)sqlite3_column_text(stmt, 11))
                                memcpy(info->dev_info.payload.duid, (char *)sqlite3_column_text(stmt, 11),
                                        UAM_BLE_PAYLOAD_DUID_LEN);
-                       info->dev_info.payload.device_icon = *(char *)sqlite3_column_text(stmt, 12);
+                       buf = (char *)sqlite3_column_text(stmt, 12);
+                       info->dev_info.payload.device_icon = buf ? *buf : 0;
 
                        UAM_INFO("%s-%d-%s-%s-%llu-%d-%d-%d-%d-0x%2.2X",
                                info->dev_info.device_id,