diff --git a/csrc/codec.c b/csrc/codec.c
--- a/csrc/codec.c
+++ b/csrc/codec.c
@@ -84,13 +84,13 @@
     uint8_t *dst, size_t *dstlen,
     uint8_t const **rem, size_t *remlen)
 {
-    size_t od = *dstlen, i;
-
     assert(src || 0 == srclen);
     assert(dst);
     assert(dstlen);
     assert(rem);
     assert(remlen);
+
+    size_t od = *dstlen, i;
 
     for(i = 0, *dstlen = 0; i + 5 <= srclen && *dstlen + 8 <= od; i += 5, *dstlen += 8) {
         int32_t o0, o1, o2, o3, o4, o5, o6, o7;
diff --git a/sandi.cabal b/sandi.cabal
--- a/sandi.cabal
+++ b/sandi.cabal
@@ -1,5 +1,5 @@
 name: sandi
-version: 0.2.2.1
+version: 0.2.3
 license: BSD3
 license-file: LICENSE
 cabal-version: >= 1.8
diff --git a/src/Codec/Binary/Base32.hs b/src/Codec/Binary/Base32.hs
--- a/src/Codec/Binary/Base32.hs
+++ b/src/Codec/Binary/Base32.hs
@@ -81,7 +81,7 @@
 -- Nothing
 b32_encode_final :: BS.ByteString -> Maybe BS.ByteString
 b32_encode_final bs = U.unsafePerformIO $ unsafeUseAsCStringLen bs $ \ (inBuf, inLen) -> do
-    outBuf <- mallocBytes 5
+    outBuf <- mallocBytes 8
     alloca $ \ pOutLen -> do
         r <- c_b32_enc_final (castPtr inBuf) (castEnum inLen) outBuf pOutLen
         if r == 0
diff --git a/src/Codec/Binary/Base32Hex.hs b/src/Codec/Binary/Base32Hex.hs
--- a/src/Codec/Binary/Base32Hex.hs
+++ b/src/Codec/Binary/Base32Hex.hs
@@ -73,7 +73,7 @@
 -- Nothing
 b32h_encode_final :: BS.ByteString -> Maybe BS.ByteString
 b32h_encode_final bs = U.unsafePerformIO $ unsafeUseAsCStringLen bs $ \ (inBuf, inLen) -> do
-    outBuf <- mallocBytes 5
+    outBuf <- mallocBytes 8
     alloca $ \ pOutLen -> do
         r <- c_b32h_enc_final (castPtr inBuf) (castEnum inLen) outBuf pOutLen
         if r == 0
