ogg_get_file_info(): Fix off-by-one.
authorAndre Noll <maan@systemlinux.org>
Sun, 29 May 2011 11:53:32 +0000 (13:53 +0200)
committerAndre Noll <maan@systemlinux.org>
Sun, 29 May 2011 11:53:32 +0000 (13:53 +0200)
The timing information encoded in the chunk table was not always
sufficient to guarantee no buffer underruns since vorbis frames
are frequently spread over two (or more) ogg pages. This should
fix it.

ogg_afh_common.c

index cb59d36..564b0be 100644 (file)
@@ -170,7 +170,7 @@ int ogg_get_file_info(char *map, size_t numbytes, struct afh_info *afhi,
        for (j = 1; ogg_sync_pageseek(&oss, &op) > 0; /* nothing */) {
                int granule = ogg_page_granulepos(&op);
 
-               while (granule > j * frames_per_chunk) {
+               while (granule >= (j + 1) * frames_per_chunk) {
                        j++;
                        if (j >= ct_size) {
                                ct_size *= 2;