Skip to content

operations: check checksums in rcat with known size - fixes #6305 - #9751

Merged
ncw merged 1 commit into
rclone:masterfrom
hsdfat:rcat-size-checksum-6305
Aug 13, 2026
Merged

ncw merged 1 commit into
rclone:masterfrom
hsdfat:rcat-size-checksum-6305

Conversation

@hsdfat

@hsdfat hsdfat commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

What does this change do?

RcatSize — used by rclone rcat --size, the operations/uploadfile rc command and the serve backends — streamed a known-size upload straight into Put behind an ObjectInfo carrying no hashes, so the upload's checksum was never verified. The unknown-size path through Rcat already hashes as it goes, and the size has been checked since #9722, but the checksum for a known-size upload was not.

This hashes the stream on the way past with an io.TeeReader (it can only be read once) and compares it against the destination after the upload, alongside the existing size check, matching what operations.Copy does. A destination that reports no usable hash is still checked by size, --ignore-checksum is respected, and an upload that fails either check has the corrupt copy removed.

Linked issue

Fixes #6305

RcatSize streams the body straight into Put behind an ObjectInfo with no
hashes, so a known-size upload had its size checked but its checksum
never verified, unlike the unknown-size path through Rcat which hashes as
it goes.

The stream can only be read once, so hash it on the way past and compare
with the destination after the upload, as operations.Copy does. A
destination which reports no usable hash is still checked by size, and one
which fails either check has the failed copy removed.
@hsdfat
hsdfat requested review from ncw and nielash as code owners August 8, 2026 16:45

@ncw ncw left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you. This looks great. Will merge now :-)

@ncw
ncw merged commit fc348fc into rclone:master Aug 13, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

rcat isn't checking checksums like it should

2 participants