From b9def672b123ce3d1102683f13c61bc68a07c5b0 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Tue, 12 Jun 2018 08:53:14 +0200 Subject: [PATCH] util/ck_errf.pl: add functionality that brings it closer to util/mkerr.pl There was no option to give other config files than the default crypto/err/openssl.ec, and yet it tried to check the errors generated in engines (and failing, of course). Also added the same '-internal' option as util/mkerr.pl. Reviewed-by: Tim Hudson (Merged from https://github.com/openssl/openssl/pull/6461) --- util/ck_errf.pl | 78 ++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 68 insertions(+), 10 deletions(-) diff --git a/util/ck_errf.pl b/util/ck_errf.pl index a0784279de..138dfb9a22 100755 --- a/util/ck_errf.pl +++ b/util/ck_errf.pl @@ -16,15 +16,75 @@ use strict; use warnings; +my $config; my $err_strict = 0; -my $bad = 0; +my $debug = 0; +my $internal = 0; + +sub help +{ + print STDERR <<"EOF"; +mkerr.pl [options] [files...] + +Options: + + -conf FILE Use the named config file FILE instead of the default. + + -debug Verbose output debugging on stderr. + + -internal Generate code that is to be built as part of OpenSSL itself. + Also scans internal list of files. + + -strict If any error was found, fail with exit code 1, otherwise 0. + + -help Show this help text. + + ... Additional arguments are added to the file list to scan, + if '-internal' was NOT specified on the command line. + +EOF +} + +while ( @ARGV ) { + my $arg = $ARGV[0]; + last unless $arg =~ /-.*/; + $arg = $1 if $arg =~ /-(-.*)/; + if ( $arg eq "-conf" ) { + $config = $ARGV[1]; + shift @ARGV; + } elsif ( $arg eq "-debug" ) { + $debug = 1; + } elsif ( $arg eq "-internal" ) { + $internal = 1; + } elsif ( $arg eq "-strict" ) { + $err_strict = 1; + } elsif ( $arg =~ /-*h(elp)?/ ) { + &help(); + exit; + } elsif ( $arg =~ /-.*/ ) { + die "Unknown option $arg; use -h for help.\n"; + } + shift @ARGV; +} + +my @source; +if ( $internal ) { + die "Extra parameters given.\n" if @ARGV; + $config = "crypto/err/openssl.ec" unless defined $config; + @source = ( glob('crypto/*.c'), glob('crypto/*/*.c'), + glob('ssl/*.c'), glob('ssl/*/*.c') ); +} else { + die "Configuration file not given.\nSee '$0 -help' for information\n" + unless defined $config; + @source = @ARGV; +} # 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 ); +# with "L ". Note that we always rely on the modules SYS and ERR to be +# generally available. +my %libs = ( SYS => 1, ERR => 1 ); open my $cfh, $config or die "Trying to read $config: $!\n"; while (<$cfh>) { s|\R$||; # Better chomp @@ -33,11 +93,8 @@ while (<$cfh>) { $libs{$1} = 1; } -foreach my $file (@ARGV) { - if ( $file eq "-strict" ) { - $err_strict = 1; - next; - } +my $bad = 0; +foreach my $file (@source) { open( IN, "<$file" ) || die "Can't open $file, $!"; my $func = ""; while () { @@ -52,7 +109,8 @@ foreach my $file (@ARGV) { my $n = $2; unless ( $libs{$errlib} ) { - print "$file:$.:$errlib unknown\n"; + print "$file:$.:$errlib not listed in $config\n"; + $libs{$errlib} = 1; # To not display it again $bad = 1; } -- 2.34.1