mp3_afh.c: Fix header_bitrate() for invalid headers
authorAndre Noll <maan@systemlinux.org>
Fri, 23 Mar 2007 17:42:45 +0000 (18:42 +0100)
committerAndre Noll <maan@systemlinux.org>
Fri, 23 Mar 2007 17:42:45 +0000 (18:42 +0100)
This was broken literally since day 1: If the layer or the bitrate
parameter of an (invalid) header is zero, the old code might cause
a segfault.

mp3_afh.c

index cf507ec2b371c187e18123b1cdc5e4be07f6547b..0c8efbdc5a7c59b84d0b64ada3e7b8c648c833d4 100644 (file)
--- a/mp3_afh.c
+++ b/mp3_afh.c
@@ -115,9 +115,10 @@ static const char *header_mode(struct mp3header *h)
                h->mode = 4; /* invalid */
        return mode_text[h->mode];
 }
                h->mode = 4; /* invalid */
        return mode_text[h->mode];
 }
+
 static int header_bitrate(struct mp3header *h)
 {
 static int header_bitrate(struct mp3header *h)
 {
-       if (h->layer > 3 || h->bitrate > 14)
+       if (!h->layer || h->layer > 3 || h->bitrate > 14 || !h->bitrate)
                return -E_HEADER_BITRATE;
        return mp3info_bitrate[h->version & 1][3 - h->layer][h->bitrate - 1];
 }
                return -E_HEADER_BITRATE;
        return mp3info_bitrate[h->version & 1][3 - h->layer][h->bitrate - 1];
 }