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/librime-1.5.3+git20200621+dfsg1/plugins/plugin.cc Examining data/librime-1.5.3+git20200621+dfsg1/sample/src/sample_module.cc Examining data/librime-1.5.3+git20200621+dfsg1/sample/src/trivial_translator.cc Examining data/librime-1.5.3+git20200621+dfsg1/sample/src/trivial_translator.h Examining data/librime-1.5.3+git20200621+dfsg1/sample/test/sample_test_main.cc Examining data/librime-1.5.3+git20200621+dfsg1/sample/test/trivial_translator_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/sample/tools/sample_console.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/algebra.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/algebra.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/calculus.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/calculus.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/dynamics.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/encoder.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/encoder.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/spelling.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/syllabifier.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/syllabifier.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/utilities.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/utilities.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/candidate.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/candidate.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/commit_history.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/commit_history.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/common.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/component.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/composition.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/composition.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/auto_patch_config_plugin.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/build_info_plugin.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_compiler.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_compiler.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_compiler_impl.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_component.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_component.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_cow_ref.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_data.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_data.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_types.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/config_types.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/default_config_plugin.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/legacy_dictionary_config_plugin.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/legacy_preset_config_plugin.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/plugins.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/config/save_output_plugin.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/context.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/context.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/core_module.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/deployer.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/deployer.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/corrector.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/corrector.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/db.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/db.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/db_utils.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/db_utils.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/dict_compiler.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/dict_compiler.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/dict_module.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/dict_settings.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/dict_settings.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/dictionary.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/dictionary.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/entry_collector.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/entry_collector.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/level_db.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/level_db.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/mapped_file.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/mapped_file.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/preset_vocabulary.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/preset_vocabulary.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/prism.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/prism.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/reverse_lookup_dictionary.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/reverse_lookup_dictionary.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/string_table.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/string_table.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/table.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/table.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/table_db.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/table_db.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/text_db.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/text_db.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/tsv.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/tsv.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/user_db.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/user_db.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/user_db_recovery_task.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/user_db_recovery_task.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/user_dictionary.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/user_dictionary.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/vocabulary.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/vocabulary.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/engine.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/engine.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/filter.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/formatter.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/abc_segmentor.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/abc_segmentor.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/affix_segmentor.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/affix_segmentor.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/ascii_composer.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/ascii_composer.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/ascii_segmentor.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/ascii_segmentor.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/charset_filter.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/charset_filter.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/chord_composer.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/chord_composer.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/contextual_translation.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/contextual_translation.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/echo_translator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/echo_translator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/editor.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/editor.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/fallback_segmentor.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/fallback_segmentor.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/filter_commons.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/filter_commons.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/gears_module.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/grammar.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/history_translator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/history_translator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/key_binder.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/key_binder.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/key_binding_processor.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/key_binding_processor_impl.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/matcher.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/matcher.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/memory.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/memory.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/navigator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/navigator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/poet.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/poet.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/punctuator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/punctuator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/recognizer.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/recognizer.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/reverse_lookup_filter.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/reverse_lookup_filter.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/reverse_lookup_translator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/reverse_lookup_translator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/schema_list_translator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/schema_list_translator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/script_translator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/script_translator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/selector.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/selector.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/shape.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/shape.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/simplifier.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/simplifier.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/single_char_filter.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/single_char_filter.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/speller.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/speller.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/switch_translator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/switch_translator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/table_translator.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/table_translator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/translator_commons.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/translator_commons.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/uniquifier.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/uniquifier.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/unity_table_encoder.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/unity_table_encoder.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/key_event.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/key_event.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/key_table.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/key_table.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/language.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/language.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/custom_settings.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/custom_settings.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/customizer.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/customizer.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/levers_module.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/switcher_settings.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/switcher_settings.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/user_dict_manager.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/user_dict_manager.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/menu.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/menu.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/messenger.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/module.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/module.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/no_logging.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/processor.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/registry.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/registry.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/resource.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/resource.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/schema.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/schema.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/segmentation.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/segmentation.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/segmentor.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/service.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/service.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/setup.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/setup.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/signature.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/signature.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/switcher.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/switcher.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/ticket.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/ticket.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/translation.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/translation.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime/translator.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc Examining data/librime-1.5.3+git20200621+dfsg1/src/rime_api.h Examining data/librime-1.5.3+git20200621+dfsg1/src/rime_levers_api.h Examining data/librime-1.5.3+git20200621+dfsg1/test/algebra_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/calculus_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/component_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/config_compiler_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/config_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/corrector_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/dictionary_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/encoder_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/key_event_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/key_table_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/menu_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/prism_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/resource_resolver_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/rime_test_main.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/segmentor_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/syllabifier_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/table_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/test/user_db_test.cc Examining data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/X11/keysym.h Examining data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/X11/keysymdef.h Examining data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/darts.h Examining data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/msvc/stdint.h Examining data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/utf8.h Examining data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/utf8/checked.h Examining data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/utf8/core.h Examining data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/utf8/unchecked.h Examining data/librime-1.5.3+git20200621+dfsg1/tools/rime_api_console.cc Examining data/librime-1.5.3+git20200621+dfsg1/tools/rime_console.cc Examining data/librime-1.5.3+git20200621+dfsg1/tools/rime_deployer.cc Examining data/librime-1.5.3+git20200621+dfsg1/tools/rime_dict_manager.cc Examining data/librime-1.5.3+git20200621+dfsg1/tools/rime_patch.cc FINAL RESULTS: data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/user_db_recovery_task.cc:45:12: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc:85:12: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc:262:12: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc:311:12: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc:487:16: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc:573:12: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc:612:14: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/user_dict_manager.cc:174:12: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/user_dict_manager.cc:193:12: [4] (shell) system: This causes a new program to execute and is difficult to use safely (CWE-78). try using a library call that implements the same functionality if available. boost::system::error_code ec; data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:231:8: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(dest->text, src->text().c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:235:10: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(dest->comment, comment.c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:257:10: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(context->composition.preedit, preedit.text.c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:265:14: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(context->commit_text_preview, commit_text.c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:294:16: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(context->menu.select_keys, select_keys.c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:304:18: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(context->select_labels[i], label.c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:346:10: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(commit->text, commit_text.c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:373:8: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(status->schema_id, schema->schema_id().c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:375:8: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). std::strcpy(status->schema_name, schema->schema_name().c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:509:5: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(x.schema_id, schema_id.c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:512:5: [4] (buffer) strcpy: Does not check for buffer overflows when copying to destination [MS-banned] (CWE-120). Consider using snprintf, strcpy_s, or strlcpy (warning: strncpy easily misused). strcpy(x.name, schema.schema_name().c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/simplifier.cc:130:5: [3] (random) srand: This function is not sufficiently random for security-related functions such as key and nonce creation (CWE-327). Use a more secure technique for acquiring random values. srand((unsigned)time(NULL)); data/librime-1.5.3+git20200621+dfsg1/sample/tools/sample_console.cc:104:5: [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 current[100] = {0}; data/librime-1.5.3+git20200621+dfsg1/sample/tools/sample_console.cc:153:3: [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 line[kMaxLength + 1] = {0}; data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/calculus.cc:77:3: [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 buffer[buffer_len] = ""; data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/utilities.cc:22:14: [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). int dx = atoi(xx[i].c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime/algo/utilities.cc:23:14: [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). int dy = atoi(yy[i].c_str()); data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/mapped_file.cc:95:10: [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). fbuf.open(file_name_.c_str(), data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/prism.cc:190:8: [2] (buffer) memcpy: Does not check for buffer overflows when copying to destination (CWE-120). Make sure destination can always hold the source data. std::memcpy(array, trie_->array(), image_size); data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/prism.h:36:3: [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 format[kFormatMaxLength]; data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/prism.h:45:3: [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 alphabet[256]; data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/reverse_lookup_dictionary.h:24:3: [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 format[kFormatMaxLength]; data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/table.h:86:3: [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 format[kFormatMaxLength]; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc:630:3: [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 ymd[12] = {0}; data/librime-1.5.3+git20200621+dfsg1/src/rime/lever/deployment_tasks.cc:640:3: [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 tmp[MAX_PATH]; data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/darts.h:242: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). int open(const char *file_name, const char *mode = "rb", data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/darts.h:327:34: [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). int DoubleArrayImpl<A, B, T, C>::open(const char *file_name, data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/darts.h:335:26: [2] (misc) fopen: 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). std::FILE *file = std::fopen(file_name, mode); data/librime-1.5.3+git20200621+dfsg1/thirdparty/include/darts.h:391:26: [2] (misc) fopen: 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). std::FILE *file = std::fopen(file_name, mode); data/librime-1.5.3+git20200621+dfsg1/tools/rime_api_console.cc:107:5: [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 current[100] = {0}; data/librime-1.5.3+git20200621+dfsg1/tools/rime_api_console.cc:125:17: [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). int index = atoi(line + command_length); data/librime-1.5.3+git20200621+dfsg1/tools/rime_api_console.cc:195:3: [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 line[kMaxLength + 1] = {0}; data/librime-1.5.3+git20200621+dfsg1/sample/tools/sample_console.cc:26:16: [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). size_t len = strlen(preedit); data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/mapped_file.cc:190:8: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). std::strncpy(ptr, src.c_str(), size); data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/mapped_file.h:62:44: [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). size_t length() const { return c_str() ? strlen(c_str()) : 0; } data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/prism.cc:232:8: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). std::strncpy(metadata->format, kPrismFormat, data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/reverse_lookup_dictionary.cc:186:8: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). std::strncpy(metadata_->format, kReverseFormat, data/librime-1.5.3+git20200621+dfsg1/src/rime/dict/table.cc:414:8: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). std::strncpy(metadata_->format, kTableFormatLatest, data/librime-1.5.3+git20200621+dfsg1/src/rime/gear/unity_table_encoder.cc:94:17: [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). key->erase(0, strlen(kEncodedPrefix)); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:486:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(value, str_value.c_str(), buffer_size); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:542:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(schema_id, schema->schema_id().c_str(), buffer_size); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:618:10: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). std::strncpy(value, str_value.c_str(), buffer_size); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.cc:797:3: [1] (buffer) strncpy: Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). strncpy(dir, deployer.user_data_sync_dir().c_str(), buffer_size); data/librime-1.5.3+git20200621+dfsg1/src/rime_api.h:554:28: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). #pragma section(".CRT$XCU",read) data/librime-1.5.3+git20200621+dfsg1/tools/rime_api_console.cc:27:16: [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). size_t len = strlen(preedit); data/librime-1.5.3+git20200621+dfsg1/tools/rime_api_console.cc:114:27: [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). size_t command_length = strlen(kSelectSchemaCommand); data/librime-1.5.3+git20200621+dfsg1/tools/rime_api_console.cc:123:20: [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). command_length = strlen(kSelectCandidateCommand); data/librime-1.5.3+git20200621+dfsg1/tools/rime_api_console.cc:150:20: [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). command_length = strlen(kSetOptionCommand); ANALYSIS SUMMARY: Hits = 57 Lines analyzed = 39294 in approximately 0.91 seconds (43059 lines/second) Physical Source Lines of Code (SLOC) = 32199 Hits@level = [0] 50 [1] 16 [2] 20 [3] 1 [4] 20 [5] 0 Hits@level+ = [0+] 107 [1+] 57 [2+] 41 [3+] 21 [4+] 20 [5+] 0 Hits/KSLOC@level+ = [0+] 3.32308 [1+] 1.77024 [2+] 1.27333 [3+] 0.652194 [4+] 0.621137 [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.