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 cb59d36383a104836bbff4ef59f233f464ae4743..564b0becd6404400b0457c1a14835e39833fa11a 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;