Fix misused strncpy calls 32/139432/5
authorSemun Lee <semun.lee@samsung.com>
Wed, 19 Jul 2017 02:57:36 +0000 (11:57 +0900)
committerSemun Lee <semun.lee@samsung.com>
Wed, 19 Jul 2017 05:42:23 +0000 (14:42 +0900)
Change-Id: I40cb57043b9fda017274347beea4090fd29bbc20
Signed-off-by: Semun Lee <semun.lee@samsung.com>
alarm-manager.c
src/alarm-lib.c

index 7a26034..99036b5 100644 (file)
@@ -161,7 +161,7 @@ static void __initialize();
 void _release_alarm_info_t();
 void on_bus_name_owner_changed(GDBusConnection *connection, const gchar *sender_name, const gchar *object_path,
                const gchar *interface_name, const gchar *signal_name, GVariant *parameters, gpointer user_data);
-bool __get_caller_unique_name(int pid, char *unique_name, bool *is_app, uid_t uid);
+bool __get_caller_unique_name(int pid, char *unique_name, int size, bool *is_app, uid_t uid);
 static int __db_busyhandler(void *pData, int count);
 
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
@@ -236,7 +236,7 @@ static profile_t _get_profile()
        return saved;
 }
 
-static bool __get_cached_unique_name(int pid, char *unique_name, bool *is_app, uid_t uid)
+static bool __get_cached_unique_name(int pid, char *unique_name, int size, bool *is_app, uid_t uid)
 {
        appid_cache_t *data = NULL;
        data = (appid_cache_t *)g_hash_table_lookup(appid_cache_table, &pid);
@@ -249,7 +249,7 @@ static bool __get_cached_unique_name(int pid, char *unique_name, bool *is_app, u
        }
 
        ALARM_MGR_LOG_PRINT("There is no cached unique_name for pid(%d)", pid);
-       return __get_caller_unique_name(pid, unique_name, is_app, uid);
+       return __get_caller_unique_name(pid, unique_name, size, is_app, uid);
 }
 
 gboolean __hash_table_remove_cb(gpointer key, gpointer value, gpointer user_data)
@@ -428,13 +428,13 @@ int __set_time(time_t _time)
                if (ret == -1) {
                        ALARM_MGR_EXCEPTION_PRINT("ALARM_SET_RTC ioctl is failed. errno = %s", strerror_r(errno, buf, sizeof(buf)));
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-                       strncpy(log_tag, "FAIL: SET RTC", strlen("FAIL: SET RTC"));
+                       strncpy(log_tag, "FAIL: SET RTC", sizeof(log_tag) - 1);
 #endif
                        perror("\t");
                }
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
                else
