diff options
author | Max Kellermann <max@duempel.org> | 2009-02-03 22:46:00 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-02-03 22:51:44 +0100 |
commit | 824d299eb13e2fc4d03f5c4974a9c4f6511fd284 (patch) | |
tree | 5d4668233bc1b7919f119718b2e66491c60ab8f8 /src | |
parent | f3b73b824f849f7c1280a59ddb67f5c3d187a5af (diff) | |
download | mpd-824d299eb13e2fc4d03f5c4974a9c4f6511fd284.tar.gz mpd-824d299eb13e2fc4d03f5c4974a9c4f6511fd284.tar.xz mpd-824d299eb13e2fc4d03f5c4974a9c4f6511fd284.zip |
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.
Diffstat (limited to 'src')
-rw-r--r-- | src/decoder/ffmpeg_plugin.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/src/decoder/ffmpeg_plugin.c b/src/decoder/ffmpeg_plugin.c index c48918067..aca02cb2a 100644 --- a/src/decoder/ffmpeg_plugin.c +++ b/src/decoder/ffmpeg_plugin.c @@ -264,7 +264,7 @@ ffmpeg_decode_internal(struct ffmpeg_context *ctx) AVPacket packet; struct audio_format audio_format; enum decoder_command cmd; - int current, total_time; + int total_time; total_time = 0; @@ -306,9 +306,10 @@ ffmpeg_decode_internal(struct ffmpeg_context *ctx) av_free_packet(&packet); 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); else decoder_command_finished(decoder); |