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/gqrx-sdr-2.14/src/applications/gqrx/file_resources.cpp Examining data/gqrx-sdr-2.14/src/applications/gqrx/gqrx.h Examining data/gqrx-sdr-2.14/src/applications/gqrx/main.cpp Examining data/gqrx-sdr-2.14/src/applications/gqrx/mainwindow.cpp Examining data/gqrx-sdr-2.14/src/applications/gqrx/mainwindow.h Examining data/gqrx-sdr-2.14/src/applications/gqrx/receiver.cpp Examining data/gqrx-sdr-2.14/src/applications/gqrx/receiver.h Examining data/gqrx-sdr-2.14/src/applications/gqrx/recentconfig.cpp Examining data/gqrx-sdr-2.14/src/applications/gqrx/recentconfig.h Examining data/gqrx-sdr-2.14/src/applications/gqrx/remote_control.cpp Examining data/gqrx-sdr-2.14/src/applications/gqrx/remote_control.h Examining data/gqrx-sdr-2.14/src/applications/gqrx/remote_control_settings.cpp Examining data/gqrx-sdr-2.14/src/applications/gqrx/remote_control_settings.h Examining data/gqrx-sdr-2.14/src/dsp/afsk1200/cafsk12.cpp Examining data/gqrx-sdr-2.14/src/dsp/afsk1200/cafsk12.h Examining data/gqrx-sdr-2.14/src/dsp/afsk1200/costabf.c Examining data/gqrx-sdr-2.14/src/dsp/afsk1200/filter.h Examining data/gqrx-sdr-2.14/src/dsp/agc_impl.cpp Examining data/gqrx-sdr-2.14/src/dsp/agc_impl.h Examining data/gqrx-sdr-2.14/src/dsp/correct_iq_cc.cpp Examining data/gqrx-sdr-2.14/src/dsp/correct_iq_cc.h Examining data/gqrx-sdr-2.14/src/dsp/downconverter.cpp Examining data/gqrx-sdr-2.14/src/dsp/downconverter.h Examining data/gqrx-sdr-2.14/src/dsp/filter/fir_decim.cpp Examining data/gqrx-sdr-2.14/src/dsp/filter/fir_decim.h Examining data/gqrx-sdr-2.14/src/dsp/filter/fir_decim_coef.h Examining data/gqrx-sdr-2.14/src/dsp/fm_deemph.cpp Examining data/gqrx-sdr-2.14/src/dsp/fm_deemph.h Examining data/gqrx-sdr-2.14/src/dsp/lpf.cpp Examining data/gqrx-sdr-2.14/src/dsp/lpf.h Examining data/gqrx-sdr-2.14/src/dsp/rds/api.h Examining data/gqrx-sdr-2.14/src/dsp/rds/constants.h Examining data/gqrx-sdr-2.14/src/dsp/rds/decoder.h Examining data/gqrx-sdr-2.14/src/dsp/rds/decoder_impl.cc Examining data/gqrx-sdr-2.14/src/dsp/rds/decoder_impl.h Examining data/gqrx-sdr-2.14/src/dsp/rds/parser.h Examining data/gqrx-sdr-2.14/src/dsp/rds/parser_impl.cc Examining data/gqrx-sdr-2.14/src/dsp/rds/parser_impl.h Examining data/gqrx-sdr-2.14/src/dsp/rds/tmc_events.h Examining data/gqrx-sdr-2.14/src/dsp/resampler_xx.cpp Examining data/gqrx-sdr-2.14/src/dsp/resampler_xx.h Examining data/gqrx-sdr-2.14/src/dsp/rx_agc_xx.cpp Examining data/gqrx-sdr-2.14/src/dsp/rx_agc_xx.h Examining data/gqrx-sdr-2.14/src/dsp/rx_demod_am.cpp Examining data/gqrx-sdr-2.14/src/dsp/rx_demod_am.h Examining data/gqrx-sdr-2.14/src/dsp/rx_demod_fm.cpp Examining data/gqrx-sdr-2.14/src/dsp/rx_demod_fm.h Examining data/gqrx-sdr-2.14/src/dsp/rx_fft.cpp Examining data/gqrx-sdr-2.14/src/dsp/rx_fft.h Examining data/gqrx-sdr-2.14/src/dsp/rx_filter.cpp Examining data/gqrx-sdr-2.14/src/dsp/rx_filter.h Examining data/gqrx-sdr-2.14/src/dsp/rx_meter.cpp Examining data/gqrx-sdr-2.14/src/dsp/rx_meter.h Examining data/gqrx-sdr-2.14/src/dsp/rx_noise_blanker_cc.cpp Examining data/gqrx-sdr-2.14/src/dsp/rx_noise_blanker_cc.h Examining data/gqrx-sdr-2.14/src/dsp/rx_rds.cpp Examining data/gqrx-sdr-2.14/src/dsp/rx_rds.h Examining data/gqrx-sdr-2.14/src/dsp/sniffer_f.cpp Examining data/gqrx-sdr-2.14/src/dsp/sniffer_f.h Examining data/gqrx-sdr-2.14/src/dsp/stereo_demod.cpp Examining data/gqrx-sdr-2.14/src/dsp/stereo_demod.h Examining data/gqrx-sdr-2.14/src/interfaces/udp_sink_f.cpp Examining data/gqrx-sdr-2.14/src/interfaces/udp_sink_f.h Examining data/gqrx-sdr-2.14/src/osxaudio/device_list.cpp Examining data/gqrx-sdr-2.14/src/osxaudio/device_list.h Examining data/gqrx-sdr-2.14/src/portaudio/device_list.cpp Examining data/gqrx-sdr-2.14/src/portaudio/device_list.h Examining data/gqrx-sdr-2.14/src/portaudio/portaudio_sink.cpp Examining data/gqrx-sdr-2.14/src/portaudio/portaudio_sink.h Examining data/gqrx-sdr-2.14/src/pulseaudio/pa_device_list.cc Examining data/gqrx-sdr-2.14/src/pulseaudio/pa_device_list.h Examining data/gqrx-sdr-2.14/src/pulseaudio/pa_sink.cc Examining data/gqrx-sdr-2.14/src/pulseaudio/pa_sink.h Examining data/gqrx-sdr-2.14/src/pulseaudio/pa_source.cc Examining data/gqrx-sdr-2.14/src/pulseaudio/pa_source.h Examining data/gqrx-sdr-2.14/src/qtgui/afsk1200win.cpp Examining data/gqrx-sdr-2.14/src/qtgui/afsk1200win.h Examining data/gqrx-sdr-2.14/src/qtgui/agc_options.cpp Examining data/gqrx-sdr-2.14/src/qtgui/agc_options.h Examining data/gqrx-sdr-2.14/src/qtgui/audio_options.cpp Examining data/gqrx-sdr-2.14/src/qtgui/audio_options.h Examining data/gqrx-sdr-2.14/src/qtgui/bandplan.cpp Examining data/gqrx-sdr-2.14/src/qtgui/bandplan.h Examining data/gqrx-sdr-2.14/src/qtgui/bookmarks.cpp Examining data/gqrx-sdr-2.14/src/qtgui/bookmarks.h Examining data/gqrx-sdr-2.14/src/qtgui/bookmarkstablemodel.cpp Examining data/gqrx-sdr-2.14/src/qtgui/bookmarkstablemodel.h Examining data/gqrx-sdr-2.14/src/qtgui/bookmarkstaglist.cpp Examining data/gqrx-sdr-2.14/src/qtgui/bookmarkstaglist.h Examining data/gqrx-sdr-2.14/src/qtgui/ctk/ctkPimpl.h Examining data/gqrx-sdr-2.14/src/qtgui/ctk/ctkRangeSlider.cpp Examining data/gqrx-sdr-2.14/src/qtgui/ctk/ctkRangeSlider.h Examining data/gqrx-sdr-2.14/src/qtgui/demod_options.cpp Examining data/gqrx-sdr-2.14/src/qtgui/demod_options.h Examining data/gqrx-sdr-2.14/src/qtgui/dockaudio.cpp Examining data/gqrx-sdr-2.14/src/qtgui/dockaudio.h Examining data/gqrx-sdr-2.14/src/qtgui/dockbookmarks.cpp Examining data/gqrx-sdr-2.14/src/qtgui/dockbookmarks.h Examining data/gqrx-sdr-2.14/src/qtgui/dockfft.cpp Examining data/gqrx-sdr-2.14/src/qtgui/dockfft.h Examining data/gqrx-sdr-2.14/src/qtgui/dockinputctl.cpp Examining data/gqrx-sdr-2.14/src/qtgui/dockinputctl.h Examining data/gqrx-sdr-2.14/src/qtgui/dockrds.cpp Examining data/gqrx-sdr-2.14/src/qtgui/dockrds.h Examining data/gqrx-sdr-2.14/src/qtgui/dockrxopt.cpp Examining data/gqrx-sdr-2.14/src/qtgui/dockrxopt.h Examining data/gqrx-sdr-2.14/src/qtgui/dxc_options.cpp Examining data/gqrx-sdr-2.14/src/qtgui/dxc_options.h Examining data/gqrx-sdr-2.14/src/qtgui/dxc_spots.cpp Examining data/gqrx-sdr-2.14/src/qtgui/dxc_spots.h Examining data/gqrx-sdr-2.14/src/qtgui/freqctrl.cpp Examining data/gqrx-sdr-2.14/src/qtgui/freqctrl.h Examining data/gqrx-sdr-2.14/src/qtgui/ioconfig.cpp Examining data/gqrx-sdr-2.14/src/qtgui/ioconfig.h Examining data/gqrx-sdr-2.14/src/qtgui/iq_tool.cpp Examining data/gqrx-sdr-2.14/src/qtgui/iq_tool.h Examining data/gqrx-sdr-2.14/src/qtgui/meter.cpp Examining data/gqrx-sdr-2.14/src/qtgui/meter.h Examining data/gqrx-sdr-2.14/src/qtgui/nb_options.cpp Examining data/gqrx-sdr-2.14/src/qtgui/nb_options.h Examining data/gqrx-sdr-2.14/src/qtgui/plotter.cpp Examining data/gqrx-sdr-2.14/src/qtgui/plotter.h Examining data/gqrx-sdr-2.14/src/qtgui/qtcolorpicker.cpp Examining data/gqrx-sdr-2.14/src/qtgui/qtcolorpicker.h Examining data/gqrx-sdr-2.14/src/receivers/nbrx.cpp Examining data/gqrx-sdr-2.14/src/receivers/nbrx.h Examining data/gqrx-sdr-2.14/src/receivers/receiver_base.cpp Examining data/gqrx-sdr-2.14/src/receivers/receiver_base.h Examining data/gqrx-sdr-2.14/src/receivers/wfmrx.cpp Examining data/gqrx-sdr-2.14/src/receivers/wfmrx.h FINAL RESULTS: data/gqrx-sdr-2.14/src/dsp/afsk1200/cafsk12.cpp:205:9: [4] (format) vfprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. vfprintf(stdout, fmt, args); data/gqrx-sdr-2.14/src/pulseaudio/pa_sink.cc:73:9: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error)); data/gqrx-sdr-2.14/src/pulseaudio/pa_sink.cc:118:9: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error)); data/gqrx-sdr-2.14/src/pulseaudio/pa_sink.cc:162:9: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. fprintf(stderr, __FILE__": pa_simple_write() failed: %s\n", pa_strerror(error)); data/gqrx-sdr-2.14/src/pulseaudio/pa_source.cc:87:9: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error)); data/gqrx-sdr-2.14/src/pulseaudio/pa_source.cc:121:9: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", pa_strerror(error)); data/gqrx-sdr-2.14/src/pulseaudio/pa_source.cc:140:9: [4] (format) fprintf: If format strings can be influenced by an attacker, they can be exploited (CWE-134). Use a constant for the format specification. fprintf(stderr, __FILE__": pa_simple_read() failed: %s\n", pa_strerror(error)); data/gqrx-sdr-2.14/src/applications/gqrx/file_resources.cpp:41:23: [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). temp_file.open(); data/gqrx-sdr-2.14/src/applications/gqrx/mainwindow.cpp:2254: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). if (!news.open(QIODevice::ReadOnly | QIODevice::Text)) data/gqrx-sdr-2.14/src/applications/gqrx/recentconfig.cpp:92: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). if (!file.open(QFile::ReadOnly)) data/gqrx-sdr-2.14/src/applications/gqrx/recentconfig.cpp:127: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). if (!file.open(QFile::WriteOnly)) data/gqrx-sdr-2.14/src/applications/gqrx/remote_control.cpp:198: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 buffer[1024] = {0}; data/gqrx-sdr-2.14/src/dsp/afsk1200/cafsk12.h:51:22: [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. unsigned char rxbuf[512]; data/gqrx-sdr-2.14/src/dsp/afsk1200/cafsk12.h:66:26: [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. unsigned char buffer[128]; data/gqrx-sdr-2.14/src/dsp/rds/decoder_impl.cc:86:11: [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. unsigned char bytes[12]; data/gqrx-sdr-2.14/src/dsp/rds/decoder_impl.h:49:11: [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. unsigned char offset_chars[4]; // [ABCcDEx] (x=error) data/gqrx-sdr-2.14/src/dsp/rds/parser_impl.cc:90: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 flagstring[8] = "0000000"; data/gqrx-sdr-2.14/src/dsp/rds/parser_impl.cc:498:9: [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. static char ps_on[8] = {' ',' ',' ',' ',' ',' ',' ',' '}; data/gqrx-sdr-2.14/src/dsp/rds/parser_impl.h:62: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 radiotext[65]; data/gqrx-sdr-2.14/src/dsp/rds/parser_impl.h:63: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 program_service_name[9]; data/gqrx-sdr-2.14/src/dsp/rx_fft.cpp:126:5: [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(fftPoints, d_fft->get_outbuf(), sizeof(gr_complex)*d_fftsize); data/gqrx-sdr-2.14/src/dsp/rx_fft.cpp:148:9: [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(d_fft->get_inbuf(), d_cbuf.linearize(), sizeof(gr_complex)*size); data/gqrx-sdr-2.14/src/dsp/rx_fft.cpp:324:5: [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(fftPoints, d_fft->get_outbuf(), sizeof(gr_complex)*d_fftsize); data/gqrx-sdr-2.14/src/dsp/sniffer_f.cpp:119:5: [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(out, buff, sizeof(float)*num); data/gqrx-sdr-2.14/src/qtgui/afsk1200win.cpp:122: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). if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { data/gqrx-sdr-2.14/src/qtgui/bandplan.cpp:67: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). if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return false; data/gqrx-sdr-2.14/src/qtgui/bookmarks.cpp:77:14: [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). if (file.open(QIODevice::ReadOnly | QIODevice::Text)) data/gqrx-sdr-2.14/src/qtgui/bookmarks.cpp:154:13: [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). if(file.open(QFile::WriteOnly | QFile::Truncate | QIODevice::Text)) data/gqrx-sdr-2.14/src/qtgui/iq_tool.cpp:178:16: [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). if (!file->open(QIODevice::ReadOnly)) data/gqrx-sdr-2.14/src/qtgui/plotter.cpp:1758:10: [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. unsigned char turbo[256][3] = { data/gqrx-sdr-2.14/src/qtgui/plotter.cpp:1814:10: [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. unsigned char plasma[256][3] = { data/gqrx-sdr-2.14/src/qtgui/iq_tool.cpp:201:29: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). qint64 read = file->read(readbuf, chunk_size); data/gqrx-sdr-2.14/src/qtgui/iq_tool.cpp:205:29: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). for (int j = 0; j < read/bytes_per_sample; j++) data/gqrx-sdr-2.14/src/qtgui/iq_tool.cpp:212:16: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). avg /= read/bytes_per_sample; ANALYSIS SUMMARY: Hits = 34 Lines analyzed = 35833 in approximately 0.92 seconds (38804 lines/second) Physical Source Lines of Code (SLOC) = 25215 Hits@level = [0] 8 [1] 3 [2] 24 [3] 0 [4] 7 [5] 0 Hits@level+ = [0+] 42 [1+] 34 [2+] 31 [3+] 7 [4+] 7 [5+] 0 Hits/KSLOC@level+ = [0+] 1.66568 [1+] 1.3484 [2+] 1.22943 [3+] 0.277613 [4+] 0.277613 [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.