diff --git a/src/encode/base64.c b/src/encode/base64.c
index 8c2217ae77925ec9513ecf4dc6def75ac6e96706..8b05bac1f516427333331dd8356f376ca8af6f0f 100644
--- a/src/encode/base64.c
+++ b/src/encode/base64.c
@@ -131,14 +131,16 @@ int b64_encode(char *target, size_t tlen, const char *source, size_t slen)  {
 			FREE_AND_NULL(tmpbuf);
 			return(-1);
 		}
-		if(inp==inend)
-			done=1;
-		if (!done)
+		if (inp>=inend)
+			enc=buf;
+		else
 			enc=buf|((*inp & 0xF0) >> 4);
 		if(add_char(outp++, enc, done, outend)) {
 			FREE_AND_NULL(tmpbuf);
 			return(-1);
 		}
+		if(inp==inend)
+			done=1;
 		if (!done) {
 			buf=(*(inp++)<<2)&0x3C;
 			if (inp == inend)