diff --git a/src/lib/xdr.cc b/src/lib/xdr.cc
index 10d265f7ac33fcbdec935537ded8dba28efa6336..b44471f07f59d81d4507572f64ad850c185cc80c 100644
--- a/src/lib/xdr.cc
+++ b/src/lib/xdr.cc
@@ -83,7 +83,7 @@ void XDRWriter::put(char const *data)
 	{
 		*buffer++ = 0;
 	}
-	pos += i;
+	pos += i - 1;
 }
 
 template <uint32_t TSize>
@@ -102,7 +102,7 @@ void XDRWriter::put(char const (&data)[TSize])
 	{
 		*buffer++ = 0;
 	}
-	pos += i;
+	pos += i - 1;
 }
 
 uint32_t XDRReader::get_uint32()
diff --git a/src/lib/xdr16.cc b/src/lib/xdr16.cc
index a9442bb3600f4a7943a465327504e8b54db5bc21..b1fb7ca6d074b5ea1d7f80960acbca63ce2625cb 100644
--- a/src/lib/xdr16.cc
+++ b/src/lib/xdr16.cc
@@ -97,7 +97,7 @@ void XDRWriter::put(char const *data)
 	{
 		*buffer++ = 0;
 	}
-	pos += i;
+	pos += i - 1;
 }
 
 template <uint16_t TSize>
@@ -116,7 +116,7 @@ void XDRWriter::put(char const (&data)[TSize])
 	{
 		*buffer++ = 0;
 	}
-	pos += i;
+	pos += i - 1;
 }
 
 uint16_t XDRReader::get_uint16()