From 701960dd81d24d65caaea4def9723f0c0f6c89d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E5=B0=8F=E9=B8=AD?= Date: Thu, 27 Nov 2025 15:57:38 +0800 Subject: [PATCH] fix out of range for slice (#931) --- .vscode/launch.json | 9 +++++++++ crates/ecstore/src/erasure_coding/decode.rs | 8 +++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 151031f6..9bf11962 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -85,6 +85,15 @@ "cwd": "${workspaceFolder}", //"stopAtEntry": false, //"preLaunchTask": "cargo build", + "env": { + "RUSTFS_ACCESS_KEY": "rustfsadmin", + "RUSTFS_SECRET_KEY": "rustfsadmin", + "RUSTFS_VOLUMES": "./target/volume/test{1...4}", + "RUSTFS_ADDRESS": ":9000", + "RUSTFS_CONSOLE_ENABLE": "true", + "RUSTFS_CONSOLE_ADDRESS": "127.0.0.1:9001", + "RUSTFS_OBS_LOG_DIRECTORY": "./target/logs", + }, "sourceLanguages": [ "rust" ], diff --git a/crates/ecstore/src/erasure_coding/decode.rs b/crates/ecstore/src/erasure_coding/decode.rs index ea92582b..94b69391 100644 --- a/crates/ecstore/src/erasure_coding/decode.rs +++ b/crates/ecstore/src/erasure_coding/decode.rs @@ -176,12 +176,10 @@ where let mut write_left = length; for block_op in &en_blocks[..data_blocks] { - if block_op.is_none() { + let Some(block) = block_op else { error!("write_data_blocks block_op.is_none()"); return Err(io::Error::new(ErrorKind::UnexpectedEof, "Missing data block")); - } - - let block = block_op.as_ref().unwrap(); + }; if offset >= block.len() { offset -= block.len(); @@ -191,7 +189,7 @@ where let block_slice = &block[offset..]; offset = 0; - if write_left < block.len() { + if write_left < block_slice.len() { writer.write_all(&block_slice[..write_left]).await.map_err(|e| { error!("write_data_blocks write_all err: {}", e); e