Flawfinder version 2.0.10, (C) 2001-2019 David A. Wheeler.
Number of rules (primarily dangerous function names) in C/C++ ruleset: 223
Examining data/libgaminggear-0.15.1/cmake_modules/test_notify_0_7.c
Examining data/libgaminggear-0.15.1/gaminggearfxcontrol/gaminggearfxcontrol.c
Examining data/libgaminggear-0.15.1/gaminggearfxinfo/gaminggearfxinfo.c
Examining data/libgaminggear-0.15.1/include/gaminggear/audio_notificator.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_device.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_fx_plugin.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_hid_combo_box.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_hscale.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_macro_dialog.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_macro_editor_dialog.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_profile_data.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_profile_page.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_profile_table.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_text_dialog.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_timeout_bar.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_timeout_dialog.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gaminggear_xy_scales.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gdk_key_translations.h
Examining data/libgaminggear-0.15.1/include/gaminggear/gfx.h
Examining data/libgaminggear-0.15.1/include/gaminggear/hid_uid.h
Examining data/libgaminggear-0.15.1/include/gaminggear/input_events.h
Examining data/libgaminggear-0.15.1/include/gaminggear/key_translations.h
Examining data/libgaminggear-0.15.1/include/gaminggear/macro.h
Examining data/libgaminggear-0.15.1/include/gaminggear/macro_threads.h
Examining data/libgaminggear-0.15.1/include/gaminggear/profiles.h
Examining data/libgaminggear-0.15.1/include/gaminggear/screen_notificator.h
Examining data/libgaminggear-0.15.1/include/gaminggear/threads.h
Examining data/libgaminggear-0.15.1/include/i18n-lib.h
Examining data/libgaminggear-0.15.1/include/i18n.h
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_audio_notificator_canberra.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_configuration.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_configuration.h
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_device.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_helper.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_helper.h
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uhid.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uinput.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_key_file.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_key_file.h
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_key_translations.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_macro.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_macro_keystrokes.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_macro_thread.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_macro_thread.h
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_macro_threads.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_macros.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_macros.h
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_macros_converter.h
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_profile_data.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_profiles.c
Examining data/libgaminggear-0.15.1/libgaminggear/gaminggear_screen_notificator_notify.c
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat.c
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat.h
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_arvo.c
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_arvo.h
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_helper.h
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_kone.c
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_kone.h
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_swarm.c
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_swarm.h
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_valo.c
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_valo.h
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_steelseries_engine3.c
Examining data/libgaminggear-0.15.1/libgaminggear/macros_converter_steelseries_engine3.h
Examining data/libgaminggear-0.15.1/libgaminggearfx/gaminggear_fx.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_about_dialog.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_about_dialog.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_dialogs.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_dialogs.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_dscale.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_dscale.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_gdk_key_translations.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_hid_combo_box.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_hscale.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_combo_box.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_combo_box.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_dialog.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_advanced.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_advanced.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_advanced_list_store.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_advanced_list_store.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_advanced_table.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_advanced_table.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_basic.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_basic.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_basic_list_store.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_basic_list_store.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_basic_tree_view.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_basic_tree_view.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_dialog.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_dialog_internal.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_dialog_menu_bar.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_dialog_menu_bar.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_interface.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_interface.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_key_sequence_frame.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_key_sequence_frame.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_macro_options_frame.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_macro_options_frame.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_macros_frame.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_macros_frame.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_record_options_frame.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_record_options_frame.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_tree_store.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_tree_store.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_tree_view.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_tree_view.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_profile_list_store.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_profile_list_store.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_profile_page.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_profile_table.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_ruler.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_ruler.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_text_dialog.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_timeout_bar.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_timeout_dialog.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_xy_scales.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggearwidget.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggearwidget_helper.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gaminggearwidget_helper.h
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gtk_gaminggear_helper.c
Examining data/libgaminggear-0.15.1/libgaminggearwidget/gtk_gaminggear_helper.h

FINAL RESULTS:

data/libgaminggear-0.15.1/libgaminggear/gaminggear_configuration.c:61:94:  [3] (buffer) g_get_home_dir:
  This function is synonymous with 'getenv("HOME")';it returns untrustable
  input if the environment can beset by an attacker. It can have any content
  and length, and the same variable can be set more than once (CWE-807,
  CWE-20). Check environment variables carefully before using them.
	return gaminggear_key_file_get_string_with_default(config, group_name, timer_save_path_key, g_get_home_dir());
