Skip to content

Commit 66719ae

Browse files
authored
Merge pull request yhirose#283 from barryam3/noexcept
Remove use of exceptions.
2 parents b9539b8 + e1785d6 commit 66719ae

File tree

1 file changed

+30
-29
lines changed

1 file changed

+30
-29
lines changed

httplib.h

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1881,38 +1881,39 @@ inline bool parse_multipart_boundary(const std::string &content_type,
18811881
}
18821882

18831883
inline bool parse_range_header(const std::string &s, Ranges &ranges) {
1884-
try {
1885-
static auto re_first_range =
1886-
std::regex(R"(bytes=(\d*-\d*(?:,\s*\d*-\d*)*))");
1887-
std::smatch m;
1888-
if (std::regex_match(s, m, re_first_range)) {
1889-
auto pos = m.position(1);
1890-
auto len = m.length(1);
1891-
detail::split(
1892-
&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) {
1893-
static auto re_another_range = std::regex(R"(\s*(\d*)-(\d*))");
1894-
std::cmatch m;
1895-
if (std::regex_match(b, e, m, re_another_range)) {
1896-
ssize_t first = -1;
1897-
if (!m.str(1).empty()) {
1898-
first = static_cast<ssize_t>(std::stoll(m.str(1)));
1899-
}
1884+
static auto re_first_range =
1885+
std::regex(R"(bytes=(\d*-\d*(?:,\s*\d*-\d*)*))");
1886+
std::smatch m;
1887+
if (std::regex_match(s, m, re_first_range)) {
1888+
auto pos = m.position(1);
1889+
auto len = m.length(1);
1890+
bool all_valid_ranges = true;
1891+
detail::split(
1892+
&s[pos], &s[pos + len], ',', [&](const char *b, const char *e) {
1893+
if (!all_valid_ranges) return;
1894+
static auto re_another_range = std::regex(R"(\s*(\d*)-(\d*))");
1895+
std::cmatch m;
1896+
if (std::regex_match(b, e, m, re_another_range)) {
1897+
ssize_t first = -1;
1898+
if (!m.str(1).empty()) {
1899+
first = static_cast<ssize_t>(std::stoll(m.str(1)));
1900+
}
19001901

1901-
ssize_t last = -1;
1902-
if (!m.str(2).empty()) {
1903-
last = static_cast<ssize_t>(std::stoll(m.str(2)));
1904-
}
1902+
ssize_t last = -1;
1903+
if (!m.str(2).empty()) {
1904+
last = static_cast<ssize_t>(std::stoll(m.str(2)));
1905+
}
19051906

1906-
if (first != -1 && last != -1 && first > last) {
1907-
throw std::runtime_error("invalid range error");
1908-
}
1909-
ranges.emplace_back(std::make_pair(first, last));
1907+
if (first != -1 && last != -1 && first > last) {
1908+
all_valid_ranges = false;
1909+
return;
19101910
}
1911-
});
1912-
return true;
1913-
}
1914-
return false;
1915-
} catch (...) { return false; }
1911+
ranges.emplace_back(std::make_pair(first, last));
1912+
}
1913+
});
1914+
return all_valid_ranges;
1915+
}
1916+
return false;
19161917
}
19171918

19181919
class MultipartFormDataParser {

0 commit comments

Comments
 (0)