fix false positive in "libtool: link: g++ -include test.h .."
authorSimon Ruderich <simon@ruderich.org>
Mon, 14 Sep 2015 16:10:44 +0000 (18:10 +0200)
committerSimon Ruderich <simon@ruderich.org>
Tue, 15 Sep 2015 08:39:08 +0000 (10:39 +0200)
The .h extension causes detection as preprocess line which generates a
warning about missing CPPFLAGS. Fix this false positive for the
"libtool: link:" case. As long as GNU autotools generate sane output,
this should not cause false negatives.

Fixes Debian Bug #784959 reported by Raphaël Hertzog.

NEWS
bin/blhc
t/logs/libtool
t/tests.t

diff --git a/NEWS b/NEWS
index 9245c13093ce06e37ddf3fe708b813bd572169db..a3dffc8add797cc6a24b4dcfc4bf164f11b3adb5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@ Version 0.XX
 ------------
 
 - Sync architecture specific hardening support with dpkg 1.18.2.
+- Fix false positive in "libtool: link: g++ -include test.h .." (Debian Bug
+  #784959), reported by Raphaël Hertzog.
 
 
 Version 0.05
index 7d749028d8df82626aafac63242184f48307764c..0c2ba90e922ba4e6a4887f8d98cf7561825bbccf 100755 (executable)
--- a/bin/blhc
+++ b/bin/blhc
@@ -51,6 +51,7 @@ my $warning_regex = qr/^(.+?):(\d+):\d+: warning: (.+?) \[(.+?)\]$/;
 # Regex to catch libtool commands and not lines which show commands executed
 # by libtool (e.g. libtool: link: ...).
 my $libtool_regex = qr/\blibtool\s.*--mode=/;
+my $libtool_link_regex = qr/\blibtool: link: /;
 
 # List of source file extensions which require preprocessing.
 my @source_preprocess_compile_cpp = (
@@ -1101,6 +1102,8 @@ LINE:
         # is_non_verbose_build()).
         next if $skip;
 
+        my $orig_line = $line;
+
         # Remove everything until and including the compiler command. Makes
         # checks easier and faster.
         $line =~ s/^.*?$cc_regex//o;
@@ -1151,7 +1154,11 @@ LINE:
         }
         # These file types require preprocessing.
         if (extension_found(\%extensions_preprocess, @extensions)) {
-            $preprocess = 1;
+            # Prevent false positives with "libtool: link: g++ -include test.h
+            # .." compiler lines.
+            if ($orig_line !~ /$libtool_link_regex/o) {
+                $preprocess = 1;
+            }
         }
 
         if (not $flag_preprocess) {
index 89ca75871d98d68036486550af4c21aa75fa2508..aec960244e6436032bc20d14469295bf69910d32 100644 (file)
@@ -38,9 +38,8 @@ libtool: link: gcc -Wl,-z,relro -o test.so test.o
 libtool: link: gcc  -g -O2 -fstack-protector-strong -Wformat -Wformat-security -Werror=format-security   -Wl,-z,relro -o test test.o
 gcc -g -O2 -fstack-protector-strong -Wformat -Wformat-security -Werror=format-security -Wl,-z -Wl,relro -o .libs/test test.o
 
-# Just to be sure, libtool won't do this. Note the test.c.
-/bin/bash ../libtool --tag=CC   --mode=link gcc -Wl,-z,relro -o test.so test.c
-libtool: link: gcc -Wl,-z,relro -o test.so test.c
+# Note the .h, this might cause a false positive CPPFLAGS check.
+libtool: link: g++ -include ./include/CppUTest/MemoryLeakDetectorNewMacros.h -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -pedantic -Wsign-conversion -Woverloaded-virtual -Wno-disabled-macro-expansion -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-old-style-cast -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wl,-z -Wl,relro -o CppUTestTests CppUTestTests-AllocationInCFile.o CppUTestTests-AllocationInCppFile.o CppUTestTests-AllocLetTestFree.o CppUTestTests-AllocLetTestFreeTest.o CppUTestTests-AllTests.o CppUTestTests-CheatSheetTest.o CppUTestTests-CommandLineArgumentsTest.o CppUTestTests-CommandLineTestRunnerTest.o CppUTestTests-JUnitOutputTest.o CppUTestTests-MemoryLeakDetectorTest.o CppUTestTests-MemoryLeakOperatorOverloadsTest.o CppUTestTests-MemoryLeakWarningTest.o CppUTestTests-PluginTest.o CppUTestTests-PreprocessorTest.o CppUTestTests-SetPluginTest.o CppUTest Tests-SimpleStringTest.o CppUTestTests-SimpleMutexTest.o CppUTestTests-TestFailureNaNTest.o CppUTestTests-TestFailureTest.o CppUTestTests-TestFilterTest.o CppUTestTests-TestHarness_cTest.o CppUTestTests-TestHarness_cTestCFile.o CppUTestTests-TestInstallerTest.o CppUTestTests-TestMemoryAllocatorTest.o CppUTestTests-TestOutputTest.o CppUTestTests-TestRegistryTest.o CppUTestTests-TestResultTest.o CppUTestTests-TestUTestMacro.o CppUTestTests-UtestTest.o CppUTestTests-UtestPlatformTest.o  lib/libCppUTest.a -lpthread
 
 libtool: install: /usr/bin/install -c ...
 /bin/bash ./libtool --mode=install /usr/bin/install -c ...
index 939aaf99b1aa0f29bcc5a995054ea1252fab9f36..9fa6fc3fe4f78f5cfd88a94e0a4a092f8d35ab1b 100644 (file)
--- a/t/tests.t
+++ b/t/tests.t
@@ -796,12 +796,8 @@ LDFLAGS missing (-fPIE -pie -Wl,-z,now):  libtool: relink: gcc -Wl,-z,relro -o t
 LDFLAGS missing (-fPIE -pie -Wl,-z,now):  libtool: relink: g++ -Wl,-z,relro -o test.la test.o
 LDFLAGS missing (-fPIE -pie -Wl,-z,now): libtool: link: gcc  -g -O2 -fstack-protector-strong -Wformat -Wformat-security -Werror=format-security   -Wl,-z,relro -o test test.o
 LDFLAGS missing (-fPIE -pie -Wl,-z,now): gcc -g -O2 -fstack-protector-strong -Wformat -Wformat-security -Werror=format-security -Wl,-z -Wl,relro -o .libs/test test.o
-CFLAGS missing (-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security): libtool: link: gcc -Wl,-z,relro -o test.so test.c
-CPPFLAGS missing (-D_FORTIFY_SOURCE=2): libtool: link: gcc -Wl,-z,relro -o test.so test.c
-LDFLAGS missing (-fPIE -pie -Wl,-z,now): libtool: link: gcc -Wl,-z,relro -o test.so test.c
-CPPFLAGS missing (-D_FORTIFY_SOURCE=2): libtool: link: gcc -Wl,-z,relro -o libtest.la test.h test-a.lo test-b.lo test-c.lo test-d.la
+LDFLAGS missing (-fPIE -pie -Wl,-z,now): libtool: link: g++ -include ./include/CppUTest/MemoryLeakDetectorNewMacros.h -Wall -Wextra -Wshadow -Wswitch-default -Wswitch-enum -Wconversion -pedantic -Wsign-conversion -Woverloaded-virtual -Wno-disabled-macro-expansion -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-old-style-cast -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wl,-z -Wl,relro -o CppUTestTests CppUTestTests-AllocationInCFile.o CppUTestTests-AllocationInCppFile.o CppUTestTests-AllocLetTestFree.o CppUTestTests-AllocLetTestFreeTest.o CppUTestTests-AllTests.o CppUTestTests-CheatSheetTest.o CppUTestTests-CommandLineArgumentsTest.o CppUTestTests-CommandLineTestRunnerTest.o CppUTestTests-JUnitOutputTest.o CppUTestTests-MemoryLeakDetectorTest.o CppUTestTests-MemoryLeakOperatorOverloadsTest.o CppUTestTests-MemoryLeakWarningTest.o CppUTestTests-PluginTest.o CppUTestTests-PreprocessorTest.o CppUTestTests-SetPluginTest.o CppUTest Tests-SimpleStringTest.o CppUTestTests-SimpleMutexTest.o CppUTestTests-TestFailureNaNTest.o CppUTestTests-TestFailureTest.o CppUTestTests-TestFilterTest.o CppUTestTests-TestHarness_cTest.o CppUTestTests-TestHarness_cTestCFile.o CppUTestTests-TestInstallerTest.o CppUTestTests-TestMemoryAllocatorTest.o CppUTestTests-TestOutputTest.o CppUTestTests-TestRegistryTest.o CppUTestTests-TestResultTest.o CppUTestTests-TestUTestMacro.o CppUTestTests-UtestTest.o CppUTestTests-UtestPlatformTest.o  lib/libCppUTest.a -lpthread
 LDFLAGS missing (-fPIE -pie -Wl,-z,now): libtool: link: gcc -Wl,-z,relro -o libtest.la test.h test-a.lo test-b.lo test-c.lo test-d.la
-CPPFLAGS missing (-D_FORTIFY_SOURCE=2): libtool: link: gcc -o libtest.la test.h test-a.lo test-b.lo test-c.lo test-d.la
 LDFLAGS missing (-fPIE -pie -Wl,-z,relro -Wl,-z,now): libtool: link: gcc -o libtest.la test.h test-a.lo test-b.lo test-c.lo test-d.la
 NONVERBOSE BUILD: /usr/share/apr-1.0/build/libtool --silent --mode=compile x86_64-linux-gnu-gcc -std=gnu99 -I/usr/include/libxml2 -pthread  -pipe -g -O2 -fstack-protector-strong -Wformat -Werror=format-security ... -prefer-pic -c mod_buffer.c
 NONVERBOSE BUILD: /usr/share/apr-1.0/build/libtool --silent --mode=link x86_64-linux-gnu-gcc -std=gnu99 -I/usr/include/libxml2 -pthread  -pipe -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -Wl,--as-needed -Wl,-z,relro -o mod_buffer.la -rpath /usr/lib/apache2/modules -module -avoid-version  mod_buffer.lo