Update already wrapped the source in a counting reader but never looked at the count, so a source that supplied fewer bytes than its declared size was uploaded as a chunked request, accepted by the server and reported as a success with a truncated file stored. Compare the bytes actually read against the declared size.