[FFmpeg-devel] [PATCH] avformat/tta: only check for header and seek table crc if requested
Michael Niedermayer
michaelni at gmx.at
Wed Feb 4 17:03:02 CET 2015
On Wed, Feb 04, 2015 at 02:01:16AM -0300, James Almer wrote:
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> I made it abort only if AV_EF_EXPLODE is also set like we do when decoding
> audio frames, but maybe aborting if the header or seek table are damaged
> should be the default behaviour. Chances are a file with a broken header is
> unplayable after all.
>
> Thoughts?
>
> libavformat/tta.c | 28 ++++++++++++++++++----------
> 1 file changed, 18 insertions(+), 10 deletions(-)
>
> diff --git a/libavformat/tta.c b/libavformat/tta.c
> index 5789e5b..45dfee9 100644
> --- a/libavformat/tta.c
> +++ b/libavformat/tta.c
> @@ -64,7 +64,8 @@ static int tta_read_header(AVFormatContext *s)
> start_offset = avio_tell(s->pb);
> if (start_offset < 0)
> return start_offset;
> - ffio_init_checksum(s->pb, tta_check_crc, UINT32_MAX);
> + if (s->error_recognition & AV_EF_CRCCHECK)
> + ffio_init_checksum(s->pb, tta_check_crc, UINT32_MAX);
> if (avio_rl32(s->pb) != AV_RL32("TTA1"))
> return AVERROR_INVALIDDATA;
>
> @@ -83,10 +84,13 @@ static int tta_read_header(AVFormatContext *s)
> return AVERROR_INVALIDDATA;
> }
>
> - crc = ffio_get_checksum(s->pb) ^ UINT32_MAX;
> - if (crc != avio_rl32(s->pb)) {
> - av_log(s, AV_LOG_ERROR, "Header CRC error\n");
> - return AVERROR_INVALIDDATA;
> + if (s->error_recognition & AV_EF_CRCCHECK) {
> + crc = ffio_get_checksum(s->pb) ^ UINT32_MAX;
> + if (crc != avio_rl32(s->pb)) {
> + av_log(s, AV_LOG_ERROR, "Header CRC error\n");
> + if (s->error_recognition & AV_EF_EXPLODE)
> + return AVERROR_INVALIDDATA;
> + }
> }
this code would skip avio_rl32() and affect the filepos after it
same for the later hunk
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
it is not once nor twice but times without number that the same ideas make
their appearance in the world. -- Aristotle
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150204/0dd5c00d/attachment.asc>
More information about the ffmpeg-devel
mailing list