Add string_view local variables to avoid repetition. Introduce a named variable instead of instantiating the same temporary in multiple places. PiperOrigin-RevId: 443129683
diff --git a/quiche/common/balsa/balsa_frame.cc b/quiche/common/balsa/balsa_frame.cc index 67a8c24..7eecb7a 100644 --- a/quiche/common/balsa/balsa_frame.cc +++ b/quiche/common/balsa/balsa_frame.cc
@@ -248,40 +248,28 @@ HandleWarning(last_error_); } + const absl::string_view line_input( + begin + headers_->non_whitespace_1_idx_, + headers_->whitespace_4_idx_ - headers_->non_whitespace_1_idx_); + const absl::string_view part1( + begin + headers_->non_whitespace_1_idx_, + headers_->whitespace_2_idx_ - headers_->non_whitespace_1_idx_); + const absl::string_view part2( + begin + headers_->non_whitespace_2_idx_, + headers_->whitespace_3_idx_ - headers_->non_whitespace_2_idx_); + const absl::string_view part3( + begin + headers_->non_whitespace_3_idx_, + headers_->whitespace_4_idx_ - headers_->non_whitespace_3_idx_); + if (is_request_) { - size_t version_length = - headers_->whitespace_4_idx_ - headers_->non_whitespace_3_idx_; - visitor_->OnRequestFirstLineInput( - absl::string_view( - begin + headers_->non_whitespace_1_idx_, - headers_->whitespace_4_idx_ - headers_->non_whitespace_1_idx_), - absl::string_view( - begin + headers_->non_whitespace_1_idx_, - headers_->whitespace_2_idx_ - headers_->non_whitespace_1_idx_), - absl::string_view( - begin + headers_->non_whitespace_2_idx_, - headers_->whitespace_3_idx_ - headers_->non_whitespace_2_idx_), - absl::string_view(begin + headers_->non_whitespace_3_idx_, - version_length)); - if (version_length == 0) { + visitor_->OnRequestFirstLineInput(line_input, part1, part2, part3); + if (part3.empty()) { parse_state_ = BalsaFrameEnums::MESSAGE_FULLY_READ; } return; } - visitor_->OnResponseFirstLineInput( - absl::string_view( - begin + headers_->non_whitespace_1_idx_, - headers_->whitespace_4_idx_ - headers_->non_whitespace_1_idx_), - absl::string_view( - begin + headers_->non_whitespace_1_idx_, - headers_->whitespace_2_idx_ - headers_->non_whitespace_1_idx_), - absl::string_view( - begin + headers_->non_whitespace_2_idx_, - headers_->whitespace_3_idx_ - headers_->non_whitespace_2_idx_), - absl::string_view( - begin + headers_->non_whitespace_3_idx_, - headers_->whitespace_4_idx_ - headers_->non_whitespace_3_idx_)); + visitor_->OnResponseFirstLineInput(line_input, part1, part2, part3); } // 'stream_begin' points to the first character of the headers buffer. @@ -515,18 +503,16 @@ void BalsaFrame::ProcessTransferEncodingLine(HeaderLines::size_type line_idx) { const HeaderLineDescription& header_line = headers_->header_lines_[line_idx]; const char* stream_begin = headers_->OriginalHeaderStreamBegin(); - const char* line_end = stream_begin + header_line.last_char_idx; - const char* value_begin = stream_begin + header_line.value_begin_idx; - size_t value_length = line_end - value_begin; + const absl::string_view transfer_encoding( + stream_begin + header_line.value_begin_idx, + header_line.last_char_idx - header_line.value_begin_idx); - if (absl::EqualsIgnoreCase(absl::string_view(value_begin, value_length), - kChunked)) { + if (absl::EqualsIgnoreCase(transfer_encoding, kChunked)) { headers_->transfer_encoding_is_chunked_ = true; return; } - if (absl::EqualsIgnoreCase(absl::string_view(value_begin, value_length), - kIdentity)) { + if (absl::EqualsIgnoreCase(transfer_encoding, kIdentity)) { headers_->transfer_encoding_is_chunked_ = false; return; } @@ -597,11 +583,9 @@ const HeaderLines::size_type lines_size = headers->header_lines_.size(); for (HeaderLines::size_type i = 0; i < lines_size; ++i) { const HeaderLineDescription& line = headers->header_lines_[i]; - const char* key_begin = stream_begin + line.first_char_idx; - const size_t key_len = line.key_end_idx - line.first_char_idx; - const char c = key_len != 0u ? *key_begin : ' '; - DVLOG(2) << "[" << i << "]: " << std::string(key_begin, key_len) << " c: '" - << c << "' key_len: " << key_len; + const absl::string_view key(stream_begin + line.first_char_idx, + line.key_end_idx - line.first_char_idx); + DVLOG(2) << "[" << i << "]: " << key << " key_len: " << key.length(); // If a header begins with either lowercase or uppercase 'c' or 't', then // the header may be one of content-length, connection, content-encoding @@ -609,8 +593,7 @@ // that the message is framed, and so the framer is required to search // for them. However, first check for a formatting error, and skip // special header treatment on trailer lines (when is_trailer is true). - - if (c == ' ') { + if (key.empty() || key[0] == ' ') { parse_state_ = BalsaFrameEnums::ERROR; HandleError(is_trailer ? BalsaFrameEnums::INVALID_TRAILER_FORMAT : BalsaFrameEnums::INVALID_HEADER_FORMAT); @@ -619,8 +602,7 @@ if (is_trailer) { continue; } - if (absl::EqualsIgnoreCase(absl::string_view(key_begin, key_len), - kContentLength)) { + if (absl::EqualsIgnoreCase(key, kContentLength)) { size_t length = 0; BalsaHeadersEnums::ContentLengthStatus content_length_status = ProcessContentLengthLine(i, &length); @@ -641,8 +623,7 @@ } continue; } - if (absl::EqualsIgnoreCase(absl::string_view(key_begin, key_len), - kTransferEncoding)) { + if (absl::EqualsIgnoreCase(key, kTransferEncoding)) { if (transfer_encoding_idx != 0) { HandleError(BalsaFrameEnums::MULTIPLE_TRANSFER_ENCODING_KEYS); return; @@ -719,7 +700,7 @@ // everything until the connection is closed is body. case BalsaHeadersEnums::NO_CONTENT_LENGTH: if (is_request_) { - absl::string_view method = headers_->request_method(); + const absl::string_view method = headers_->request_method(); // POSTs and PUTs should have a detectable body length. If they // do not we consider it an error. if (method != "POST" && method != "PUT") {