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;
}
}
signature.asc
Description: Digital signature

