Skip to content

Commit 6c55b2b

Browse files
author
romankoshelev
committed
cc userver: precompute headers tag size more accurately
commit_hash:bb28e31c71b0603ec76cb64a0c50c3c76ee0eb69
1 parent c66adb5 commit 6c55b2b

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

core/src/server/middlewares/handler_adapter.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ std::string GetHeadersLogString(
4040
) {
4141
constexpr std::string_view kTruncateSuffix = "...(truncated, total {} bytes)";
4242
constexpr size_t kMaxTruncateSuffixSize = kTruncateSuffix.size() + std::numeric_limits<size_t>::digits10;
43+
constexpr std::string_view kMask = "***";
4344

4445
// Sort to prevent flaky headers reordering, appearing and disappearing for different requests.
4546
using HeaderRef = utils::NotNull<const http::HttpRequest::HeadersMap::const_iterator::value_type*>;
@@ -50,8 +51,9 @@ std::string GetHeadersLogString(
5051
size_t max_result_size = 0;
5152

5253
for (const auto& header : request.GetHeaders()) {
53-
max_result_size += header.first.size() + header.second.size() + 3;
54-
sorted_headers.emplace_back(header, headers_whitelist.find(header.first) == headers_whitelist.end());
54+
const IsValueHidden header_hide = headers_whitelist.find(header.first) == headers_whitelist.end();
55+
max_result_size += header.first.size() + (header_hide ? kMask.size() : header.second.size()) + 3;
56+
sorted_headers.emplace_back(header, header_hide);
5557
}
5658
std::sort(sorted_headers.begin(), sorted_headers.end(), [](const auto& lhs, const auto& rhs) {
5759
return std::tie(lhs.second, *lhs.first) < std::tie(rhs.second, *rhs.first);
@@ -62,7 +64,7 @@ std::string GetHeadersLogString(
6264

6365
for (const auto& [header_ref, header_hide] : sorted_headers) {
6466
const auto& [header_name, header_value] = *header_ref;
65-
const auto& header_log_value = header_hide ? "***" : header_value;
67+
const std::string_view header_log_value = header_hide ? kMask : header_value;
6668
if (result.size() + header_name.size() + header_log_value.size() + 3 > response_data_size_log_limit) {
6769
result += fmt::format(kTruncateSuffix, max_result_size);
6870
break;

0 commit comments

Comments
 (0)