aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-04-03 13:07:43 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2021-04-03 16:46:43 +0200
commitedbc26e38b1cb0d53a355ed49a92f58335e0eff9 (patch)
tree11d3026c34dae376ec0f5389d6e0a87281b760b5
parent8bc3cdf00722834ae73f48dd6a29af3cec71bf9b (diff)
downloadffmpeg-edbc26e38b1cb0d53a355ed49a92f58335e0eff9.tar.gz
avcodec/a64multienc: Don't use static buffers, fix potential races
render_charset() used static buffers that are always completely initialized before every use, so that it is unnecessary for the values in these arrays to be kept after leaving the function. Given that this is not only unnecessary, but harmful due to the possibility of data races if several instances of a64multi/a64multi5 run simultaneously these buffers have been replaced by ordinary buffers on the stack (they are small enough for this). Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com> (cherry picked from commit 0ca09335aa47fee181c36187143403811b5452f6)
-rw-r--r--libavcodec/a64multienc.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/libavcodec/a64multienc.c b/libavcodec/a64multienc.c
index 55616c8524..91c89c87eb 100644
--- a/libavcodec/a64multienc.c
+++ b/libavcodec/a64multienc.c
@@ -107,13 +107,16 @@ static void render_charset(AVCodecContext *avctx, uint8_t *charset,
uint8_t pix;
int lowdiff, highdiff;
int *best_cb = c->mc_best_cb;
- static uint8_t index1[256];
- static uint8_t index2[256];
- static uint8_t dither[256];
+ uint8_t index1[256];
+ uint8_t index2[256];
+ uint8_t dither[256];
int i;
int distance;
- /* generate lookup-tables for dither and index before looping */
+ /* Generate lookup-tables for dither and index before looping.
+ * This code relies on c->mc_luma_vals[c->mc_pal_size - 1] being
+ * the maximum of all the mc_luma_vals values and on the minimum
+ * being zero; this ensures that dither is properly initialized. */
i = 0;
for (a=0; a < 256; a++) {
if(i < c->mc_pal_size -1 && a == c->mc_luma_vals[i + 1]) {