summaryrefslogtreecommitdiff
path: root/oox
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-01-03 20:13:28 +0000
committerMichael Stahl <mstahl@redhat.com>2018-01-04 14:42:04 +0100
commit3795dfafc6b3c5ea33fe246be87fefb4fe050825 (patch)
tree42c571aa14b2d091a8753489400c98b16d6c86e4 /oox
parente6ae294d1d283783eaa9e537091d6fa648821fb0 (diff)
ofz#4929 ensure min input len for openssl ciphers
openssl is not the default backend Change-Id: Id7bd77c1a12a15c0ebb4e7d758362c7778bfc2fd Reviewed-on: https://gerrit.libreoffice.org/47350 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/crypto/CryptTools.cxx10
1 files changed, 10 insertions, 0 deletions
diff --git a/oox/source/crypto/CryptTools.cxx b/oox/source/crypto/CryptTools.cxx
index 6de4363c59f4..e0b39f67cca4 100644
--- a/oox/source/crypto/CryptTools.cxx
+++ b/oox/source/crypto/CryptTools.cxx
@@ -128,10 +128,20 @@ Decrypt::Decrypt(std::vector<sal_uInt8>& key, std::vector<sal_uInt8>& iv, Crypto
const EVP_CIPHER* cipher = getCipher(type);
+ const size_t nMinKeySize = EVP_CIPHER_key_length(cipher);
+ if (key.size() < nMinKeySize)
+ key.resize(nMinKeySize, 0);
+
if (iv.empty())
EVP_DecryptInit_ex(&mContext, cipher, nullptr, key.data(), 0);
else
+ {
+ const size_t nMinIVSize = EVP_CIPHER_iv_length(cipher);
+ if (iv.size() < nMinIVSize)
+ iv.resize(nMinIVSize, 0);
+
EVP_DecryptInit_ex(&mContext, cipher, nullptr, key.data(), iv.data());
+ }
EVP_CIPHER_CTX_set_padding(&mContext, 0);
#endif