fix(rio): preserve reader capabilities and crypto safety (#2363)

This commit is contained in:
weisd
2026-04-03 13:57:42 +08:00
committed by GitHub
parent 6a114cd2e0
commit 5d302febb7
20 changed files with 1074 additions and 699 deletions
+7 -23
View File
@@ -56,7 +56,7 @@ use axum::http::HeaderMap;
use rustfs_credentials::Credentials;
use rustfs_ecstore::new_object_layer_fn;
use rustfs_ecstore::store_api::{BucketOperations, BucketOptions, ObjectIO, ObjectOperations, ObjectOptions, PutObjReader};
use rustfs_rio::{HashReader, Reader, WarpReader};
use rustfs_rio::HashReader;
use std::collections::HashMap;
use tracing::debug;
use tracing::error;
@@ -374,20 +374,12 @@ where
..Default::default()
};
// 13. Wrap reader in buffered reader then WarpReader (Box<dyn Reader>)
// 13. Wrap reader in buffered reader for streaming hash validation
let buf_reader = tokio::io::BufReader::new(reader);
let warp_reader: Box<dyn Reader> = Box::new(WarpReader::new(buf_reader));
// 14. Create HashReader (no MD5/SHA256 validation for Swift)
let hash_reader = HashReader::new(
warp_reader,
content_length,
content_length,
None, // md5hex
None, // sha256hex
false, // disable_multipart
)
.map_err(|e| sanitize_storage_error("Hash reader creation", e))?;
let hash_reader = HashReader::from_stream(buf_reader, content_length, content_length, None, None, false)
.map_err(|e| sanitize_storage_error("Hash reader creation", e))?;
// 15. Wrap in PutObjReader as expected by storage layer
let mut put_reader = PutObjReader::new(hash_reader);
@@ -465,20 +457,12 @@ where
// Content length (use -1 for unknown)
let content_length = -1i64;
// Wrap reader in buffered reader then WarpReader
// Wrap reader in buffered reader for streaming hash validation
let buf_reader = tokio::io::BufReader::new(reader);
let warp_reader: Box<dyn Reader> = Box::new(WarpReader::new(buf_reader));
// Create HashReader
let hash_reader = HashReader::new(
warp_reader,
content_length,
content_length,
None, // md5hex
None, // sha256hex
false, // disable_multipart
)
.map_err(|e| sanitize_storage_error("Hash reader creation", e))?;
let hash_reader = HashReader::from_stream(buf_reader, content_length, content_length, None, None, false)
.map_err(|e| sanitize_storage_error("Hash reader creation", e))?;
// Wrap in PutObjReader
let mut put_reader = PutObjReader::new(hash_reader);