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/qbrew-0.4.1/src/misc.h Examining data/qbrew-0.4.1/src/style.h Examining data/qbrew-0.4.1/src/recipe.cpp Examining data/qbrew-0.4.1/src/notepage.h Examining data/qbrew-0.4.1/src/miscmodel.h Examining data/qbrew-0.4.1/src/quantity.h Examining data/qbrew-0.4.1/src/qbrew.h Examining data/qbrew-0.4.1/src/hydrometertool.h Examining data/qbrew-0.4.1/src/configure.h Examining data/qbrew-0.4.1/src/hop.cpp Examining data/qbrew-0.4.1/src/ingredientview.h Examining data/qbrew-0.4.1/src/miscdelegate.h Examining data/qbrew-0.4.1/src/misc.cpp Examining data/qbrew-0.4.1/src/textprinter.h Examining data/qbrew-0.4.1/src/styledelegate.h Examining data/qbrew-0.4.1/src/grain.cpp Examining data/qbrew-0.4.1/src/datareader.h Examining data/qbrew-0.4.1/src/helpviewer.cpp Examining data/qbrew-0.4.1/src/hopmodel.h Examining data/qbrew-0.4.1/src/data.h Examining data/qbrew-0.4.1/src/configure.cpp Examining data/qbrew-0.4.1/src/export.cpp Examining data/qbrew-0.4.1/src/ingredientview.cpp Examining data/qbrew-0.4.1/src/beerxmlreader.h Examining data/qbrew-0.4.1/src/stylemodel.h Examining data/qbrew-0.4.1/src/recipereader.cpp Examining data/qbrew-0.4.1/src/styledelegate.cpp Examining data/qbrew-0.4.1/src/hop.h Examining data/qbrew-0.4.1/src/grain.h Examining data/qbrew-0.4.1/src/databasetool.h Examining data/qbrew-0.4.1/src/data.cpp Examining data/qbrew-0.4.1/src/view.h Examining data/qbrew-0.4.1/src/helpviewer.h Examining data/qbrew-0.4.1/src/alcoholtool.h Examining data/qbrew-0.4.1/src/hopdelegate.h Examining data/qbrew-0.4.1/src/recipereader.h Examining data/qbrew-0.4.1/src/style.cpp Examining data/qbrew-0.4.1/src/graindelegate.h Examining data/qbrew-0.4.1/src/notepage.cpp Examining data/qbrew-0.4.1/src/recipe.h Examining data/qbrew-0.4.1/src/quantity.cpp Examining data/qbrew-0.4.1/src/alcoholtool.cpp Examining data/qbrew-0.4.1/src/hydrometertool.cpp Examining data/qbrew-0.4.1/src/hopdelegate.cpp Examining data/qbrew-0.4.1/src/grainmodel.h Examining data/qbrew-0.4.1/src/miscdelegate.cpp Examining data/qbrew-0.4.1/src/textprinter.cpp Examining data/qbrew-0.4.1/src/graindelegate.cpp Examining data/qbrew-0.4.1/src/datareader.cpp Examining data/qbrew-0.4.1/src/configstate.h Examining data/qbrew-0.4.1/src/databasetool.cpp Examining data/qbrew-0.4.1/src/grainmodel.cpp Examining data/qbrew-0.4.1/src/hopmodel.cpp Examining data/qbrew-0.4.1/src/main.cpp Examining data/qbrew-0.4.1/src/miscmodel.cpp Examining data/qbrew-0.4.1/src/qbrew.cpp Examining data/qbrew-0.4.1/src/resource.h Examining data/qbrew-0.4.1/src/stylemodel.cpp Examining data/qbrew-0.4.1/src/view.cpp Examining data/qbrew-0.4.1/src/beerxmlreader.cpp FINAL RESULTS: data/qbrew-0.4.1/src/helpviewer.cpp:105:26: [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. switch (QLocale::system().country()) { data/qbrew-0.4.1/src/main.cpp:141:45: [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. if (translator.load("qbrew_" + QLocale::system().name(), transdir)) { data/qbrew-0.4.1/src/main.cpp:147:44: [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. if (qttranslator.load("qt_" + QLocale::system().name(), qttransdir)) { data/qbrew-0.4.1/src/textprinter.cpp:49:22: [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. switch (QLocale::system().country()) { data/qbrew-0.4.1/src/view.cpp:284:31: [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. QLocale locale = QLocale::system(); data/qbrew-0.4.1/src/data.cpp:192:19: [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 (!datafile.open(QFile::ReadOnly | QFile::Text)) { data/qbrew-0.4.1/src/data.cpp:234:19: [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 (!datafile.open(QFile::WriteOnly | QFile::Text)) { data/qbrew-0.4.1/src/export.cpp:63: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). if (!datafile.open(QFile::WriteOnly | QFile::Text)) { data/qbrew-0.4.1/src/export.cpp:261: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). if (!datafile.open(QFile::WriteOnly | QFile::Text)) { data/qbrew-0.4.1/src/export.cpp:375:19: [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 (!datafile.open(QFile::WriteOnly | QFile::Text)) { data/qbrew-0.4.1/src/export.cpp:408:19: [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 (!datafile.open(QFile::ReadOnly | QFile::Text)) { data/qbrew-0.4.1/src/recipe.cpp:124:19: [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 (!datafile.open(QFile::ReadOnly | QFile::Text)) { data/qbrew-0.4.1/src/recipe.cpp:142:19: [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 (!datafile.open(QFile::ReadOnly | QFile::Text)) { data/qbrew-0.4.1/src/recipe.cpp:161:19: [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 (!datafile.open(QFile::ReadOnly | QFile::Text)) { data/qbrew-0.4.1/src/recipe.cpp:217:19: [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 (!datafile.open(QFile::WriteOnly | QFile::Text)) { data/qbrew-0.4.1/src/hydrometertool.cpp:101:12: [1] (buffer) read: Check buffer boundaries if used in a loop including recursive loops (CWE-120, CWE-20). corr = read / corr; ANALYSIS SUMMARY: Hits = 16 Lines analyzed = 12667 in approximately 0.29 seconds (43913 lines/second) Physical Source Lines of Code (SLOC) = 7500 Hits@level = [0] 0 [1] 1 [2] 10 [3] 0 [4] 5 [5] 0 Hits@level+ = [0+] 16 [1+] 16 [2+] 15 [3+] 5 [4+] 5 [5+] 0 Hits/KSLOC@level+ = [0+] 2.13333 [1+] 2.13333 [2+] 2 [3+] 0.666667 [4+] 0.666667 [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.