diff --git a/passphrase_cache.cc b/passphrase_cache.cc index 6b372bf..7fbe209 100644 --- a/passphrase_cache.cc +++ b/passphrase_cache.cc @@ -14,6 +14,9 @@ namespace pEp { std::lock_guard lock(_mtx); cleanup(); + if (callee("")) + return true; + for (auto entry=_cache.begin(); entry!=_cache.end(); ++entry) { if (callee(entry->passphrase)) { refresh(entry); diff --git a/passphrase_cache.hh b/passphrase_cache.hh index 5d328c1..a85940a 100644 --- a/passphrase_cache.hh +++ b/passphrase_cache.hh @@ -35,6 +35,7 @@ namespace pEp { // for each passphrase call the callee until it returns true for a // matching passphrase or no passphrases are left + // always tests empty passphrase first // returns true if a passphrase was matching, false otherwise using passphrase_callee = std::function; bool for_each_passphrase(const passphrase_callee& callee); diff --git a/test/test_passphrase_cache.cc b/test/test_passphrase_cache.cc index 22df2b5..16ca78f 100644 --- a/test/test_passphrase_cache.cc +++ b/test/test_passphrase_cache.cc @@ -12,18 +12,18 @@ int main() cache.add("world"); std::cout << "expected: two passphrases\n"; - cache.for_each_passphrase([&](std::string passphrase){std::cout << passphrase << "\n"; return false;}); + cache.for_each_passphrase([&](std::string passphrase){std::cout << "'" << passphrase << "'\n"; return false;}); std::cout << "expected: one passphrase\n"; - cache.for_each_passphrase([&](std::string passphrase){std::cout << passphrase << "\n"; return true;}); + cache.for_each_passphrase([&](std::string passphrase){std::cout << "'" << passphrase << "'\n"; return passphrase != "";}); std::cout << "expected: two passphrases but reverse order\n"; - cache.for_each_passphrase([&](std::string passphrase){std::cout << passphrase << "\n"; return false;}); + cache.for_each_passphrase([&](std::string passphrase){std::cout << "'" << passphrase << "'\n"; return false;}); sleep(2); std::cout << "expected: no passphrase\n"; - cache.for_each_passphrase([&](std::string passphrase){std::cout << passphrase << "\n"; return false;}); + cache.for_each_passphrase([&](std::string passphrase){std::cout << "'" << passphrase << "'\n"; return false;}); return 0; }