| From: Andrew Cagney <[email protected]>
| On Tue, 4 May 2021 at 01:15, D. Hugh Redelmeier <[email protected]> wrote:
|
| > I'm suspicious about the case where both calls to try_all_keys return
| > true. I'll call this "double stop".
I should have called this double not-stop.
| /*
| * Try all keys from PUBKEY_DB.
| *
| * Return true when searching should stop (not when it succeeded);
| * return false when searching can continue.
| *
| * Returns FATAL_DIAG KEY tried_cnt
| * false can try again
| * true <valid> <valid> N/A fatal error caused by KEY
| * true NULL NULL 0 no key found
| * true NULL NULL >0 no key worked
| * true NULL <valid> N/A KEY worked
| */
This table says that nothing else is meaningful when false is
returned.
| FATAIL_DIAG => KEY
According to the table, only if true is returned.
returns && FATAL_DIAG => KEY
Nothing tests the return value of the second call.
Something is wrong. Perhaps the table.
================
bool stop = try_all_keys("peer", ike->sa.st_remote_certs.pubkey_db, &s);
if (!stop) {
stop = try_all_keys("preloaded", pluto_pubkeys, &s);
}
Would be simpler as
if (!try_all_keys("peer", ike->sa.st_remote_certs.pubkey_db, &s) {
(void) try_all_keys("preloaded", pluto_pubkeys, &s);
}
No variable "stop". No dangling possibility that "stop" will be used
later. No re-assignment. No suggestion that the return value of the
second call might actually be used.
_______________________________________________
Swan-dev mailing list
[email protected]
https://lists.libreswan.org/mailman/listinfo/swan-dev