Provided by: flawfinder_1.27-3_all bug

NAME

       flawfinder - find potential security flaws ("hits") in source code

SYNOPSIS

       flawfinder  [--help]  [--version]  [--allowlink]  [--inputs|-I]  [  --minlevel  X | -m X ]
       [--falsepositive|-F]  [--neverignore|-n]  [--patch filename|-P filename]  [--followdotdir]
       [--context|-c]  [--columns|-C] [--dataonly|-D] [--html] [--immediate|-i] [--singleline|-S]
       [--omittime] [--quiet|-Q] [ --loadhitlist F ] [ --savehitlist F ] [ --diffhitlist F ] [--]
       [ source code file or source root directory ]+

DESCRIPTION

       Flawfinder  searches  through  C/C++ source code looking for potential security flaws.  To
       run flawfinder, simply give flawfinder a list of directories or files.  For each directory
       given,  all  files  that  have  C/C++  filename  extensions  in  that  directory  (and its
       subdirectories, recursively) will be examined.   Thus,  for  most  projects,  simply  give
       flawfinder  the  name  of  the  source code's topmost directory (use ``.'' for the current
       directory), and flawfinder will examine all of the project's C/C++ source  code.   If  you
       only want to have changes reviewed, save a unified diff of those changes (created by "diff
       -u" or "svn diff") in a patch file and use the --patch (-P) option.

       Flawfinder will produce a list of ``hits'' (potential security flaws), sorted by risk; the
       riskiest  hits are shown first.  The risk level is shown inside square brackets and varies
       from 0, very little risk, to 5, great risk.  This risk  level  depends  not  only  on  the
       function,  but  on  the  values  of the parameters of the function.  For example, constant
       strings are often less risky than fully variable strings in many contexts,  and  in  those
       contexts  the  hit will have a lower risk level.  Flawfinder knows about gettext (a common
       library for internationalized programs) and will treat  constant  strings  passed  through
       gettext  as  though  they  were constant strings; this reduces the number of false hits in
       internationalized programs.  Flawfinder will do the same  sort  of  thing  with  _T()  and
       _TEXT(),  common  Microsoft  macros  for  handling  internationalized  programs Flawfinder
       correctly ignores most text inside comments and strings.  Normally  flawfinder  shows  all
       hits  with  a risk level of at least 1, but you can use the --minlevel option to show only
       hits with higher risk levels if you wish.

       Not every hit is actually a security vulnerability, and not every  security  vulnerability
       is  necessarily  found.   Nevertheless,  flawfinder  can be an aid in finding and removing
       security vulnerabilities.  A common way to use flawfinder is to first apply flawfinder  to
       a  set  of  source code and examine the highest-risk items.  Then, use --inputs to examine
       the input locations, and check to make sure that only legal  and  safe  input  values  are
       accepted from untrusted users.

       Once  you've  audited a program, you can mark source code lines that are actually fine but
       cause spurious warnings so that flawfinder will stop complaining about them.   To  mark  a
       line  so  that  these warnings are suppressed, put a specially-formatted comment either on
       the same line (after the source code) or all by itself in the previous line.  The  comment
       must have one of the two following formats:

       •
               // Flawfinder: ignore

       •
               /* Flawfinder: ignore */

       Note that, for compatibility's sake, you can replace "Flawfinder:" with "ITS4:" or "RATS:"
       in these specially-formatted comments.  Since it's possible that such lines are wrong, you
       can  use the ``--neverignore'' option, which causes flawfinder to never ignore any line no
       matter what the comments say.  Thus, responses that would otherwise be  ignored  would  be
       included  (or,  more confusingly, --neverignore ignores the ignores).  This comment syntax
       is actually a more general syntax for special directives to flawfinder, but currently only
       ignoring lines is supported.

       Flawfinder  uses  an  internal  database  called  the  ``ruleset''; the ruleset identifies
       functions that are common causes of security flaws.  The standard ruleset includes a large
       number  of different potential problems, including both general issues that can impact any
       C/C++ program, as well as a number of specific Unix-like and Windows  functions  that  are
       especially  problematic.   As  noted above, every potential security flaw found in a given
       source code file (matching an entry in the ruleset) is called a ``hit,'' and  the  set  of
       hits  found  during any particular run of the program is called the ``hitlist.''  Hitlists
       can be saved (using --savehitlist), reloaded back for redisplay (using --loadhitlist), and
       you can show only the hits that are different from another run (using --diffhitlist).

       Any  filename  given on the command line will be examined (even if it doesn't have a usual
       C/C++ filename extension); thus you can force flawfinder to examine any specific files you
       desire.   While  searching  directories  recursively,  flawfinder  only opens and examines
       regular files that have C/C++ filename extensions.  Flawfinder presumes  that,  files  are
       C/C++  files  if they have the extensions ".c", ".h", ".ec", ".ecp", ".pgc", ".C", ".cpp",
       ".CPP", ".cxx", ".cc", ".CC", ".pcc", ".hpp", or  ".H".   The  filename  ``-''  means  the
       standard input.  To prevent security problems, special files (such as device special files
       and named pipes) are always skipped, and by default symbolic links are skipped,

       After the list of hits is  a  brief  summary  of  the  results  (use  -D  to  remove  this
       information).  It will show the number of hits, lines analyzed (as reported by wc -l), and
       the physical source lines of code (SLOC) analyzed.  A physical SLOC is a  non-blank,  non-
       comment  line.   It  will then show the number of hits at each level; note that there will
       never be a hit at a level lower than minlevel (1 by default).  Thus,  "[0]    0  [1]    9"
       means  that  at  level  0  there  were  0  hits reported, and at level 1 there were 9 hits
       reported.  It will next show the number of hits at a given level or larger  (so  level  3+
       has  the  sum  of  the number of hits at level 3, 4, and 5).  Thus, an entry of "[0+]  37"
       shows that at level 0 or higher there were 37 hits (the 0+ entry will always be  the  same
       as  the "hits" number above).  Hits per KSLOC is next shown; this is each of the "level or
       higher" values multiplied by 1000 and divided by the  physical  SLOC.   If  symlinks  were
       skipped,  the  count  of  those  is reported.  If hits were suppressed (using the "ignore"
       directive in source code comments as described above), the number suppressed is  reported.
       The  minimum  risk  level  to be included in the report is displayed; by default this is 1
       (use --minlevel to change this).  The summary ends with important reminders: Not every hit
       is  necessarily  a security vulnerability, and there may be other security vulnerabilities
       not reported by the tool.

       Flawfinder intentionally works similarly to another program, ITS4, which is not fully open
       source  software  (as defined in the Open Source Definition) nor free software (as defined
       by the Free Software Foundation).  The author of Flawfinder has never seen  ITS4's  source
       code.

BRIEF TUTORIAL

       Here's  a  brief example of how flawfinder might be used.  Imagine that you have the C/C++
       source code for some program named xyzzy (which you may or  may  not  have  written),  and
       you're  searching  for  security  vulnerabilities  (so  you  can fix them before customers
       encounter the vulnerabilities).  For this tutorial, I'll assume that you're using a  Unix-
       like system, such as Linux, OpenBSD, or MacOS X.

       If the source code is in a subdirectory named xyzzy, you would probably start by opening a
       text window and using flawfinder's default settings, to analyze the program and  report  a
       prioritized  list  of potential security vulnerabilities (the ``less'' just makes sure the
       results stay on the screen):
              flawfinder xyzzy | less

       At this point, you will a large number of entries; each entry begins with  a  filename,  a
       colon,  a  line  number, a risk level in brackets (where 5 is the most risky), a category,
       the name of the function, and a description  of  why  flawfinder  thinks  the  line  is  a
       vulnerability.  Flawfinder normally sorts by risk level, showing the riskiest items first;
       if you have limited time, it's probably best to start working on the  riskiest  items  and
       continue until you run out of time.  If you want to limit the display to risks with only a
       certain  risk  level  or  higher,  use  the  --minlevel  option.   If  you're  getting  an
       extraordinary  number  of  false  positives  because  variable  names  look like dangerous
       function names, use the -F option to remove reports about them.  If you  don't  understand
       the  error message, please see documents such as the Writing Secure Programs for Linux and
       Unix HOWTOhttp://www.dwheeler.com/secure-programs⟩  at  http://www.dwheeler.com/secure-
       programs which provides more information on writing secure programs.

       Once  you  identify  the  problem and understand it, you can fix it.  Occasionally you may
       want to re-do the analysis, both because the line numbers will change  and  to  make  sure
       that the new code doesn't introduce yet a different vulnerability.

       If you've determined that some line isn't really a problem, and you're sure of it, you can
       insert just before or on the offending line a comment like
               /* Flawfinder: ignore */
       to keep them from showing up in the output.

       Once you've done that, you should go back and search for the  program's  inputs,  to  make
       sure  that  the  program  strongly  filters  any  of its untrusted inputs.  Flawfinder can
       identify many program inputs by using the --inputs option, like this:
              flawfinder --inputs xyzzy

       Flawfinder can integrate well with text editors and integrated  development  environments;
       see the examples for more information.

       Flawfinder  includes  many  other  options,  including ones to create HTML versions of the
       output (useful for prettier displays).  The next section describes those options  in  more
       detail.

