If the source supplied fewer bytes than its declared size, the multipart upload was completed anyway, storing a truncated file and reporting a successful upload. Check the number of bytes read from the source against the declared size before finalising and abort the upload with an error if they do not match. This was found by the new FsPutShortEOF integration test.