diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c
index a869e85..bd8db41 100644
--- a/src/backend/utils/adt/varlena.c
+++ b/src/backend/utils/adt/varlena.c
@@ -1034,7 +1034,8 @@ textoverlay_no_len(PG_FUNCTION_ARGS)
 static text *
 text_overlay(text *t1, text *t2, int sp, int sl)
 {
-	text	   *result;
+	text	   *result1;
+	text	   *result2;
 	text	   *s1;
 	text	   *s2;
 	int			sp_pl_sl;
@@ -1056,10 +1057,14 @@ text_overlay(text *t1, text *t2, int sp, int sl)
 
 	s1 = text_substring(PointerGetDatum(t1), 1, sp - 1, false);
 	s2 = text_substring(PointerGetDatum(t1), sp_pl_sl, -1, true);
-	result = text_catenate(s1, t2);
-	result = text_catenate(result, s2);
+	result1 = text_catenate(s1, t2);
+	result2 = text_catenate(result1, s2);
 
-	return result;
+	pfree(s1);
+	pfree(s2);
+	pfree(result1);
+
+	return result2;
 }
 
 /*
