diff --git a/inc/lektor/bufferfd.h b/inc/lektor/bufferfd.h
index ffc4aacd4cf2fc56693cb4bdf501d2840c82fa92..8e03dc79903a51e1391d250ff284290e1ecda014 100644
--- a/inc/lektor/bufferfd.h
+++ b/inc/lektor/bufferfd.h
@@ -42,7 +42,7 @@ ssize_t bufferfd_bytes(struct bufferfd *bf, size_t n, uint8_t *res);
 ssize_t bufferfd_byte(struct bufferfd *bf, uint8_t *res);
 
 /* Consume `n` bytes without returning them. */
-ssize_t bufferfd_skip(struct bufferfd *bf, size_t n);
+ssize_t bufferfd_skip(struct bufferfd *bf, const size_t n);
 
 /* Move the file cursor to the absolute position `pos` (0 is the beginning of
  * the file).
diff --git a/src/mkv/bufferfd.c b/src/mkv/bufferfd.c
index f41eefd501c3a9ad9f5b504e003a8359a6032849..3de8ac4eee492bdc2ebc81b5aea142969e4639f1 100644
--- a/src/mkv/bufferfd.c
+++ b/src/mkv/bufferfd.c
@@ -5,8 +5,8 @@
 
 #include <lektor/bufferfd.h>
 
-static ssize_t
-bufferfd_fill(struct bufferfd *bf)
+static inline ssize_t
+__fill(struct bufferfd *bf)
 {
     if (bf->len <= bf->pos) {
         ssize_t n = read(bf->fd, bf->buffer, BUFFER_MAX);
@@ -24,8 +24,7 @@ bufferfd_fill(struct bufferfd *bf)
 ssize_t
 bufferfd_bytes(struct bufferfd *bf, size_t n, uint8_t *res)
 {
-    // TODO repeat until n is reached
-    ssize_t r = bufferfd_fill(bf);
+    ssize_t r = __fill(bf); /* TODO repeat until n is reached */
 
     if (r < (ssize_t) n)
         return -1;
@@ -41,14 +40,19 @@ bufferfd_byte(struct bufferfd *bf, uint8_t *res)
     return bufferfd_bytes(bf, 1, res);
 }
 
-ssize_t
-bufferfd_skip(struct bufferfd *bf, size_t n)
+static inline ssize_t
+__skip(struct bufferfd *bf, const size_t n, const size_t b_size)
 {
-    // TODO less dirty bomb
-    uint8_t b[4096];
+    uint8_t b[b_size];
     return bufferfd_bytes(bf, n, b);
 }
 
+ssize_t
+bufferfd_skip(struct bufferfd *bf, const size_t n)
+{
+    return __skip(bf, n, n > BUFFER_MAX ? BUFFER_MAX : n);
+}
+
 ssize_t
 bufferfd_seek(struct bufferfd *bf, size_t pos)
 {
diff --git a/src/mkv/mkv.c b/src/mkv/mkv.c
index fe1b6fff80086c99968c79fb866793a318fc5800..b7ff49c0fb408b2caa574381781bc1559318fa41 100644
--- a/src/mkv/mkv.c
+++ b/src/mkv/mkv.c
@@ -23,14 +23,14 @@
 #define EBML_MKV_TAGS        0x1254c367
 #define EBML_MKV_TAG         0x00007373
 #define EBML_MKV_TAG_TARGETS 0x000063c0
-#define EBML_MKV_TAG_TTV     0x000068ca   // TargetTypeValue
-#define EBML_MKV_TAG_SIMPLE  0x000067c8   // SimpleTag
+#define EBML_MKV_TAG_TTV     0x000068ca   /* TargetTypeValue */
+#define EBML_MKV_TAG_SIMPLE  0x000067c8   /* SimpleTag */
 #define EBML_MKV_TAG_NAME    0x000045a3
 #define EBML_MKV_TAG_STRING  0x00004487
 #define EBML_MKV_TAG_BINARY  0x00004485
 
-#define EBML_MKV_CRC32      0x0000000bf   // CRC-32, they skip it in mpv (demux/ebml.c:463 aprox)
-#define EBML_MKV_VOID       0x0000000ec   // VOID element
+#define EBML_MKV_CRC32      0x0000000bf   /* CRC-32, they skip it in mpv (demux/ebml.c:463 aprox) */
+#define EBML_MKV_VOID       0x0000000ec   /* VOID element */
 
 /* mkv_read_* functions take data from the bufferfd and parse the next "*" (one
  * of the following):