Не проверенное возвращаемое значение вызывает непредвиденные состояния и условия
Я искал в Интернете более часа и могу найти только обсуждения на стороне клиента, мои последние результаты сканирования. Я получаю метод, который использует метод Read(), и потому что Read() игнорирует возвращенное значение, может привести к тому, что программа пропустит неожиданные состояния и обнаружение условий. Если кто-то может объяснить, в мелких деталях, и возможность рекомендовать исправить это было бы здорово. Функция ниже:
Оскорбительная строка кода в методе:
csEncrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
Метод вызова:
public String DecryptMessage(byte[] encrypted)
{
ASCIIEncoding textConverter = new ASCIIEncoding();
decryptor = aes.CreateDecryptor(key, IV);
MemoryStream msDecrypt = new MemoryStream(encrypted);
csEncrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
byte[] fromEncrypt = new byte[encrypted.Length];
csEncrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return textConverter.GetString(fromEncrypt);
}
1 ответ
Попробуйте не игнорировать возвращаемое значение:
public String DecryptMessage(byte[] encrypted)
{
ASCIIEncoding textConverter = new ASCIIEncoding();
decryptor = aes.CreateDecryptor(key, IV);
using (MemoryStream msDecrypt = new MemoryStream(encrypted))
{
using (var csEncrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
byte[] fromEncrypt = new byte[encrypted.Length];
var bytesRead = csEncrypt.Read(fromEncrypt, 0, fromEncrypt.Length);
return textConverter.GetString(fromEncrypt, 0, bytesRead);
}
}
}
Что произойдет в вашем коде, если будет возвращено меньше байтов, чем вы ожидали?