]> ruderich.org/simon Gitweb - blhc/blhc.git/commitdiff
Fix --ignore-flag -D_FORTIFY_SOURCE=2.
authorSimon Ruderich <simon@ruderich.org>
Sun, 27 May 2012 20:42:17 +0000 (22:42 +0200)
committerSimon Ruderich <simon@ruderich.org>
Sun, 27 May 2012 20:42:17 +0000 (22:42 +0200)
bin/blhc
t/tests.t

index c3834fbf07aeaec8757b1c6cc3499fbc47ab5bd0..51fc4e14d62e1849d09ab06e171aaf0544d446ee 100755 (executable)
--- a/bin/blhc
+++ b/bin/blhc
@@ -172,6 +172,7 @@ my @def_cxxflags = (
 my @def_cppflags = ();
 my @def_cppflags_fortify = (
     '-D_FORTIFY_SOURCE=2', # must be first, see cppflags_fortify_broken()
 my @def_cppflags = ();
 my @def_cppflags_fortify = (
     '-D_FORTIFY_SOURCE=2', # must be first, see cppflags_fortify_broken()
+    # If you add another flag fix hack below (search for "Hack to fix").
 );
 my @def_cppflags_fortify_bad = (
     # These flags may overwrite -D_FORTIFY_SOURCE=2.
 );
 my @def_cppflags_fortify_bad = (
     # These flags may overwrite -D_FORTIFY_SOURCE=2.
@@ -862,6 +863,13 @@ foreach my $file (@ARGV) {
         @ldflags = (@ldflags, @def_ldflags_bindnow);
     }
 
         @ldflags = (@ldflags, @def_ldflags_bindnow);
     }
 
+    # Hack to fix cppflags_fortify_broken() if --ignore-flag
+    # -D_FORTIFY_SOURCE=2 is used to ignore missing fortification. Only works
+    # as long as @def_cppflags_fortify contains only one variable.
+    if (scalar @def_cppflags_fortify == 0) {
+        $harden_fortify = 0;
+    }
+
     # Ignore flags for this arch if requested.
     if ($arch and exists $option_ignore_arch_flag{$arch}) {
         my @flag_refs = (\@cflags, \@cxxflags, \@cppflags, \@ldflags);
     # Ignore flags for this arch if requested.
     if ($arch and exists $option_ignore_arch_flag{$arch}) {
         my @flag_refs = (\@cflags, \@cxxflags, \@cppflags, \@ldflags);
index 1f68cd4a4fea426ef54767201baf10ebaed5d8a5..3bbd62993f92e6d34c7a1eae88871205d99e75b9 100644 (file)
--- a/t/tests.t
+++ b/t/tests.t
@@ -19,7 +19,7 @@
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
-use Test::More tests => 192;
+use Test::More tests => 194;
 
 
 sub is_blhc {
 
 
 sub is_blhc {
@@ -519,6 +519,9 @@ CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -D_FORTIFY_SOURCE=0 -g -O2 -fstack-p
 CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -D_FORTIFY_SOURCE=1 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -c test-f.c
 ';
 
 CPPFLAGS missing (-D_FORTIFY_SOURCE=2): gcc -D_FORTIFY_SOURCE=1 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -D_FORTIFY_SOURCE=2 -c test-f.c
 ';
 
+is_blhc 'bad-cppflags', '--ignore-flag -D_FORTIFY_SOURCE=2', 0,
+        '';
+
 my $bad_ldflags =
         'LDFLAGS missing (-Wl,-z,relro): gcc -o test test-a.o test-b.o test-c.o -ltest
 ';
 my $bad_ldflags =
         'LDFLAGS missing (-Wl,-z,relro): gcc -o test test-a.o test-b.o test-c.o -ltest
 ';