mirror of
https://github.com/openssl/openssl.git
synced 2026-05-07 20:12:39 +00:00
9648c51014
Ideally, it should probably passed to the script as a parameter, but, in the meantime, follow the relaxed attitude of the Unix counterpart and match against any version and all expected arch suffixes. Signed-off-by: Eugene Syromiatnikov <esyr@openssl.org> Reviewed-by: Neil Horman <nhorman@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.foundation> MergeDate: Fri Apr 3 15:42:21 2026 (Merged from https://github.com/openssl/openssl/pull/30635)
105 lines
2.9 KiB
Perl
Executable File
105 lines
2.9 KiB
Perl
Executable File
#! /usr/bin/env perl
|
|
# Copyright 2006-2023 The OpenSSL Project Authors. All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License 2.0 (the "License"). You may not use
|
|
# this file except in compliance with the License. You can obtain a copy
|
|
# in the file LICENSE in the source distribution or at
|
|
# https://www.openssl.org/source/license.html
|
|
|
|
use warnings;
|
|
use strict;
|
|
use Config;
|
|
|
|
my $expectedsyms=$ARGV[0];
|
|
|
|
shift(@ARGV);
|
|
|
|
# Check that object files exist
|
|
foreach (@ARGV) {
|
|
unless (-f $_ && -r $_) {
|
|
die "Path is not a regular readable file: '$_'";
|
|
}
|
|
}
|
|
|
|
my $objlist;
|
|
my $objfilelist = join(" ", @ARGV);
|
|
my $expsyms;
|
|
my $exps;
|
|
my $OBJFH;
|
|
my $cmd;
|
|
|
|
if ($Config{osname} eq "MSWin32") {
|
|
my $currentdll = "";
|
|
$cmd = "dumpbin /imports " . $objfilelist;
|
|
my @symlist;
|
|
open $expsyms, '<', $expectedsyms or die;
|
|
{
|
|
local $/;
|
|
$exps=<$expsyms>;
|
|
}
|
|
close($expsyms);
|
|
open($OBJFH, "$cmd|") or die "Cannot open process: $!";
|
|
while (<$OBJFH>)
|
|
{
|
|
chomp;
|
|
my $dllfile = $_;
|
|
$dllfile =~ s/( +)(.*)(\.dll)(.*)/DLLFILE $2/;
|
|
if (index($dllfile, "DLLFILE") >= 0) {
|
|
$currentdll = substr($dllfile, 8);
|
|
$currentdll =~ s/^\s+|s+$//g;
|
|
}
|
|
# filter imports from our own library
|
|
if ("$currentdll" !~ /^libcrypto-[1-9][0-9]*(-x64)?$/) {
|
|
my $line = $_;
|
|
$line =~ s/ [0-9a-fA-F]{1,2} /SYMBOL /;
|
|
if (index($line, "SYMBOL") != -1) {
|
|
$line =~ s/.*SYMBOL //;
|
|
push(@symlist, $line);
|
|
}
|
|
}
|
|
}
|
|
|
|
close($OBJFH);
|
|
($? >> 8 == 0) or die "Command '$cmd' has failed.";
|
|
|
|
my $ok = 1;
|
|
foreach (@symlist) {
|
|
chomp;
|
|
if (index($exps, $_) < 0) {
|
|
print "Symbol $_ not in the allowed platform symbols list\n";
|
|
$ok = 0;
|
|
}
|
|
}
|
|
exit !$ok;
|
|
}
|
|
else {
|
|
$cmd = "objdump -t " . $objfilelist . " | awk " .
|
|
"'/\\\\*UND\\\\*/ {" .
|
|
"split(\$NF, sym_lib, \"@\");" .
|
|
"if (sym_lib[2] !~ \"OPENSSL_[1-9][0-9]*\\\\.[0-9]+\\\\.[0-9]+\$\")" .
|
|
"syms[sym_lib[1]] = 1;" .
|
|
"}" .
|
|
"END { for (s in syms) print s; };'";
|
|
|
|
open $expsyms, '<', $expectedsyms or die;
|
|
{
|
|
local $/;
|
|
$exps=<$expsyms>;
|
|
}
|
|
close($expsyms);
|
|
|
|
open($OBJFH, "$cmd|") or die "Cannot open process: $!";
|
|
my $ok = 1;
|
|
while (<$OBJFH>)
|
|
{
|
|
chomp;
|
|
if (index($exps, $_) < 0) {
|
|
print "Symbol $_ not in the allowed platform symbols list\n";
|
|
$ok = 0;
|
|
}
|
|
}
|
|
close($OBJFH);
|
|
|
|
exit !(!($? >> 8) || !$ok);
|
|
}
|