Commit a21180b7 authored by Richard Levitte's avatar Richard Levitte
Browse files

util/ck_errf.pl: add detection of unknown libcrypto and libssl libs



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: default avatarRich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/6455)
parent fa92c69a
Loading
Loading
Loading
Loading
+21 −2
Original line number Diff line number Diff line
@@ -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;
            }