X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=blobdiff_plain;f=bin%2Fblhc;h=704d323694031709909d15becefea70ab006ffee;hp=d5cc9d624c46fd56ad74f9b22ca548157c9aff83;hb=ae5da64f4f6f53ca3eb055d2124988847b2e8d50;hpb=23189f94e3761d3ef1d82b5abccf11564388b4bf diff --git a/bin/blhc b/bin/blhc index d5cc9d6..704d323 100755 --- a/bin/blhc +++ b/bin/blhc @@ -102,6 +102,17 @@ my @header_preprocess = ( # C++ qw( hh H hp hxx hpp HPP h++ tcc ), ); +# Object files. +my @object = ( + # Normal object files. + qw ( o ), + # Libtool object files. + qw ( lo la ), + # Dynamic libraries. bzip2 uses .sho. + qw ( so sho ), + # Static libraries. + qw ( a ), +); # Hashes for fast extensions lookup to check if a file falls in one of these # categories. @@ -128,10 +139,14 @@ my %extensions_compile_cpp = map { $_ => 1 } ( @source_preprocess_compile_cpp, @source_no_preprocess_compile_cpp, ); +my %extensions_object = map { $_ => 1 } ( + @object, +); my %extension = map { $_ => 1 } ( @source_no_preprocess, @header_preprocess, @source_preprocess, + @object, ); # Regexp to match file extensions. @@ -963,11 +978,11 @@ LINE: $preprocess = 1; } + if (not $flag_preprocess) { # If there are source files then it's compiling/linking in one step # and we must check both. We only check for source files here, because # header files cause too many false positives. - if (not $flag_preprocess - and extension_found(\%extensions_compile_link, @extensions)) { + if (extension_found(\%extensions_compile_link, @extensions)) { # Assembly files don't need CFLAGS. if (not extension_found(\%extensions_compile, @extensions) and extension_found(\%extensions_no_compile, @extensions)) { @@ -976,6 +991,17 @@ LINE: } else { $compile = 1; } + # No compilable extensions found, either linking or compiling + # header flags. + # + # If there are also no object files we are just compiling headers + # (.h -> .h.gch). Don't check for linker flags in this case. Due + # to our liberal checks for compiler lines, this also reduces the + # number of false positives considerably. + } elsif ($link + and not extension_found(\%extensions_object, @extensions)) { + $link = 0; + } } # Assume CXXFLAGS are required when a C++ file is specified in the @@ -1111,6 +1137,9 @@ It's designed to check build logs generated by Debian's dpkg-buildpackage (or tools using dpkg-buildpackage like pbuilder or the official buildd build logs) to help maintainers detect missing hardening flags in their packages. +Only gcc is detected as compiler at the moment. If other compilers support +hardening flags as well, please report them. + If there's no output, no flags are missing and the build log is fine. =head1 OPTIONS