-                       strncpy(log_tag, "SET RTC", strlen("SET RTC"));
+                       strncpy(log_tag, "SET RTC", sizeof(log_tag) - 1);
 
                char *timebuf = ctime(&_time);
                if (timebuf) {
@@ -887,7 +887,7 @@ static bool __alarm_create_appsvc(alarm_info_t *alarm_info, alarm_id_t *alarm_id
        __alarm_info->requested_interval = requested_interval;
        __alarm_info->global = false;
 
-       if (__get_cached_unique_name(pid, app_name, &caller_is_app, uid) == false) {
+       if (__get_cached_unique_name(pid, app_name, sizeof(app_name), &caller_is_app, uid) == false) {
                *error_code = ERR_ALARM_SYSTEM_FAIL;
                _release_alarm_info_t(__alarm_info);
                return false;
@@ -1014,7 +1014,8 @@ static bool __alarm_create(alarm_info_t *alarm_info, alarm_id_t *alarm_id, uid_t
        __alarm_info->is_ref = is_ref;
        __alarm_info->global = false;
 
-       if (__get_cached_unique_name(pid, unique_name, &caller_is_app, uid) == false) {
+       if (__get_cached_unique_name(pid, unique_name, sizeof(unique_name),
+                       &caller_is_app, uid) == false) {
                *error_code = ERR_ALARM_SYSTEM_FAIL;
                _release_alarm_info_t(__alarm_info);
                return false;
@@ -1130,7 +1131,7 @@ static bool __alarm_create_noti(alarm_info_t *alarm_info, alarm_id_t *alarm_id,
        __alarm_info->requested_interval = requested_interval;
        __alarm_info->global = false;
 
-       if (__get_cached_unique_name(pid, app_name, &caller_is_app, uid) == false) {
+       if (__get_cached_unique_name(pid, app_name, sizeof(app_name), &caller_is_app, uid) == false) {
                *error_code = ERR_ALARM_SYSTEM_FAIL;
                _release_alarm_info_t(__alarm_info);
                return false;
@@ -1466,7 +1467,7 @@ static void __alarm_send_noti_to_application(const char *app_service_name,
        if (__can_skip_expired_cb(alarm_id))
                return;
 
-       memcpy(service_name, app_service_name, strlen(app_service_name));
+       strncpy(service_name, app_service_name, sizeof(service_name) - 1);
        SECURE_LOGI("[alarm server][send expired_alarm(alarm_id=%d) to app_service_name(%s)]", alarm_id, service_name);
 
        if (uid >= REGULAR_UID_MIN) {
@@ -1834,10 +1835,10 @@ static void __alarm_expired()
 
                        if (__alarm_info->dst_service_name == NULL) {
                                if (__alarm_info->app_service_name != NULL && strlen(__alarm_info->app_service_name) > 6)
-                                       strncpy(appid, __alarm_info->app_service_name + 6, strlen(__alarm_info->app_service_name) - 6);
+                                       strncpy(appid, __alarm_info->app_service_name + 6, sizeof(appid) - 1);
                        } else {
                                if (strlen(__alarm_info->dst_service_name) > 6)
-                                       strncpy(appid,  __alarm_info->dst_service_name + 6, strlen(__alarm_info->dst_service_name) - 6);
+                                       strncpy(appid,  __alarm_info->dst_service_name + 6, sizeof(appid) - 1);
                        }
 
                        ret = pkgmgrinfo_appinfo_get_usr_appinfo(appid, __alarm_info->uid, &appinfo_handle);
@@ -2147,7 +2148,7 @@ static int __on_app_uninstalled(uid_t target_uid, int req_id, const char *pkg_ty
        return ALARMMGR_RESULT_SUCCESS;
 }
 
-bool __get_caller_unique_name(int pid, char *unique_name, bool *is_app, uid_t uid)
+bool __get_caller_unique_name(int pid, char *unique_name, int size, bool *is_app, uid_t uid)
 {
        char caller_appid[256] = {0,};
        appid_cache_t* entry;
@@ -2162,7 +2163,7 @@ bool __get_caller_unique_name(int pid, char *unique_name, bool *is_app, uid_t ui
                /* When a caller is an application, the unique name is appID. */
                if (is_app)
                        *is_app = true;
-               strncpy(unique_name, caller_appid, strlen(caller_appid));
+               strncpy(unique_name, caller_appid, size - 1);
        } else {
                /* Otherwise, the unique name is /proc/pid/cmdline. */
                char proc_file[512] = {0,};
@@ -2195,7 +2196,7 @@ bool __get_caller_unique_name(int pid, char *unique_name, bool *is_app, uid_t ui
                                }
                                ++i;
                        }
-                       strncpy(unique_name, process_name, strlen(process_name));
+                       strncpy(unique_name, process_name, size - 1);
                }
        }
 
@@ -2505,12 +2506,12 @@ if (_APPFW_FEATURE_WAKEUP_USING_RTC) {
                ALARM_MGR_EXCEPTION_PRINT("RTC ALARM_SET ioctl is failed. errno = %s", strerror_r(errno, buf, sizeof(buf)));
                return_code = ERR_ALARM_SYSTEM_FAIL;
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "FAIL: SET RTC", strlen("FAIL: SET RTC"));
+               strncpy(log_tag, "FAIL: SET RTC", sizeof(log_tag) - 1);
 #endif
        } else {
                ALARM_MGR_LOG_PRINT("[alarm-server]RTC alarm is setted");
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "SET RTC", strlen("SET RTC"));
+               strncpy(log_tag, "SET RTC", sizeof(log_tag) - 1);
 #endif
        }
 
@@ -2672,9 +2673,9 @@ done:
        g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", return_code));
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
        if (return_code == ALARMMGR_RESULT_SUCCESS)
-               strncpy(log_tag, "SET TIMEZONE", strlen("SET TIMEZONE"));
+               strncpy(log_tag, "SET TIMEZONE", sizeof(log_tag) - 1);
        else
-               strncpy(log_tag, "FAIL: SET TIMEZONE", strlen("FAIL: SET TIMEZONE"));
+               strncpy(log_tag, "FAIL: SET TIMEZONE", sizeof(log_tag) - 1);
 
        snprintf(log_message, sizeof(log_message), "Set the timezone to %s.", tzpath_str);
        __save_module_log(log_tag, log_message);
@@ -2743,12 +2744,12 @@ gboolean alarm_manager_alarm_create_appsvc(AlarmManager *pObject, GDBusMethodInv
        if (!__alarm_create_appsvc(&alarm_info, &alarm_id, mode_interval, uid, pid, bundle_data, &return_code)) {
                ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code);
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "FAIL: CREATE", strlen("FAIL: CREATE"));
+               strncpy(log_tag, "FAIL: CREATE", sizeof(log_tag) - 1);
 #endif
                ret = false;
        } else {
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "CREATE", strlen("CREATE"));
+               strncpy(log_tag, "CREATE", sizeof(log_tag) - 1);
 #endif
        }
 
@@ -2823,12 +2824,12 @@ gboolean alarm_manager_alarm_create_noti(AlarmManager *pObject, GDBusMethodInvoc
        if (!__alarm_create_noti(&alarm_info, &alarm_id, mode_interval, uid, pid, noti_data, &return_code)) {
                ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code);
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "FAIL: CREATE", strlen("FAIL: CREATE"));
+               strncpy(log_tag, "FAIL: CREATE", sizeof(log_tag) - 1);
 #endif
                ret = false;
        } else {
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "CREATE", strlen("CREATE"));
+               strncpy(log_tag, "CREATE", sizeof(log_tag) - 1);
 #endif
        }
 
@@ -2904,12 +2905,12 @@ gboolean alarm_manager_alarm_create(AlarmManager *obj, GDBusMethodInvocation *in
                                _reserved_service_name, _reserved_service_name_mod, &return_code)) {
                ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code);
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "FAIL: CREATE", strlen("FAIL: CREATE"));
+               strncpy(log_tag, "FAIL: CREATE", sizeof(log_tag) - 1);
 #endif
                ret = false;
        } else {
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "CREATE", strlen("CREATE"));
+               strncpy(log_tag, "CREATE", sizeof(log_tag) - 1);
 #endif
        }
 
@@ -2996,12 +2997,12 @@ gboolean alarm_manager_alarm_create_periodic(AlarmManager *obj, GDBusMethodInvoc
                                NULL, NULL, &return_code)) {
                ALARM_MGR_EXCEPTION_PRINT("Unable to create alarm! return_code[%d]", return_code);
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "FAIL: CREATE", strlen("FAIL: CREATE"));
+               strncpy(log_tag, "FAIL: CREATE", sizeof(log_tag) - 1);
 #endif
                ret = false;
        } else {
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "CREATE", strlen("CREATE"));
+               strncpy(log_tag, "CREATE", sizeof(log_tag) - 1);
 #endif
                ret = true;
        }
