Package: abi-compliance-checker
Version: 1.6-1
Severity: important
Tags: patch

abi-compliance-checker generally ignores leading and preceding whitespace when parsing descriptors. However, it does not ignore tab characters. Thus it will break with bunch of unhelpful errors if you e.g. precede your version number with a tab.

I severely inflated the severity of this bug because of the very high ratio of time I wasted trying to figure what is the culprit to the time required to fix this bug.

--
Jakub Wilk
diff --git a/abi-compliance-checker.pl b/abi-compliance-checker.pl
--- a/abi-compliance-checker.pl
+++ b/abi-compliance-checker.pl
@@ -286,7 +286,7 @@
         print "descriptor d$LibVersion is empty\n";
         exit(1);
     }
-    if($Descriptor_File =~ m/<version>[ \n]*(.*?)[ \n]*<\/version>/ios)
+    if($Descriptor_File =~ m/<version>\s*(.*?)\s*<\/version>/ios)
     {
         $Descriptor{$LibVersion}{'Version'} = $1;
     }
@@ -295,7 +295,7 @@
         print "select version in descriptor d$LibVersion\n";
         exit(1);
     }
-    if($Descriptor_File =~ m/<headers>[ \n]*(.*?)[ \n]*<\/headers>/ios)
+    if($Descriptor_File =~ m/<headers>\s*(.*?)\s*<\/headers>/ios)
     {
         $Descriptor{$LibVersion}{'Headers'} = $1;
     }
@@ -304,7 +304,7 @@
         print "select headers in descriptor d$LibVersion\n";
         exit(1);
     }
-    if($Descriptor_File =~ m/<libs>[ \n]*(.*?)[ \n]*<\/libs>/ios)
+    if($Descriptor_File =~ m/<libs>\s*(.*?)\s*<\/libs>/ios)
     {
         $Descriptor{$LibVersion}{'Libs'} = $1;
     }
@@ -313,47 +313,47 @@
         print "select libs in descriptor d$LibVersion\n";
         exit(1);
     }
-    if($Descriptor_File =~ m/<include_paths>[ \n]*(.*?)[ \n]*<\/include_paths>/ios)
+    if($Descriptor_File =~ m/<include_paths>\s*(.*?)\s*<\/include_paths>/ios)
     {
         $Descriptor{$LibVersion}{'Include_Paths'} = $1;
     }
-    if($Descriptor_File =~ m/<gcc_options>[ \n]*(.*?)[ \n]*<\/gcc_options>/ios)
+    if($Descriptor_File =~ m/<gcc_options>\s*(.*?)\s*<\/gcc_options>/ios)
     {
         $Descriptor{$LibVersion}{'Gcc_Options'} = $1;
         foreach my $Option (split("\n", $Descriptor{$LibVersion}{'Gcc_Options'}))
         {
-            $Option =~ s/\A[ ]*//g;
-            $Option =~ s/[ ]*\Z//g;
+            $Option =~ s/\A\s*//g;
+            $Option =~ s/\s*\Z//g;
             $CompilerOptions{$LibVersion} .= " ".$Option;
         }
     }
-    if($Descriptor_File =~ m/<opaque_types>[ \n]*(.*?)[ \n]*<\/opaque_types>/ios)
+    if($Descriptor_File =~ m/<opaque_types>\s*(.*?)\s*<\/opaque_types>/ios)
     {
         $Descriptor{$LibVersion}{'Opaque_Types'} = $1;
         foreach my $Type_Name (split("\n", $Descriptor{$LibVersion}{'Opaque_Types'}))
         {
-            $Type_Name =~ s/\A[ ]*//g;
-            $Type_Name =~ s/[ ]*\Z//g;
+            $Type_Name =~ s/\A\s*//g;
+            $Type_Name =~ s/\s*\Z//g;
             $OpaqueTypes{$LibVersion}{$Type_Name} = 1;
         }
     }
-    if($Descriptor_File =~ m/<skip_interfaces>[ \n]*(.*?)[ \n]*<\/skip_interfaces>/ios)
+    if($Descriptor_File =~ m/<skip_interfaces>\s*(.*?)\s*<\/skip_interfaces>/ios)
     {
         $Descriptor{$LibVersion}{'Internal_Functions'} = $1;
         foreach my $Interface_Name (split("\n", $Descriptor{$LibVersion}{'Internal_Functions'}))
         {
-            $Interface_Name =~ s/\A[ ]*//g;
-            $Interface_Name =~ s/[ ]*\Z//g;
+            $Interface_Name =~ s/\A\s*//g;
+            $Interface_Name =~ s/\s*\Z//g;
             $InternalInterfaces{$LibVersion}{$Interface_Name} = 1;
         }
     }
-    if($Descriptor_File =~ m/<include_preamble>[ \n]*(.*?)[ \n]*<\/include_preamble>/ios)
+    if($Descriptor_File =~ m/<include_preamble>\s*(.*?)\s*<\/include_preamble>/ios)
     {
         $Descriptor{$LibVersion}{'Include_Preamble'} = $1;
         foreach my $Header_Name (split("\n", $Descriptor{$LibVersion}{'Include_Preamble'}))
         {
-            $Header_Name =~ s/\A[ ]*//g;
-            $Header_Name =~ s/[ ]*\Z//g;
+            $Header_Name =~ s/\A\s*//g;
+            $Header_Name =~ s/\s*\Z//g;
             $Include_Preamble{$Header_Name} = 1;
         }
     }

Attachment: signature.asc
Description: Digital signature

Reply via email to