ffmpeg: fixed seek integer overflow
The "current" variable is used for calculating the seek destination, and was declared as "int". With very long song files, the 32 bit integer can overflow. ffmpeg expects an int64_t, which is very unlikely to overflow. Switch to int64_t.
This commit is contained in:
parent
f3b73b824f
commit
824d299eb1
1
NEWS
1
NEWS
|
@ -39,6 +39,7 @@ ver 0.14.2 (2009/??/??)
|
||||||
- ffmpeg: added support for the tags comment, genre, year
|
- ffmpeg: added support for the tags comment, genre, year
|
||||||
- ffmpeg: don't warn of empty packet output
|
- ffmpeg: don't warn of empty packet output
|
||||||
- ffmpeg: check if the time stamp is valid
|
- ffmpeg: check if the time stamp is valid
|
||||||
|
- ffmpeg: fixed seek integer overflow
|
||||||
- wavpack: pass NULL if the .wvc file fails to open
|
- wavpack: pass NULL if the .wvc file fails to open
|
||||||
- mikmod: call MikMod_Exit() only in the finish() method
|
- mikmod: call MikMod_Exit() only in the finish() method
|
||||||
* audio outputs:
|
* audio outputs:
|
||||||
|
|
|
@ -264,7 +264,7 @@ ffmpeg_decode_internal(struct ffmpeg_context *ctx)
|
||||||
AVPacket packet;
|
AVPacket packet;
|
||||||
struct audio_format audio_format;
|
struct audio_format audio_format;
|
||||||
enum decoder_command cmd;
|
enum decoder_command cmd;
|
||||||
int current, total_time;
|
int total_time;
|
||||||
|
|
||||||
total_time = 0;
|
total_time = 0;
|
||||||
|
|
||||||
|
@ -306,9 +306,10 @@ ffmpeg_decode_internal(struct ffmpeg_context *ctx)
|
||||||
av_free_packet(&packet);
|
av_free_packet(&packet);
|
||||||
|
|
||||||
if (cmd == DECODE_COMMAND_SEEK) {
|
if (cmd == DECODE_COMMAND_SEEK) {
|
||||||
current = decoder_seek_where(decoder) * AV_TIME_BASE;
|
int64_t where =
|
||||||
|
decoder_seek_where(decoder) * AV_TIME_BASE;
|
||||||
|
|
||||||
if (av_seek_frame(format_context, -1, current, 0) < 0)
|
if (av_seek_frame(format_context, -1, where, 0) < 0)
|
||||||
decoder_seek_error(decoder);
|
decoder_seek_error(decoder);
|
||||||
else
|
else
|
||||||
decoder_command_finished(decoder);
|
decoder_command_finished(decoder);
|
||||||
|
|
Loading…
Reference in New Issue