Make EVP_DecryptUpdate work again.
diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c
index ff7f770..3fbe5c6 100644
--- a/crypto/evp/evp_enc.c
+++ b/crypto/evp/evp_enc.c
@@ -302,7 +302,7 @@
 int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
 	     const unsigned char *in, int inl)
 	{
-	int b;
+	int b, fix_len;
 
 	if (inl == 0)
 		{
@@ -314,12 +314,17 @@
 		return EVP_EncryptUpdate(ctx, out, outl, in, inl);
 
 	b=ctx->cipher->block_size;
+
 	if(ctx->final_used)
 		{
 		memcpy(out,ctx->final,b);
 		out+=b;
+		fix_len = 1;
 		}
-		
+	else
+		fix_len = 0;
+
+
 	if(!EVP_EncryptUpdate(ctx,out,outl,in,inl))
 		return 0;
 
@@ -327,18 +332,16 @@
 	 * we have a copy of this last block */
 	if (b > 1 && !ctx->buf_len)
 		{
-		if(!ctx->final_used)
-			{
-			*outl-=b;
-			ctx->final_used=1;
-			}
+		*outl-=b;
+		ctx->final_used=1;
 		memcpy(ctx->final,&out[*outl],b);
 		}
-	else if(ctx->final_used)
-		{
-		ctx->final_used=0;
-		*outl+=b;
-		}
+	else
+		ctx->final_used = 0;
+
+	if (fix_len)
+		*outl += b;
+		
 	return 1;
 	}