diff --git a/httplib.h b/httplib.h index 74ae478..130d200 100644 --- a/httplib.h +++ b/httplib.h @@ -5440,17 +5440,30 @@ inline bool parse_accept_header(const std::string &s, return; } - try { - accept_entry.quality = std::stod(quality_str); - // Check if quality is in valid range [0.0, 1.0] - if (accept_entry.quality < 0.0 || accept_entry.quality > 1.0) { +#ifdef CPPHTTPLIB_NO_EXCEPTIONS + { + std::istringstream iss(quality_str); + iss >> accept_entry.quality; + + // Check if conversion was successful and entire string was consumed + if (iss.fail() || !iss.eof()) { has_invalid_entry = true; return; } + } +#else + try { + accept_entry.quality = std::stod(quality_str); } catch (...) { has_invalid_entry = true; return; } +#endif + // Check if quality is in valid range [0.0, 1.0] + if (accept_entry.quality < 0.0 || accept_entry.quality > 1.0) { + has_invalid_entry = true; + return; + } } else { // No quality parameter, use entire entry as media type accept_entry.media_type = entry;