diff --git a/src/core/ext/transport/chttp2/transport/hpack_parser.cc b/src/core/ext/transport/chttp2/transport/hpack_parser.cc index b28ce481628..ccd819d3bc7 100644 --- a/src/core/ext/transport/chttp2/transport/hpack_parser.cc +++ b/src/core/ext/transport/chttp2/transport/hpack_parser.cc @@ -1243,7 +1243,7 @@ class HPackParser::Parser { Slice HPackParser::String::Take(Extern) { if (auto* p = absl::get_if<Slice>(&value_)) { - return std::move(*p); + return p->Copy(); } if (auto* p = absl::get_if<absl::Span<const uint8_t>>(&value_)) { return Slice::FromCopiedBuffer(*p); diff --git a/src/core/lib/slice/slice.h b/src/core/lib/slice/slice.h index e9302d88885..6e315ed5fbd 100644 --- a/src/core/lib/slice/slice.h +++ b/src/core/lib/slice/slice.h @@ -302,6 +302,8 @@ class Slice : public slice_detail::BaseSlice, Slice Ref() const { return Slice(grpc_slice_ref_internal(c_slice())); } + Slice Copy() const { return Slice(grpc_slice_copy(c_slice())); } + static Slice FromRefcountAndBytes(grpc_slice_refcount* r, const uint8_t* begin, const uint8_t* end) { grpc_slice out;