data/libgaminggear-0.15.1/libgaminggear/gaminggear_configuration.c:69:94:  [3] (buffer) g_get_home_dir:
  This function is synonymous with 'getenv("HOME")';it returns untrustable
  input if the environment can beset by an attacker. It can have any content
  and length, and the same variable can be set more than once (CWE-807,
  CWE-20). Check environment variables carefully before using them.
	return gaminggear_key_file_get_string_with_default(config, group_name, macro_save_path_key, g_get_home_dir());
data/libgaminggear-0.15.1/gaminggearfxcontrol/gaminggearfxcontrol.c:108:2:  [2] (buffer) char:
  Statically-sized arrays can be improperly restricted, leading to potential
  overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use
  functions that limit length, or ensure that the size is larger than the
  maximum possible length.
	char description[description_size];
data/libgaminggear-0.15.1/gaminggearfxinfo/gaminggearfxinfo.c:44:2:  [2] (buffer) char:
  Statically-sized arrays can be improperly restricted, leading to potential
  overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use
  functions that limit length, or ensure that the size is larger than the
  maximum possible length.
	char description[description_size];
data/libgaminggear-0.15.1/libgaminggear/gaminggear_device.c:64:7:  [2] (misc) open:
  Check when opening files - can an attacker redirect it (via symlinks),
  force the opening of special file type (e.g., device files), move things
  around to create a race condition, control its ancestors, or change its
  contents? (CWE-362).
	fd = open(path, flags, 0);
data/libgaminggear-0.15.1/libgaminggear/gaminggear_helper.c:28:2:  [2] (buffer) char:
  Statically-sized arrays can be improperly restricted, leading to potential
  overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use
  functions that limit length, or ensure that the size is larger than the
  maximum possible length.
	char hex[3] = { 0, 0, 0 };
data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uhid.c:215:6:  [2] (buffer) sprintf:
  Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or
  vsnprintf. Risk is low because the source has a constant maximum length.
	n = sprintf(buffer, "%02x", data[0]);
data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uhid.c:217:8:  [2] (buffer) sprintf:
  Does not check for buffer overflows (CWE-120). Use sprintf_s, snprintf, or
  vsnprintf. Risk is low because the source has a constant maximum length.
		n += sprintf(buffer + n, " %02x", data[i]);
data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uhid.c:248:2:  [2] (buffer) memcpy:
  Does not check for buffer overflows when copying to destination (CWE-120).
  Make sure destination can always hold the source data.
	memcpy(event.u.input2.data, device->event, MIN(UHID_DATA_MAX, device->event_size));
data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uhid.c:252:2:  [2] (buffer) memcpy:
  Does not check for buffer overflows when copying to destination (CWE-120).
  Make sure destination can always hold the source data.
	memcpy(event.u.input.data, device->event, MIN(UHID_DATA_MAX, device->event_size));
data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uhid.c:266:15:  [2] (misc) open:
  Check when opening files - can an attacker redirect it (via symlinks),
  force the opening of special file type (e.g., device files), move things
  around to create a race condition, control its ancestors, or change its
  contents? (CWE-362).
	device->fd = open(UHID_DIR "/uhid", O_RDWR | O_CLOEXEC);
data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uhid.c:280:2:  [2] (buffer) memcpy:
  Does not check for buffer overflows when copying to destination (CWE-120).
  Make sure destination can always hold the source data.
	memcpy(event.u.create2.rd_data, device->report_descriptor, MIN(HID_MAX_DESCRIPTOR_SIZE, device->report_descriptor_size));
data/libgaminggear-0.15.1/libgaminggear/gaminggear_input_events_uinput.c:40:11:  [2] (misc) open:
  Check when opening files - can an attacker redirect it (via symlinks),
  force the opening of special file type (e.g., device files), move things
  around to create a race condition, control its ancestors, or change its
  contents? (CWE-362).
	uinput = open(UINPUT_DIR "/uinput", O_WRONLY | O_NONBLOCK);
data/libgaminggear-0.15.1/libgaminggear/gaminggear_macro_keystrokes.c:107:2:  [2] (buffer) memcpy:
  Does not check for buffer overflows when copying to destination (CWE-120).
  Make sure destination can always hold the source data.
	memcpy(to, from, sizeof(GaminggearMacroKeystrokes));
data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_swarm.c:178:7:  [2] (misc) open:
  Check when opening files - can an attacker redirect it (via symlinks),
  force the opening of special file type (e.g., device files), move things
  around to create a race condition, control its ancestors, or change its
  contents? (CWE-362).
	fd = open(filename, O_WRONLY | O_CREAT, 0666);
data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_swarm.c:248:7:  [2] (misc) open:
  Check when opening files - can an attacker redirect it (via symlinks),
  force the opening of special file type (e.g., device files), move things
  around to create a race condition, control its ancestors, or change its
  contents? (CWE-362).
	fd = open(filename, O_RDONLY);
