mirror of
https://github.com/bitwarden/server.git
synced 2025-07-03 00:52:49 -05:00
Fix send file length always zero (#1175)
* HttpStream must be read prior to knowing it length We also need to create the send prior to saving the stream so we have well defined save location. Solve chicken-and-egg problem by saving the Send twice. This also allows for validation that the stream received is the same length as that promissed by the content-length header * Get encrypted file length from request
This commit is contained in:
@ -128,11 +128,24 @@ namespace Bit.Core.Services
|
||||
try
|
||||
{
|
||||
data.Id = fileId;
|
||||
data.Size = stream.Length;
|
||||
send.Data = JsonConvert.SerializeObject(data,
|
||||
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
||||
await SaveSendAsync(send);
|
||||
await _sendFileStorageService.UploadNewFileAsync(stream, send, fileId);
|
||||
// Need to save length of stream since that isn't available until it is read
|
||||
if (stream.Length <= requestLength)
|
||||
{
|
||||
data.Size = stream.Length;
|
||||
send.Data = JsonConvert.SerializeObject(data,
|
||||
new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
|
||||
await SaveSendAsync(send);
|
||||
}
|
||||
else
|
||||
{
|
||||
await DeleteSendAsync(send);
|
||||
throw new BadRequestException("Content-Length header is smaller than file received.");
|
||||
}
|
||||
|
||||
}
|
||||
catch
|
||||
{
|
||||
|
Reference in New Issue
Block a user