X-Git-Url: https://ruderich.org/simon/gitweb/?p=blhc%2Fblhc.git;a=blobdiff_plain;f=bin%2Fblhc;fp=bin%2Fblhc;h=2e48bbc063c6bc466ee6c6ceaae4eba42929e9b4;hp=dda96124fe76f12318a56683efd4c173dbb4e868;hb=1368fa468fd4e62ebdb4efa40efb5c19e39bacd7;hpb=5729a02f54e5cbc1ff346f457a9e56effcdee96d diff --git a/bin/blhc b/bin/blhc index dda9612..2e48bbc 100755 --- a/bin/blhc +++ b/bin/blhc @@ -49,6 +49,9 @@ my $cc_regex_full = qr/ my $cc_regex_normal = qr/ \b$cc_regex(?:\s|\\) /x; +my $rustc_regex = qr/ + \brustc\b + /x; # Regex to catch (GCC) compiler warnings. my $warning_regex = qr/^(.+?):(\d+):\d+: warning: (.+?) \[(.+?)\]$/; # Regex to catch libtool commands and not lines which show commands executed @@ -522,7 +525,7 @@ sub pic_pie_conflict { } sub is_non_verbose_build { - my ($line, $skip_ref, $input_ref, $line_offset, $line_count) = @_; + my ($line, $cargo, $skip_ref, $input_ref, $line_offset, $line_count) = @_; if ($line =~ /$libtool_regex/o) { # libtool's --silent hides the real compiler flags. @@ -554,6 +557,8 @@ sub is_non_verbose_build { # "Compiling" non binary files. return 0 if $line =~ /^\s*Compiling \S+\.(?:py|pyx|el)['"]?\s*(?:\.\.\.|because it changed\.)?$/; return 0 if $line =~ /^\s*[Cc]ompiling catalog \S+\.po\b/; + # cargo build + return 0 if $cargo and $line =~ m{^\s*Compiling\s+\S+\s+v\S+(?:\s+\(/<>\))?$}; # "Compiling" with no file name. if ($line =~ /^\s*[Cc]ompiling\s+(.+?)(?:\.\.\.)?$/) { # $file_extension_regex may need spaces around the filename. @@ -813,6 +818,9 @@ foreach my $file (@ARGV) { $disable_harden_pie = 1; } + # Ignore additional false positives if cargo/rust is used + my $cargo = 0; + my $number = 0; while (my $line = <$fh>) { $number++; @@ -909,6 +917,10 @@ foreach my $file (@ARGV) { } next FILE; } + + if ($line =~ /\bcargo\b/) { + $cargo = 1; + } } # This flags is not always available, but if it is use it. @@ -990,7 +1002,7 @@ foreach my $file (@ARGV) { # Check if this line indicates a non verbose build. my $skip = 0; - $non_verbose |= is_non_verbose_build($line, \$skip); + $non_verbose |= is_non_verbose_build($line, $cargo, \$skip); next if $skip; # Treat each command as a single line so we don't ignore valid @@ -1113,6 +1125,8 @@ foreach my $file (@ARGV) { next if $line =~ /`$cc_regex_normal\s*[^`]*-print-\S+`/; # cmake checking for compiler flags without setting CPPFLAGS next if $line =~ m{^\s*/usr/(bin|lib)/(ccache/)?c\+\+ -dM -E -c /usr/share/cmake-\S+/Modules/CMakeCXXCompilerABI\.cpp}; + # Some rustc lines look like linker commands + next if $cargo and $line =~ /$rustc_regex/o; # Check if additional hardening options were used. Used to ensure # they are used for the complete build. @@ -1298,7 +1312,7 @@ LINE: my $skip = 0; if ($input_nonverbose[$i] - and is_non_verbose_build($line, \$skip, + and is_non_verbose_build($line, $cargo, \$skip, \@input, $i, $parallel)) { if (not $option_buildd) { error_non_verbose_build($line, $input_number[$i]);