From 6352e75910f33273a04ce9b2c104af161e64a96f Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 12 Mar 2009 19:49:15 +0100 Subject: crossfade: copy chunk.audio_format in !NDEBUG When the destination chunk was empty in cross_fade_apply(), it had no audio_format attached (an attribute which is only used for assertion in the debug build). cross_fade_apply() should assign it the audio_format of the second chunk (if available), otherwise MPD will crash. --- src/crossfade.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/crossfade.c') diff --git a/src/crossfade.c b/src/crossfade.c index 2bac4a649..8d752cf5f 100644 --- a/src/crossfade.c +++ b/src/crossfade.c @@ -58,6 +58,10 @@ void cross_fade_apply(struct music_chunk *a, const struct music_chunk *b, { size_t size; + assert(a != NULL); + assert(b != NULL); + assert(a->length == 0 || b->length == 0 || + audio_format_equals(&a->audio_format, b->audio_format)); assert(current_chunk <= num_chunks); if (a->tag == NULL && b->tag != NULL) @@ -79,6 +83,12 @@ void cross_fade_apply(struct music_chunk *a, const struct music_chunk *b, there is unmixed rest at the end. Copy it over. The output buffer API guarantees that there is enough room in a->data. */ + +#ifndef NDEBUG + if (a->length == 0) + a->audio_format = b->audio_format; +#endif + memcpy(a->data + a->length, b->data + a->length, b->length - a->length); -- cgit v1.2.3