Even if $server_port isn't touched, it's still a number coming from
configuration. It's therefore not trustable as an indicator that the
ACCEPT line delivered a port number or an error indication.
$accept_msg is used instead to capture the port if there is one, and
be a better indicator of error.
Fixes #15557
Fixes #15571
Reviewed-by: David von Oheimb <david.von.oheimb@siemens.com>
(Merged from https://github.com/openssl/openssl/pull/15580)
my $pid = open($server_fh, "$cmd|") or die "Trying to $cmd";
print "Pid is: $pid\n";
if ($server_port == 0) {
+ # Clear it first
+ $server_port = undef;
+
# Find out the actual server port
while (<$server_fh>) {
print;
s/\R$//; # Better chomp
next unless (/^ACCEPT/);
- $server_port = $server_tls = $kur_port = $pbm_port = $1
- if m/^ACCEPT\s.*?:(\d+)$/;
+
+ # $1 may be undefined, which is OK to assign to $server_port,
+ # as that gets detected further down.
+ /^ACCEPT\s.*:(\d+)$/;
+ $server_port = $1;
+
last;
}
+
+ unless (defined $server_port) {
+ stop_mock_server($pid);
+ return 0;
+ }
}
- return $pid if $server_port =~ m/^(\d+)$/;
- stop_mock_server($pid);
- return 0;
+ $server_tls = $kur_port = $pbm_port = $server_port;
+ return $pid;
}
sub stop_mock_server {