data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_macro_editor_basic_list_store.c:327:10:  [2] (integer) atoi:
  Unless checked, the resulting number can exceed the expected range
  (CWE-190). If source untrusted, check both minimum and maximum, even if the
  input had no minus sign (large numbers can roll over into negative number;
  consider saving to an unsigned value if that is intended).
	value = atoi(text);
data/libgaminggear-0.15.1/include/gaminggear/gaminggear_profile_data.h:68:13:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
	gboolean (*read)(GaminggearProfileData *self, GaminggearDevice *device, GError **error);
data/libgaminggear-0.15.1/include/gaminggear/gaminggear_profile_data.h:74:13:  [1] (buffer) equal:
  Function does not check the second iterator for over-read conditions
  (CWE-126). This function is often discouraged by most C++ coding standards
  in favor of its safer alternatives provided since C++14. Consider using a
  form of this function that checks the second iterator before potentially
  overflowing it.
	gboolean (*equal)(GaminggearProfileData *self, GaminggearProfileData *other);
data/libgaminggear-0.15.1/libgaminggear/gaminggear_helper.c:36:6:  [1] (buffer) strlen:
  Does not handle strings that are not \0-terminated; if given one it may
  perform an over-read (it could cause a crash if unprotected) (CWE-126).
	if (strlen(string) != size * 2) {
data/libgaminggear-0.15.1/libgaminggear/gaminggear_helper.c:37:145:  [1] (buffer) strlen:
  Does not handle strings that are not \0-terminated; if given one it may
  perform an over-read (it could cause a crash if unprotected) (CWE-126).
		g_set_error(error, G_KEY_FILE_ERROR, G_KEY_FILE_ERROR_INVALID_VALUE, _("Binary data has wrong length: %1$lu bytes instead of %2$lu"), (gulong)strlen(string), (gulong)(size * 2));
data/libgaminggear-0.15.1/libgaminggear/gaminggear_profile_data.c:139:50:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
	return GAMINGGEAR_PROFILE_DATA_GET_CLASS(self)->read(self, device, error);
data/libgaminggear-0.15.1/libgaminggear/gaminggear_profile_data.c:172:50:  [1] (buffer) equal:
  Function does not check the second iterator for over-read conditions
  (CWE-126). This function is often discouraged by most C++ coding standards
  in favor of its safer alternatives provided since C++14. Consider using a
  form of this function that checks the second iterator before potentially
  overflowing it.
	return GAMINGGEAR_PROFILE_DATA_GET_CLASS(self)->equal(self, other);
data/libgaminggear-0.15.1/libgaminggear/macros_converter_roccat_swarm.c:70:11:  [1] (buffer) read:
  Check buffer boundaries if used in a loop including recursive loops
  (CWE-120, CWE-20).
	result = read(fd, buffer, nbytes);
data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_profile_page.c:140:11:  [1] (buffer) equal:
  Function does not check the second iterator for over-read conditions
  (CWE-126). This function is often discouraged by most C++ coding standards
  in favor of its safer alternatives provided since C++14. Consider using a
  form of this function that checks the second iterator before potentially
  overflowing it.
	gboolean equal;
data/libgaminggear-0.15.1/libgaminggearwidget/gaminggear_profile_page.c:154:6:  [1] (buffer) equal:
  Function does not check the second iterator for over-read conditions
  (CWE-126). This function is often discouraged by most C++ coding standards
  in favor of its safer alternatives provided since C++14. Consider using a
  form of this function that checks the second iterator before potentially
  overflowing it.
	if (equal)
data/libgaminggear-0.15.1/libgaminggearwidget/gaminggearwidget_helper.c:112:14:  [1] (buffer) strlen:
  Does not handle strings that are not \0-terminated; if given one it may
  perform an over-read (it could cause a crash if unprotected) (CWE-126).
	byte_size = strlen(key);

ANALYSIS SUMMARY:

Hits = 27
Lines analyzed = 18429 in approximately 0.49 seconds (37802 lines/second)
Physical Source Lines of Code (SLOC) = 11618
Hits@level = [0]   3 [1]  10 [2]  15 [3]   2 [4]   0 [5]   0
Hits@level+ = [0+]  30 [1+]  27 [2+]  17 [3+]   2 [4+]   0 [5+]   0
Hits/KSLOC@level+ = [0+] 2.5822 [1+] 2.32398 [2+] 1.46325 [3+] 0.172147 [4+]   0 [5+]   0
Dot directories skipped = 1 (--followdotdir overrides)
Minimum risk level = 1
Not every hit is necessarily a security vulnerability.
There may be other security vulnerabilities; review your code!
See 'Secure Programming HOWTO'
(https://dwheeler.com/secure-programs) for more information.