1
0
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:
Matt Gibson
2021-03-02 09:27:11 -06:00
committed by GitHub
parent 8d5fc21b51
commit c2d34d7271
3 changed files with 16 additions and 2 deletions

View File

@ -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
{