mirror of
https://github.com/yhirose/cpp-httplib.git
synced 2026-10-17 10:59:39 +00:00
Fix crash on empty X-Forwarded-For with trusted proxies configured
This commit is contained in:
1 parent
811dd0b6f2
commit
5c9285776e
2 files changed
+54
-1
No files matched your search
@@ -11888,6 +11888,11 @@ get_client_ip(const std::string &x_forwarded_for,
|
||||
ip_list.emplace_back(std::string(b + r.first, b + r.second));
|
||||
});
|
||||
|
||||
// A malformed X-Forwarded-For (empty, comma-only, whitespace-only) yields
|
||||
// no segments. Signal "no client IP derived" with an empty string so the
|
||||
// caller can fall back to the connection-level remote address.
|
||||
if (ip_list.empty()) { return std::string(); }
|
||||
|
||||
for (size_t i = 0; i < ip_list.size(); ++i) {
|
||||
auto ip = ip_list[i];
|
||||
|
||||
@@ -11978,7 +11983,8 @@ Server::process_request(Stream &strm, const std::string &remote_addr,
|
||||
|
||||
if (!trusted_proxies_.empty() && req.has_header("X-Forwarded-For")) {
|
||||
auto x_forwarded_for = req.get_header_value("X-Forwarded-For");
|
||||
req.remote_addr = get_client_ip(x_forwarded_for, trusted_proxies_);
|
||||
auto derived = get_client_ip(x_forwarded_for, trusted_proxies_);
|
||||
req.remote_addr = derived.empty() ? remote_addr : derived;
|
||||
} else {
|
||||
req.remote_addr = remote_addr;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user