# HG changeset patch # User Olaf Wintermann # Date 1536123724 -7200 # Node ID 2c112cbaa08e96f7f61cf6e2b1bca1946e99dca2 # Parent 295eaa04fc41f7d6f53d4ca48c51daa54ed5d5ca aes encrypter: fixes case where EVP_EncryptFinal_ex was not called at the stream end diff -r 295eaa04fc41 -r 2c112cbaa08e libidav/crypto.c --- a/libidav/crypto.c Sat Aug 25 15:12:38 2018 +0200 +++ b/libidav/crypto.c Wed Sep 05 07:02:04 2018 +0200 @@ -197,18 +197,22 @@ int outlen = 0; size_t ivl = enc->ivlen; if(in_len != 0) { - outlen = len + 16; + outlen = len + 32; out = malloc(outlen + ivl); if(enc->iv) { memcpy(out, enc->iv, ivl); } EVP_EncryptUpdate(enc->ctx, out + ivl, &outlen, in, in_len); - free(in); + if(in_len != len) { + int newoutlen = 16; + EVP_EncryptFinal_ex(enc->ctx, out + ivl + outlen, &newoutlen); + outlen += newoutlen; + enc->end = 1; + } } else { out = malloc(16); EVP_EncryptFinal_ex(enc->ctx, out, &outlen); enc->end = 1; - free(in); } enc->tmp = (char*)out; enc->tmplen = outlen + ivl; @@ -220,6 +224,8 @@ enc->ivlen = 0; } + free(in); + return aes_read(buf, s, n, enc); }