Message ID | CAB0OVGpgLNK+A4mHWvZiAKVGhb1tGMAtznnJV_hnTKZUw0OEWQ@mail.gmail.com |
---|---|
State | Superseded |
Headers | show |
On 2/14/2019 5:59 PM, Carl Eugen Hoyos wrote: > 2019-02-12 12:58 GMT+01:00, Carl Eugen Hoyos <ceffmpeg@gmail.com>: >> Hi! >> >> The output of truehd_core is currently undeterministic, the last bytes >> are uninitialized, valgrind protests if less than 8 bytes are >> initialized. >> I believe attached patch is simpler than calculating the necessary >> write size at the bottom of the function. > New patch attached. > > Please comment, Carl Eugen > > > 0001-lavc-truehd_core-Initialize-the-last-bytes-of-the-ou.patch > > From f3e4231af54b7a7664e1a2224cc1223be683f93c Mon Sep 17 00:00:00 2001 > From: Carl Eugen Hoyos <ceffmpeg@gmail.com> > Date: Thu, 14 Feb 2019 21:57:48 +0100 > Subject: [PATCH] lavc/truehd_core: Initialize the last bytes of the output > buffer. > > Avoids undeterministic output. > --- > libavcodec/truehd_core_bsf.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/libavcodec/truehd_core_bsf.c b/libavcodec/truehd_core_bsf.c > index be021af..4760872 100644 > --- a/libavcodec/truehd_core_bsf.c > +++ b/libavcodec/truehd_core_bsf.c > @@ -117,6 +117,8 @@ static int truehd_core_filter(AVBSFContext *ctx, AVPacket *out) > out->size -= reduce * 2; > parity_nibble ^= out->size / 2; > > + if (out_size > 8) > + AV_ZERO64(out->data + out_size - 8); AV_ZERO# may use mmx instructions. It should be safe if no float ops are going to be used after it, otherwise an emms_c() will be needed and the performance hit may remove any gain you get from not using memset(). An x86_32 build compiled with -mmmx or an -march value that enables mmx should be enough to test it. > if (have_header) { > memcpy(out->data + 4, in->data + 4, 28); > out->data[16 + 4] = (out->data[16 + 4] & 0x0f) | (FFMIN(s->hdr.num_substreams, 3) << 4); > -- 1.7.10.4 > > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > http://ffmpeg.org/mailman/listinfo/ffmpeg-devel >
From f3e4231af54b7a7664e1a2224cc1223be683f93c Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos <ceffmpeg@gmail.com> Date: Thu, 14 Feb 2019 21:57:48 +0100 Subject: [PATCH] lavc/truehd_core: Initialize the last bytes of the output buffer. Avoids undeterministic output. --- libavcodec/truehd_core_bsf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libavcodec/truehd_core_bsf.c b/libavcodec/truehd_core_bsf.c index be021af..4760872 100644 --- a/libavcodec/truehd_core_bsf.c +++ b/libavcodec/truehd_core_bsf.c @@ -117,6 +117,8 @@ static int truehd_core_filter(AVBSFContext *ctx, AVPacket *out) out->size -= reduce * 2; parity_nibble ^= out->size / 2; + if (out_size > 8) + AV_ZERO64(out->data + out_size - 8); if (have_header) { memcpy(out->data + 4, in->data + 4, 28); out->data[16 + 4] = (out->data[16 + 4] & 0x0f) | (FFMIN(s->hdr.num_substreams, 3) << 4); -- 1.7.10.4