From 29e7674e56bf2b829bba22def2760d034a76e788 Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Mon, 11 Mar 2024 13:53:05 +0000 Subject: Replace convertTo/stringify with non-throwing alternatives. Having these throw is terrible for ergonomics and there are loads of places where the exception was either silently ignored or not handled at all. Having a function which returns an optional and another that returns a default works a lot better imo. --- modules/encryption/enc_bcrypt.cpp | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) (limited to 'modules/encryption') diff --git a/modules/encryption/enc_bcrypt.cpp b/modules/encryption/enc_bcrypt.cpp index 7fd3864ac..0800b2d66 100644 --- a/modules/encryption/enc_bcrypt.cpp +++ b/modules/encryption/enc_bcrypt.cpp @@ -142,19 +142,15 @@ public: if (bcryptprovider.Compare(hash_value, req->GetPassword())) { unsigned long rounds = 0; - try - { - // Try to extract the rounds count to cher - pos = hash_value.find('$', 4); - if (pos == Anope::string::npos) - throw ConvertException("Malformed BCrypt hash?!"); - - rounds = convertTo(hash_value.substr(4, pos - 4)); - } - catch (const ConvertException &) - { + + // Try to extract the rounds count to check if we need to + // re-encrypt the password. + pos = hash_value.find('$', 4); + if (pos != Anope::string::npos) + rounds = Anope::Convert(hash_value.substr(4, pos - 4), 0); + + if (!rounds) Log(LOG_DEBUG) << "Unable to determine the rounds of a bcrypt hash: " << hash_value; - } // If we are NOT the first encryption module or the Bcrypt rounds // are different we want to re-encrypt the password with the primary -- cgit