OPTIONS

       Flawfinder has a number of options, which can be grouped into options that control its own
       documentation, select which hits to display, select the output format, and perform hitlist
       management.

   Documentation
       --help      Show usage (help) information.

       --version   Shows (just) the version number and exits.

   Selecting Hits to Display
       --patchpatchfile
                   -Ppatchfile  Only  report  hits that are changed by the given patch file.  The
                   patch file must be in unified diff format (e.g., the output of  "diff  -u  old
                   new"  or "svn diff"), where the new files are the ones that are being examined
                   by flawfinder.  The line numbers given in the patch file are used to determine
                   which  lines  were  changed, so if you have modified the files since the patch
                   file was created, regenerate the patch file first.  Beware that the file names
                   of  the  new  files  given  in  the  patch  file must match exactly, including
                   upper/lower case, path prefix,  and  directory  separator  (\  vs.  /).   Only
                   unified  diff format is accepted (either GNU diff or svn diff output is okay);
                   if you have a different format, again regenerate it  first.   Only  hits  that
                   occur  on  resultant  changed  lines, or immediately above and below them, are
                   reported.  This option implies --neverignore.

       --allowlink Allow the use of symbolic links; normally symbolic links are  skipped.   Don't
                   use  this  option  if you're analyzing code by others; attackers could do many
                   things to cause problems for  an  analysis  with  this  option  enabled.   For
                   example,  an attacker could insert symbolic links to files such as /etc/passwd
                   (leaking information about the file) or create a circular  loop,  which  would
                   cause  flawfinder  to  run  ``forever''.   Another  problem with enabling this
                   option is that if the same file is referenced multiple  times  using  symbolic
                   links,  it will be analyzed multiple times (and thus reported multiple times).
                   Note that flawfinder already includes some protection against  symbolic  links
                   to  special  file  types  such  as  device  file  types  (e.g.,  /dev/zero  or
                   C:\mystuff\com1).  Note that for flawfinder version 1.01 and before, this  was
                   the default.

       --inputs

       -I          Show  only functions that obtain data from outside the program; this also sets
                   minlevel to 0.

       --minlevel=X

       -m X        Set minimum risk level to X for inclusion in hitlist.   This  can  be  from  0
                   (``no risk'') to 5 (``maximum risk''); the default is 1.

       --falsepositive

       -F          Do  not  include  hits that are likely to be false positives.  Currently, this
                   means that function names are ignored if they're not followed by "(", and that
                   declarations  of  character  arrays  aren't  noted.   Thus,  if you have use a
                   variable named "access" everywhere, this will  eliminate  references  to  this
                   ordinary  variable.   This  isn't the default, because this also increases the
                   likelihood of missing important hits; in particular, function names in #define
                   clauses and calls through function pointers will be missed.

       --neverignore

       -n          Never  ignore  security issues, even if they have an ``ignore'' directive in a
                   comment.

       --followdotdir
                   Enter directories whose names begin with ".".  Normally such  directories  are
                   ignored,   since   they   normally   include  version  control  private  data,
                   configurations, and so on.

   Selecting Output Format
       --columns

       -C          Show the column number (as well as the file name and line number) of each hit;
                   this is shown after the line number by adding a colon and the column number in
                   the line (the first character in a line is column number 1).  This  is  useful
                   for  editors  that can jump to specific columns, or for integrating with other
                   tools (such as those to further filter out false positives).

       --context

       -c          Show context, i.e., the line having the "hit"/potential flaw.  By default  the
                   line is shown immediately after the warning.

       --dataonly

       -D          Don't  display the header and footer.  Use this along with --quiet to see just
                   the data itself.

       --html      Format the output as HTML instead of as simple text.

       --immediate

       -i          Immediately display hits (don't just wait until the end).

       --singleline

       -S          Display as single line of text output for each hit.   Useful  for  interacting
                   with compilation tools.

       --omittime  Omit  timing  information.   This is useful for regression tests of flawfinder
                   itself, so that the output doesn't vary depending on  how  long  the  analysis
                   takes.

       --quiet

       -Q          Don't  display status information (i.e., which files are being examined) while
                   the analysis is going on.

   Hitlist Management
       --savehitlist=F
                   Save all resulting hits (the "hitlist") to F.

       --loadhitlist=F
                   Load the hitlist from F instead of analyzing source programs.

       --diffhitlist=F
                   Show only hits (loaded or analyzed)  not  in  F.   F  was  presumably  created
                   previously  using --savehitlist.  If the --loadhitlist option is not provided,
                   this will show the hits in the  analyzed  source  code  files  that  were  not
                   previously  stored in F.  If used along with --loadhitlist, this will show the
                   hits  in  the  loaded  hitlist  not  in  F.   The  difference   algorithm   is
                   conservative;  hits  are  only  considered  the ``same'' if they have the same
                   filename, line number, column position, function name, and risk level.

EXAMPLES

       Here are various examples of how to invoke flawfinder.  The first  examples  show  various
       simple  command-line  options.   Flawfinder is designed to work well with text editors and
       integrated development environments, so the next sections show how to integrate flawfinder
       into vim and emacs.

   Simple command-line options
       flawfinder /usr/src/linux-2.4.12
                   Examine all the C/C++ files in the directory /usr/src/linux-2.4.12 and all its
                   subdirectories (recursively), reporting on all hits found.

       flawfinder --minlevel=4 .
                   Examine all the C/C++ files in the current directory  and  its  subdirectories
                   (recursively);  only  report  vulnerabilities  level 4 and up (the two highest
                   risk levels).

       flawfinder --inputs mydir
                   Examine all the C/C++ files in mydir and its subdirectories (recursively), and
                   report functions that take inputs (so that you can ensure that they filter the
                   inputs appropriately).

       flawfinder --neverignore mydir
                   Examine all the C/C++ files in the directory  mydir  and  its  subdirectories,
                   including even the hits marked for ignoring in the code comments.

       flawfinder -QD mydir
                   Examine  mydir  and  report  only  the actual results (removing the header and
                   footer of the output).  This form is useful if the output will be  piped  into
                   other  tools  for  further analysis.  The -C (--columns) and -S (--singleline)
                   options can also be useful if you're piping the data into other tools.

       flawfinder --quiet --html --context mydir > results.html
                   Examine all the C/C++ files in the directory mydir and its subdirectories, and
                   produce  an  HTML  formatted  version  of the results.  Source code management
                   systems (such as SourceForge and Savannah) might use a command like this.

       flawfinder --quiet --savehitlist saved.hits *.[ch]
                   Examine all .c and .h files in the current directory.   Don't  report  on  the
                   status  of processing, and save the resulting hitlist (the set of all hits) in
                   the file saved.hits.

       flawfinder --diffhitlist saved.hits *.[ch]
                   Examine all .c and .h files in the current directory, and show any  hits  that
                   weren't  already  in  the  file saved.hits.  This can be used to show only the
                   ``new'' vulnerabilities in a modified program, if saved.hits was created  from
                   the older version of the program being analyzed.

   Invoking from vim
       The  text  editor  vim includes a "quickfix" mechanism that works well with flawfinder, so
       that you can easily view the warning messages and jump to the relevant source code.

       First, you need to invoke flawfinder to create a list of hits, and there are two  ways  to
       do  this.   The first way is to start flawfinder first, and then (using its output) invoke
       vim.  The second way is to start (or continue to run)  vim,  and  then  invoke  flawfinder
       (typically from inside vim).

       For  the first way, run flawfinder and store its output in some FLAWFILE (say "flawfile"),
       then invoke vim using its -q option,  like  this:  "vim  -q  flawfile".   The  second  way
       (starting  flawfinder  after starting vim) can be done a legion of ways.  One is to invoke
       flawfinder using a shell command, ":!flawfinder-command > FLAWFILE", then follow that with
       the  command  ":cf  FLAWFILE".   Another  way  is  to store the flawfinder command in your
       makefile (as, say, a pseudocommand like "flaw"), and then run ":make flaw".

       In all these cases you need a command for flawfinder to run.  A plausible  command,  which
       places  each  hit  in its own line (-S) and removes headers and footers that would confuse
       it, is:

       flawfinder -SQD .

       You can now use various editing commands to view the results.  The command ":cn"  displays
       the  next  hit;  ":cN" displays the previous hit, and ":cr" rewinds back to the first hit.
       ":copen" will open a window to show  the  current  list  of  hits,  called  the  "quickfix
       window";  ":cclose"  will close the quickfix window.  If the buffer in the used window has
       changed, and the error is in another file, jumping to the error will fail.   You  have  to
       make  sure  the window contains a buffer which can be abandoned before trying to jump to a
       new file, say by saving the file; this prevents accidental data loss.

   Invoking from emacs
       The text editor  /  operating  system  emacs  includes  "grep  mode"  and  "compile  mode"
       mechanisms  that  work well with flawfinder, making it easy to view warning messages, jump
       to the relevant source code, and fix any problems you find.

       First, you need to invoke flawfinder to create a list of warning messages.   You  can  use
       "grep  mode" or "compile mode" to create this list.  Often "grep mode" is more convenient;
       it leaves compile  mode  untouched  so  you  can  easily  recompile  once  you've  changed
       something.   However,  if  you want to jump to the exact column position of a hit, compile
       mode may be more convenient because emacs can use  the  column  output  of  flawfinder  to
       directly jump to the right location without any special configuration.

       To  use  grep  mode,  enter  the  command  "M-x grep" and then enter the needed flawfinder
       command.  To use compile mode, enter the  command  "M-x  compile"  and  enter  the  needed
       flawfinder  command.   This  is a meta-key command, so you'll need to use the meta key for
       your keyboard (this is usually the ESC key).  As with all emacs commands, you'll  need  to
       press  RETURN  after  typing  "grep"  or  "compile".  So on many systems, the grep mode is
       invoked by typing ESC x g r e p RETURN.

       You then need to enter a command, removing whatever was  there  before  if  necessary.   A
       plausible command is:

       flawfinder -SQDC .

       This  command  makes  every  hit  report  a single line, which is much easier for tools to
       handle.  The quiet and dataonly options remove the other status information not needed for
       use  inside  emacs.   The  trailing  period  means  that  the  current  directory  and all
       descendents are searched for C/C++ code, and analyzed for flaws.

       Once you've invoked flawfinder, you can use emacs to jump  around  in  its  results.   The
       command  C-x  `  (Control-x backtick) visits the source code location for the next warning
       message.  C-u C-x ` (control-u control-x backtick) restarts from the beginning.   You  can
       visit  the  source  for  any particular error message by moving to that hit message in the
       *compilation* buffer or *grep* buffer and typing the return key.  (Technical note: in  the
       compilation  buffer,  this  invokes  compile-goto-error).   You can also click the Mouse-2
       button on the error message (when using  the  mouse  you  don't  need  to  switch  to  the
       *compilation* buffer first).

       If  you  want  to  use  grep  mode  to  jump  to specific columns of a hit, you'll need to
       specially configure emacs to do this.  To do this, modify the emacs variable "grep-regexp-
       alist".  This variable tells Emacs how to parse output of a "grep" command, similar to the
       variable "compilation-error-regexp-alist" which lists various formats of compilation error
       messages.

SECURITY

       You  should  always  analyze  a copy of the source program being analyzed, not a directory
       that can be modified by a developer while flawfinder is performing the analysis.  This  is
       especially  true  if  you don't necessily trust a developer of the program being analyzed.
       If an attacker has control over the files while you're analyzing them, the attacker  could
       move  files  around or change their contents to prevent the exposure of a security problem
       (or create the impression of a problem where there is  none).   If  you're  worried  about
       malicious  programmers  you  should  do this anyway, because after analysis you'll need to
       verify that the code eventually run is the code  you  analyzed.   Also,  do  not  use  the
       --allowlink option in such cases; attackers could create malicious symbolic links to files
       outside of their source code area (such as /etc/passwd).

       Source code management systems (like SourceForge and Savannah) definitely fall  into  this
       category; if you're maintaining one of those systems, first copy or extract the files into
       a separate directory (that can't be controlled by attackers) before running flawfinder  or
       any other code analysis tool.

       Note  that  flawfinder  only opens regular files, directories, and (if requested) symbolic
       links; it will never open other kinds of files, even if a symbolic link is made  to  them.
       This counters attackers who insert unusual file types into the source code.  However, this
       only works if the filesystem being analyzed can't be modified by an  attacker  during  the
       analysis,  as  recommended  above.  This protection also doesn't work on Cygwin platforms,
       unfortunately.

       Cygwin systems (Unix emulation on top of Windows) have an additional problem if flawfinder
       is  used  to  analyze  programs  the analyzer cannot trust due to a design flaw in Windows
       (that it inherits from MS-DOS).  On Windows and MS-DOS, certain filenames (e.g., ``com1'')
       are automatically treated by the operating system as the names of peripherals, and this is
       true even when a full pathname is given.  Yes, Windows and MS-DOS really are designed this
       badly.   Flawfinder deals with this by checking what a filesystem object is, and then only
       opening directories and regular files (and  symlinks  if  enabled).   Unfortunately,  this
       doesn't  work  on Cygwin; on at least some versions of Cygwin on some versions of Windows,
       merely trying to determine if a file is a device type can cause the program  to  hang.   A
       workaround  is  to  delete  or  rename  any filenames that are interpreted as device names
       before performing the analysis.  These so-called ``reserved names''  are  CON,  PRN,  AUX,
       CLOCK$,  NUL,  COM1-COM9,  and  LPT1-LPT9,  optionally  followed  by  an  extension (e.g.,
       ``com1.txt''), in any directory, and in any case (Windows is case-insensitive).

BUGS

       Flawfinder is currently limited to C/C++.  It's designed so that adding support for  other
       languages should be easy.

       Flawfinder  can  be fooled by user-defined functions or method names that happen to be the
       same as those defined as ``hits'' in its database, and will often trigger  on  definitions
       (as well as uses) of functions with the same name.  This is because flawfinder is based on
       text pattern matching, which is part of its fundamental design  and  not  easily  changed.
       This  isn't  as much of a problem for C code, but it can be more of a problem for some C++
       code which heavily uses classes and namespaces.  On the positive side, flawfinder  doesn't
       get  confused  by many complicated preprocessor sequences that other tools sometimes choke
       on.  Also, having the same name as a common library routine name  can  indicate  that  the
       developer is simply rewriting a common library routine, say for portability's sake.  Thus,
       there are reasonable odds that these rewritten routines will be  vulnerable  to  the  same
       kinds  of  misuse.   The  --falsepositive  option can help somewhat.  If this is a serious
       problem, feel free to modify the program, or process the flawfinder output  through  other
       tools to remove the false positives.

       Preprocessor  commands  embedded  in  the  middle  of a parameter list of a call can cause
       problems in parsing, in particular, if a string is opened and then closed  multiple  times
       using  an  #ifdef  ..  #else construct, flawfinder gets confused.  Such constructs are bad
       style, and will confuse many other tools too.  If you must  analyze  such  files,  rewrite
       those lines.  Thankfully, these are quite rare.

       The  routine to detect statically defined character arrays uses simple text matching; some
       complicated expresions can cause it to trigger or not trigger unexpectedly.

       Flawfinder looks for specific patterns known to be common mistakes.   Flawfinder  (or  any
       tool  like  it)  is not a good tool for finding intentionally malicious code (e.g., Trojan
       horses); malicious programmers can easily insert code that would not be detected  by  this
       kind of tool.

       Flawfinder  looks  for  specific patterns known to be common mistakes in application code.
       Thus, it is likely to be less effective analyzing programs that  aren't  application-layer
       code  (e.g.,  kernel code or self-hosting code).  The techniques may still be useful; feel
       free to replace the database if your situation is significantly different from normal.

       Flawfinder's output format (filename:linenumber, followed optionally by  a  :columnnumber)
       can be misunderstood if any source files have very weird filenames.  Filenames embedding a
       newline/linefeed character will cause odd breaks, and filenames including  colon  (:)  are
       likely  to be misunderstood.  This is especially important if flawfinder's output is being
       used by other tools, such as filters or text editors.  If  you're  looking  at  new  code,
       examine  the  files  for  such  characters.  It's incredibly unwise to have such filenames
       anyway; many tools can't handle such filenames at all.  Newline  and  linefeed  are  often
       used  as  internal  data  delimeters.   The  colon  is often used as special characters in
       filesystems: MacOS uses it as a directory separator, Windows/MS-DOS uses  it  to  identify
       drive  letters,  Windows/MS-DOS  inconsistently  uses  it to identify special devices like
       CON:, and applications on many platforms use the colon to identify  URIs/URLs.   Filenames
       including  spaces  and/or tabs don't cause problems for flawfinder, though note that other
       tools might have problems with them.

       In general, flawfinder attempts to err on the side of caution; it tends to report hits, so
       that  they  can  be examined further, instead of silently ignoring them.  Thus, flawfinder
       prefers to have false positives (reports that turn out to not  be  problems)  rather  than
       false  negatives  (failure  to  report  on  a  security  vulnerability).   But  this  is a
       generality; flawfinder uses simplistic heuristics and simply can't get everything "right".

       Security vulnerabilities might not be identified as such by  flawfinder,  and  conversely,
       some  hits  aren't  really security vulnerabilities.  This is true for all static security
       scanners, especially those like flawfinder that use a  simple  pattern-based  approach  to
       identifying problems.  Still, it can serve as a useful aid for humans, helping to identify
       useful places to examine further, and that's the point of this tool.

SEE ALSO

       See the flawfinder website at http://www.dwheeler.com/flawfinder.  You should also see the
       Secure Programming for Unix and Linux HOWTO at http://www.dwheeler.com/secure-programs.

AUTHOR

       David A. Wheeler (dwheeler@dwheeler.com).