diff --git a/libavcodec/bitstream.c b/libavcodec/bitstream.c
index aad5ffa2fbece01987badb5eb3ecf777d8b73c0a..506eb336a010b88ec9bfbbfdd74d5a122e3ef91b 100644
--- a/libavcodec/bitstream.c
+++ b/libavcodec/bitstream.c
@@ -157,6 +157,8 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes,
     VLC_TYPE (*table)[2];
 
     table_size = 1 << table_nb_bits;
+    if (table_nb_bits > 30)
+       return -1;
     table_index = alloc_table(vlc, table_size, flags & INIT_VLC_USE_NEW_STATIC);
     av_dlog(NULL, "new table index=%d size=%d\n", table_index, table_size);
     if (table_index < 0)