diff --git a/examples/rsa-encrypt.c b/examples/rsa-encrypt.c
index e3f3c351b0e6a5864f7aab93d566ccb54d56733d..919a756336d7a585314e15677d18b7f9cbdc13b8 100644
--- a/examples/rsa-encrypt.c
+++ b/examples/rsa-encrypt.c
@@ -95,8 +95,10 @@ process_file(struct rsa_session *ctx,
   uint8_t buffer[AES_BLOCK_SIZE * 100];
   unsigned leftover;
   unsigned padding;
-  
-  for (padding = leftover = 0; padding == 0;)
+
+  padding = leftover = 0;
+
+  for (;;)
     {
       size_t size = fread(buffer, 1, sizeof(buffer), in);
       if (ferror(in))
@@ -123,6 +125,14 @@ process_file(struct rsa_session *ctx,
 	  werror("Writing output failed: %s\n", strerror(errno));
 	  return 0;
 	}
+
+      if (padding)
+	{
+	  if (leftover)
+	    memcpy(buffer, buffer + size, leftover);
+
+	  break;
+	}
     }
   if (padding > 1)
     yarrow256_random(&ctx->yarrow, padding - 1, buffer + leftover);
@@ -130,6 +140,7 @@ process_file(struct rsa_session *ctx,
   buffer[AES_BLOCK_SIZE - 1] = padding;
   CBC_ENCRYPT(&ctx->aes, aes_encrypt, AES_BLOCK_SIZE, buffer, buffer);
   hmac_sha1_digest(&ctx->hmac, SHA1_DIGEST_SIZE, buffer + AES_BLOCK_SIZE);
+
   if (!write_string(out, AES_BLOCK_SIZE + SHA1_DIGEST_SIZE, buffer))
     {
       werror("Writing output failed: %s\n", strerror(errno));