diff --git a/codebook.c b/codebook.c
index b920c01867e14e50e735ed4da576ac1789504c26..3381f738bac8c91e9666764f2ba237ab33b996fc 100644
--- a/codebook.c
+++ b/codebook.c
@@ -76,6 +76,7 @@ int vorbis_staticbook_unpack(oggpack_buffer *opb,static_codebook *s){
       for(i=0;i<s->entries;){
 	long num=oggpack_read(opb,_ilog(s->entries-i));
 	if(num==-1)goto _eofout;
+	if(length>32)goto _errout;
 	for(j=0;j<num && i<s->entries;j++,i++)
 	  s->lengthlist[i]=length;
 	length++;