diff --git a/include/jwt-cpp/jwt.h b/include/jwt-cpp/jwt.h index 5dcd2d23..80eabacb 100644 --- a/include/jwt-cpp/jwt.h +++ b/include/jwt-cpp/jwt.h @@ -722,13 +722,23 @@ namespace jwt { if (key.substr(0, 27) == "-----BEGIN CERTIFICATE-----") { auto epkey = helper::extract_pubkey_from_cert(key, password, ec); if (ec) return {}; - const int len = static_cast(epkey.size()); + // Ensure the size fits into an int before casting + if (epkey.size() > static_cast((std::numeric_limits::max)())) { + ec = error_category::load_key_bio_write; // Add an appropriate error here + return {}; + } + int len = static_cast(epkey.size()); if (BIO_write(pubkey_bio.get(), epkey.data(), len) != len) { ec = error_category::load_key_bio_write; return {}; } } else { - const int len = static_cast(key.size()); + // Ensure the size fits into an int before casting + if (key.size() > static_cast((std::numeric_limits::max)())) { + ec = error_category::load_key_bio_write; // Add an appropriate error here + return {}; + } + int len = static_cast(key.size()); if (BIO_write(pubkey_bio.get(), key.data(), len) != len) { ec = error_category::load_key_bio_write; return {};