diff --git a/src/core/lib/slice/slice.c b/src/core/lib/slice/slice.c
index 1cddf062cd435875f161b006b989f6eae42ca5ea..da5dc3e52afa2177764b0e5bd66f5afafe9e00cc 100644
--- a/src/core/lib/slice/slice.c
+++ b/src/core/lib/slice/slice.c
@@ -197,6 +197,7 @@ grpc_slice grpc_slice_new_with_len(void *p, size_t len,
 }
 
 grpc_slice grpc_slice_from_copied_buffer(const char *source, size_t length) {
+  if (length == 0) return grpc_empty_slice();
   grpc_slice slice = grpc_slice_malloc(length);
   memcpy(GRPC_SLICE_START_PTR(slice), source, length);
   return slice;