summaryrefslogtreecommitdiffstats
path: root/apps/playback.c
diff options
context:
space:
mode:
authorMichael Sevakis <jethead71@rockbox.org>2014-06-20 04:54:18 -0400
committerMichael Sevakis <jethead71@rockbox.org>2014-06-20 04:54:18 -0400
commit221c4954324e78299cf27ca15fb8f78a24550e53 (patch)
tree3b53c57f8170b94c8701b71dc834093ec69ba8ba /apps/playback.c
parenta77c6b9d9693fe62a8625b3583f71b8415d7459b (diff)
downloadrockbox-221c4954324e78299cf27ca15fb8f78a24550e53.tar.gz
rockbox-221c4954324e78299cf27ca15fb8f78a24550e53.tar.bz2
rockbox-221c4954324e78299cf27ca15fb8f78a24550e53.zip
Fix a playback bug in shink_callback()
Invalid event data would be accessed if a play message isn't queued which will cause crash problems. It came about in the addition of time-based resume. Change-Id: I1d5219064e2bf552b4183e9db4e7b380ffbe7a67
Diffstat (limited to 'apps/playback.c')
-rw-r--r--apps/playback.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/apps/playback.c b/apps/playback.c
index eba90f9a0a..efc23306a0 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -842,9 +842,10 @@ static int shrink_callback(int handle, unsigned hints, void* start, size_t old_s
bool play_queued = queue_peek_ex(&audio_queue, &ev, QPEEK_REMOVE_EVENTS,
filter_list);
- if (playing && ev.data != (intptr_t)&resume)
+ if (playing && (elapsed > 0 || offset > 0))
{
- resume = *(struct audio_resume_info *)ev.data;
+ if (play_queued)
+ resume = *(struct audio_resume_info *)ev.data;
/* current id3->elapsed/offset are king */
if (elapsed > 0)