diff --git a/src/backend/replication/logical/conflict.c b/src/backend/replication/logical/conflict.c
index 5d9ff626bd..dabe278b72 100644
--- a/src/backend/replication/logical/conflict.c
+++ b/src/backend/replication/logical/conflict.c
@@ -201,6 +201,7 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo,
 	StringInfoData err_detail;
 	char	   *val_desc;
 	char	   *origin_name;
+	int			errd;
 
 	initStringInfo(&err_detail);
 
@@ -289,9 +290,15 @@ errdetail_apply_conflict(EState *estate, ResultRelInfo *relinfo,
 	 * replica identity columns after the message.
 	 */
 	if (val_desc)
+	{
 		appendStringInfo(&err_detail, "\n%s", val_desc);
+		pfree(val_desc);
+	}
+
+	errd = errdetail_internal("%s", err_detail.data);
+	pfree(err_detail.data);
 
-	return errdetail_internal("%s", err_detail.data);
+	return errd;
 }
 
 /*
