]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
res_stasis_playback: Prevent media_index from going out of bounds
authorSean Bright <sean.bright@gmail.com>
Tue, 28 Jan 2020 19:23:19 +0000 (14:23 -0500)
committerSean Bright <sean.bright@gmail.com>
Wed, 29 Jan 2020 13:15:41 +0000 (07:15 -0600)
Incrementing stasis_app_playback.media_index directly in our playback
loop means that when we reach the end of our playlist the index into
the vector will be outside of the bounds of the vector.

Instead use a temporary variable and only assign when we're sure that
we are in bounds.

ASTERISK-28713 #close
Reported by: Sébastien Duthil

Change-Id: Ib53f7f156097e0607eb5871d9d78d246ed274928

res/res_stasis_playback.c

index 4a7538237749e8543c19d28dac19e4b19205f8a1..7665d5f664dd98292ef7374d65a23d01d44d2343 100644 (file)
@@ -287,6 +287,7 @@ static void play_on_channel(struct stasis_app_playback *playback,
 {
        int res;
        long offsetms;
+       size_t index;
 
        /* Even though these local variables look fairly pointless, they avoid
         * having a bunch of NULL's passed directly into
@@ -305,7 +306,8 @@ static void play_on_channel(struct stasis_app_playback *playback,
 
        offsetms = playback->offsetms;
 
-       for (; playback->media_index < AST_VECTOR_SIZE(&playback->medias); playback->media_index++) {
+       for (index = 0; index < AST_VECTOR_SIZE(&playback->medias); index++) {
+               playback->media_index = index;
 
                /* Set the current media to play */
                ast_string_field_set(playback, media, AST_VECTOR_GET(&playback->medias, playback->media_index));