diff --git a/src/fov/fov.c b/src/fov/fov.c
index d0010f952b7e8691d36ecf2b527673eef5bef7fa..833ef528b9d515ff9cdcff38803fb6044763690b 100644
--- a/src/fov/fov.c
+++ b/src/fov/fov.c
@@ -577,9 +577,14 @@ FOV_DEFINE_OCTANT(-,-,y,x,m,m,y)
 */
 #define GET_BUFFER(target, buffer_data, len)                                                      \
     /* hurray, no branching, modulus, or malloc! */                                               \
+    {                                                                                             \
+    int overrun = (buffer_data->index + buffer_data->prev_len + len) & (FOV_BUFFER_SIZE - 1);     \
     buffer_data->index = (buffer_data->index + buffer_data->prev_len) & (FOV_BUFFER_SIZE - 1);    \
+    if (overrun < buffer_data->index)                                                             \
+        buffer_data->index = 0;                                                                   \
     buffer_data->prev_len = len;                                                                  \
-    target = buffer_data->buffer + buffer_data->index;
+    target = buffer_data->buffer + buffer_data->index;                                            \
+    }
 
 /* Conveniences for code clarity */
 #define X 0