@@ -3043,13 +3044,13 @@ gboolean alarm_manager_alarm_delete(AlarmManager *obj, GDBusMethodInvocation *in
        if (!__alarm_delete(uid, alarm_id, &return_code)) {
                ALARM_MGR_EXCEPTION_PRINT("Unable to delete the alarm! alarm_id[%d], return_code[%d]", alarm_id, return_code);
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "FAIL: DELETE", strlen("FAIL: DELETE"));
+               strncpy(log_tag, "FAIL: DELETE", sizeof(log_tag) - 1);
 #endif
                ret = false;
        } else {
                ALARM_MGR_LOG_PRINT("alarm_id[%d] is removed.", alarm_id);
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "DELETE", strlen("DELETE"));
+               strncpy(log_tag, "DELETE", sizeof(log_tag) - 1);
 #endif
        }
 
@@ -3087,7 +3088,7 @@ gboolean alarm_manager_alarm_delete_all(AlarmManager *obj, GDBusMethodInvocation
                return true;
        }
 
-       if (__get_cached_unique_name(pid, app_name, NULL, uid) == false) {
+       if (__get_cached_unique_name(pid, app_name, sizeof(app_name), NULL, uid) == false) {
                return_code = ERR_ALARM_SYSTEM_FAIL;
                g_dbus_method_invocation_return_value(invoc, g_variant_new("(i)", return_code));
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
@@ -3193,12 +3194,12 @@ gboolean alarm_manager_alarm_update(AlarmManager *pObj, GDBusMethodInvocation *i
                                update_flag, &return_code)) {
                ALARM_MGR_EXCEPTION_PRINT("Unable to update the alarm! alarm_id[%d], return_code[%d]", alarm_id, return_code);
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "FAIL: UPDATE", strlen("FAIL: UPDATE"));
+               strncpy(log_tag, "FAIL: UPDATE", sizeof(log_tag) - 1);
 #endif
                ret = false;
        } else {
 #ifdef _APPFW_FEATURE_ALARM_MANAGER_MODULE_LOG
-               strncpy(log_tag, "UPDATE", strlen("UPDATE"));
+               strncpy(log_tag, "UPDATE", sizeof(log_tag) - 1);
 #endif
        }
 
