Fix warning about implicit conversion

This commit is contained in:
Martchus 2018-12-22 02:46:55 +01:00
parent 4412c62433
commit 42f37a1852
1 changed files with 10 additions and 3 deletions

View File

@ -319,10 +319,17 @@ void PasswordFile::load()
if (remainingSize < 8) { if (remainingSize < 8) {
throw ParsingException("File is truncated (decompressed size expected)."); throw ParsingException("File is truncated (decompressed size expected).");
} }
uLongf decompressedSize = ConversionUtilities::LE::toUInt64(decryptedData.data()); if (remainingSize > numeric_limits<uLongf>::max()) {
throw CryptoException("Size exceeds limit.");
}
const auto rawDecompressedSize = ConversionUtilities::LE::toUInt64(decryptedData.data());
if (rawDecompressedSize > numeric_limits<uLongf>::max()) {
throw ParsingException("Decompressed size exceeds limit.");
}
auto decompressedSize = static_cast<uLongf>(rawDecompressedSize);
rawData.resize(decompressedSize); rawData.resize(decompressedSize);
switch (uncompress( switch (uncompress(reinterpret_cast<Bytef *>(rawData.data()), &decompressedSize, reinterpret_cast<Bytef *>(decryptedData.data() + 8),
reinterpret_cast<Bytef *>(rawData.data()), &decompressedSize, reinterpret_cast<Bytef *>(decryptedData.data() + 8), remainingSize - 8)) { static_cast<uLongf>(remainingSize - 8))) {
case Z_MEM_ERROR: case Z_MEM_ERROR:
throw ParsingException("Decompressing failed. The source buffer was too small."); throw ParsingException("Decompressing failed. The source buffer was too small.");
case Z_BUF_ERROR: case Z_BUF_ERROR: