diff --git a/libavutil/tx_template.c b/libavutil/tx_template.c
index 5e7159bd87bcb38d7be009053db66d95bb1cdb13..2c9682ffb7070f41afa1c595dec81fe54ce3c61d 100644
--- a/libavutil/tx_template.c
+++ b/libavutil/tx_template.c
@@ -965,15 +965,14 @@ static av_cold int TX_NAME(ff_tx_mdct_init)(AVTXContext *s,
             return ret;
     }
 
-    /* If we need to preshuffle just steal the map from the subcontext */
+    s->map = av_malloc((len >> 1)*sizeof(*s->map));
+    if (!s->map)
+        return AVERROR(ENOMEM);
+
+    /* If we need to preshuffle copy the map from the subcontext */
     if (s->sub[0].flags & FF_TX_PRESHUFFLE) {
-        s->map = s->sub[0].map;
-        s->sub[0].map = NULL;
+        memcpy(s->map, s->sub->map, (len >> 1)*sizeof(*s->map));
     } else {
-        s->map = av_malloc((len >> 1)*sizeof(*s->map));
-        if (!s->map)
-            return AVERROR(ENOMEM);
-
         for (int i = 0; i < len >> 1; i++)
             s->map[i] = i;
     }