util/ck_errf.pl: add detection of unknown libcrypto and libssl libs
authorRichard Levitte <levitte@openssl.org>
Mon, 11 Jun 2018 14:26:19 +0000 (16:26 +0200)
committerRichard Levitte <levitte@openssl.org>
Mon, 11 Jun 2018 15:52:28 +0000 (17:52 +0200)
The list of known libs are readily available in crypto/err/openssl.ec,
so lets use it to figure out if all error function codes belong to
known libs.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6455)

util/ck_errf.pl

index ada2352..a078427 100755 (executable)
@@ -19,6 +19,20 @@ use warnings;
 my $err_strict = 0;
 my $bad        = 0;
 
+# To detect if there is any error generation for a libcrypto/libssl libs
+# we don't know, we need to find out what libs we do know.  That list is
+# readily available in crypto/err/openssl.ec, in form of lines starting
+# with "L ".
+my $config     = "crypto/err/openssl.ec";
+my %libs       = ( "SYS" => 1 );
+open my $cfh, $config or die "Trying to read $config: $!\n";
+while (<$cfh>) {
+    s|\R$||;                    # Better chomp
+    next unless m|^L ([0-9A-Z_]+)\s|;
+    next if $1 eq "NONE";
+    $libs{$1} = 1;
+}
+
 foreach my $file (@ARGV) {
     if ( $file eq "-strict" ) {
         $err_strict = 1;
@@ -33,17 +47,22 @@ foreach my $file (@ARGV) {
             $func = $1;
             $func =~ tr/A-Z/a-z/;
         }
-        if ( /([A-Z0-9]+)err\(([^,]+)/ && !/ckerr_ignore/ ) {
+        if ( /([A-Z0-9_]+[A-Z0-9])err\(([^,]+)/ && !/ckerr_ignore/ ) {
             my $errlib = $1;
             my $n      = $2;
 
+            unless ( $libs{$errlib} ) {
+                print "$file:$.:$errlib unknown\n";
+                $bad = 1;
+            }
+
             if ( $func eq "" ) {
                 print "$file:$.:???:$n\n";
                 $bad = 1;
                 next;
             }
 
-            if ( $n !~ /([^_]+)_F_(.+)$/ ) {
+            if ( $n !~ /^(.+)_F_(.+)$/ ) {
                 #print "check -$file:$.:$func:$n\n";
                 next;
             }