If the source supplied fewer bytes than its declared size, the upload request failed but a retry could report success even though the stored file was truncated, because the retry re-sent an already exhausted reader. Count the bytes actually read from the source and if they do not match the declared size return an error. This was found by the new FsPutShortEOF integration test.