No public description PiperOrigin-RevId: 676868509
diff --git a/quiche/quic/moqt/moqt_parser.cc b/quiche/quic/moqt/moqt_parser.cc index 0ae2720..923013d 100644 --- a/quiche/quic/moqt/moqt_parser.cc +++ b/quiche/quic/moqt/moqt_parser.cc
@@ -845,14 +845,19 @@ while (!buffered_message_.empty() && !data.empty()) { absl::string_view chunk = data.substr(0, chunk_size_); absl::StrAppend(&buffered_message_, chunk); - data.remove_prefix(chunk.size()); - - buffered_message_.assign( - ProcessDataInner(buffered_message_, fin && data.empty())); + absl::string_view unprocessed = + ProcessDataInner(buffered_message_, fin && data.size() == chunk.size()); + if (unprocessed.size() >= chunk.size()) { + // chunk didn't allow any processing at all. + data.remove_prefix(chunk.size()); + } else { + buffered_message_.clear(); + data.remove_prefix(chunk.size() - unprocessed.size()); + } } // Happy path: there is no buffered data. - if (buffered_message_.empty()) { + if (buffered_message_.empty() && !data.empty()) { buffered_message_.assign(ProcessDataInner(data, fin)); }