@@ -3233,7 +3234,7 @@ gboolean alarm_manager_alarm_get_number_of_ids(AlarmManager *pObject, GDBusMetho
                return true;
        }
 
-       if (__get_cached_unique_name(pid, app_name, NULL, uid) == false) {
+       if (__get_cached_unique_name(pid, app_name, sizeof(app_name), NULL, uid) == false) {
                return_code = ERR_ALARM_SYSTEM_FAIL;
                g_dbus_method_invocation_return_value(invoc, g_variant_new("(ii)", num_of_ids, return_code));
                return true;
@@ -3285,7 +3286,7 @@ gboolean alarm_manager_alarm_get_list_of_ids(AlarmManager *pObject, GDBusMethodI
                return true;
        }
 
-       if (__get_cached_unique_name(pid, app_name, NULL, uid) == false) {
+       if (__get_cached_unique_name(pid, app_name, sizeof(app_name), NULL, uid) == false) {
                return_code = ERR_ALARM_SYSTEM_FAIL;
                g_dbus_method_invocation_return_value(invoc, g_variant_new("(@aiii)", g_variant_new("ai", NULL), num_of_ids, return_code));
                return true;
index efdc107..970d455 100644 (file)
@@ -521,8 +521,8 @@ EXPORT_API int alarmmgr_init(const char *appid)
        memset(service_name_mod, 'a', MAX_SERVICE_NAME_LEN - 1);
 
        len = strlen("ALARM.");
-       strncpy(service_name, "ALARM.", len);
-       strncpy(service_name + len, appid, strlen(appid));
+       strncpy(service_name, "ALARM.", sizeof(service_name) - 1);
+       strncpy(service_name + len, appid, sizeof(service_name) - len - 1);
 
        for (i = 0; i <= strlen(service_name); i++) {
                if (service_name[i] == '.') {