diff --git a/src/liboggz/dirac.c b/src/liboggz/dirac.c
index 7392c4e573dec383eb3c141a0db8de9c7ccb878a..9e412e21cdc10a56ab39edeec8a3fa33fa9973ed 100644
--- a/src/liboggz/dirac.c
+++ b/src/liboggz/dirac.c
@@ -119,9 +119,18 @@ dirac_parse_info (dirac_info *info, unsigned char * data, long len)
     ogg_uint32_t fps_numerator, fps_denominator;
   } dirac_frate_tbl[] = { /* table 10.3 */
     {1,1}, /* this first value is never used */
-    {24000,1001}, {24,1}, {25,1}, {30000,1001}, {30,1},
-    {50,1}, {60000,1001}, {60,1}, {15000,1001}, {25,2}
+    {24000,1001},
+    {24,1},
+    {25,1},
+    {30000,1001},
+    {30,1},
+    {50,1},
+    {60000,1001},
+    {60,1},
+    {15000,1001},
+    {25,2}
   };
+#define DIRAC_FRATE_TBL_LEN (sizeof(dirac_fsize_tbl) / sizeof(dirac_fsize_tbl[0]))
 
   static const ogg_uint32_t dirac_vidfmt_frate[] = { /* table C.1 */
     1, 9, 10, 9, 10, 9, 10, 4, 3, 7, 6, 4, 3, 7, 6, 2, 2, 7, 6, 7, 6
@@ -152,7 +161,7 @@ dirac_parse_info (dirac_info *info, unsigned char * data, long len)
   info->level = dirac_uint( &bs ); /* level */
   info->video_format = video_format = dirac_uint( &bs ); /* index */
 
-  if (video_format >= (sizeof(dirac_fsize_tbl) / sizeof(dirac_fsize_tbl[0]))) {
+  if (video_format >= DIRAC_FRATE_TBL_LEN) {
     return -1; 
   }
 
@@ -184,6 +193,11 @@ dirac_parse_info (dirac_info *info, unsigned char * data, long len)
   info->fps_denominator = dirac_frate_tbl[dirac_vidfmt_frate[video_format]].fps_denominator;
   if (dirac_bool( &bs )) {
     ogg_uint32_t frame_rate_index = dirac_uint( &bs );
+
+    if (frame_rate_index >= DIRAC_FRATE_TBL_LEN) {
+      return -1;
+    }
+
     info->fps_numerator = dirac_frate_tbl[frame_rate_index].fps_numerator;
     info->fps_denominator = dirac_frate_tbl[frame_rate_index].fps_denominator;
     if (frame_rate_index == 0) {