diff --git a/libavcodec/vorbis_enc.c b/libavcodec/vorbis_enc.c
index 7cbd57182527e1df924d0f00b0b05be91f742ab2..95f383ce9a01b0c922dff9197c3eb1661c138439 100644
--- a/libavcodec/vorbis_enc.c
+++ b/libavcodec/vorbis_enc.c
@@ -773,13 +773,14 @@ static void floor_encode(venc_context_t * venc, floor_t * fc, PutBitContext * pb
             put_bits(pb, book->entries[cval].len, book->entries[cval].codeword);
         }
         for (k = 0; k < c->dim; k++) {
-            codebook_t * book = &venc->codebooks[c->books[cval & (csub-1)]];
+            int book = c->books[cval & (csub-1)];
             int entry = coded[counter++];
             cval >>= c->subclass;
+            if (book == -1) continue;
             if (entry == -1) entry = 0;
-            assert(entry < book->nentries);
+            assert(entry < venc->codebooks[book].nentries);
             assert(entry >= 0);
-            put_bits(pb, book->entries[entry].len, book->entries[entry].codeword);
+            put_bits(pb, venc->codebooks[book].entries[entry].len, venc->codebooks[book].entries[entry].codeword);
         }
     }