Skip to content

Commit

Permalink
http: removing whitespace when appending x-forwarded-for headers (#4671)
Browse files Browse the repository at this point in the history
Risk Level: Medium
Testing: updated unit tests
Docs Changes: nope
Release Notes: called out a warning in the release notes
Fixes: #3611

Signed-off-by: Alyssa Wilk <[email protected]>
  • Loading branch information
alyssawilk authored Oct 10, 2018
1 parent 798eeb5 commit e91ae86
Show file tree
Hide file tree
Showing 4 changed files with 6 additions and 8 deletions.
3 changes: 3 additions & 0 deletions docs/root/intro/version_history.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ Version history
===============
* admin: added support for displaying subject alternate names in :ref:`certs<operations_admin_interface_certs>` end point.
* fault: removed integer percentage support.
* http: no longer adding whitespace when appending X-Forwarded-For headers. **Warning**: this is not
compatible with 1.7.0 builds prior to `9d3a4eb4ac44be9f0651fcc7f87ad98c538b01ee <https://github.com/envoyproxy/envoy/pull/3610>`_.
See `#3611 <https://github.com/envoyproxy/envoy/issues/3611>`_ for details.
* router: added ability to configure arbitrary :ref:`retriable status codes. <envoy_api_field_route.RouteAction.RetryPolicy.retriable_status_codes>`
* router: added ability to set attempt count in upstream requests, see :ref:`virtual host's include request
attempt count flag <envoy_api_field_route.VirtualHost.include_request_attempt_count>`.
Expand Down
7 changes: 1 addition & 6 deletions source/common/http/utility.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,9 @@ void Utility::appendXff(HeaderMap& headers, const Network::Address::Instance& re
return;
}

// TODO(alyssawilk) move over to the append utility.
HeaderString& header = headers.insertForwardedFor().value();
if (!header.empty()) {
header.append(", ", 2);
}

const std::string& address_as_string = remote_address.ip()->addressAsString();
header.append(address_as_string.c_str(), address_as_string.size());
HeaderMapImpl::appendToHeader(header, address_as_string.c_str());
}

void Utility::appendVia(HeaderMap& headers, const std::string& via) {
Expand Down
2 changes: 1 addition & 1 deletion test/common/http/conn_manager_utility_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -532,7 +532,7 @@ TEST_F(ConnectionManagerUtilityTest, AppendInternalAddressXffNotInternalRequest)

EXPECT_EQ((MutateRequestRet{"10.0.0.1:0", false}),
callMutateRequestHeaders(headers, Protocol::Http2));
EXPECT_EQ("10.0.0.2, 10.0.0.1", headers.get_("x-forwarded-for"));
EXPECT_EQ("10.0.0.2,10.0.0.1", headers.get_("x-forwarded-for"));
}

// A request that is from an internal address and uses remote address should be an internal request.
Expand Down
2 changes: 1 addition & 1 deletion test/common/http/utility_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ TEST(HttpUtility, appendXff) {
TestHeaderMapImpl headers{{"x-forwarded-for", "10.0.0.1"}};
Network::Address::Ipv4Instance address("127.0.0.1");
Utility::appendXff(headers, address);
EXPECT_EQ("10.0.0.1, 127.0.0.1", headers.get_("x-forwarded-for"));
EXPECT_EQ("10.0.0.1,127.0.0.1", headers.get_("x-forwarded-for"));
}

{
Expand Down

0 comments on commit e91ae86

Please sign in to comment.