diff --git a/lib/c/labcomm_private.h b/lib/c/labcomm_private.h
index 00c9461468edb83465f886c9197680e1daf9725f..2d6777871ed1d377768e837c3418c1100690d685 100644
--- a/lib/c/labcomm_private.h
+++ b/lib/c/labcomm_private.h
@@ -346,11 +346,36 @@ static inline void labcomm_pack32(labcomm_writer_t *w, unsigned int data)
     w->write(w, labcomm_writer_continue, n);
   }
   switch (n) {
-    case 5: w->data[w->pos++] = tag; tag = 0;
-    case 4: w->data[w->pos++] = tmp[0] | tag; tag = 0;
-    case 3: w->data[w->pos++] = tmp[1] | tag; tag = 0;
-    case 2: w->data[w->pos++] = tmp[2] | tag; tag = 0;
-    case 1: w->data[w->pos++] = tmp[3] | tag;
+    case 5: { 
+      if (w->pos >= w->count) {					
+	w->write(w, labcomm_writer_continue);				
+      }
+      w->data[w->pos++] = tag; tag = 0;
+    }
+    case 4: { 
+      if (w->pos >= w->count) {					
+	w->write(w, labcomm_writer_continue);				
+      }
+      w->data[w->pos++] = tmp[0] | tag; tag = 0;
+    }
+    case 3: { 
+      if (w->pos >= w->count) {					
+	w->write(w, labcomm_writer_continue);				
+      }
+      w->data[w->pos++] = tmp[1] | tag; tag = 0;
+    }
+    case 2: { 
+      if (w->pos >= w->count) {					
+	w->write(w, labcomm_writer_continue);				
+      }
+      w->data[w->pos++] = tmp[2] | tag; tag = 0;
+    }
+    case 1: { 
+      if (w->pos >= w->count) {					
+	w->write(w, labcomm_writer_continue);				
+      }
+      w->data[w->pos++] = tmp[3] | tag;
+    }
   }
 }