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;