Skip to content

Commit c6a4dfa

Browse files
laserdignifiedquire
authored andcommitted
refactor(filecoin-proofs): add more information to piece size errors
* fix(comment): remove dead comment * fix(errors): better error message * feat(errors): add more error messaging * refactor(errors): alert user to EOF and 0-byte read
1 parent 6d318b0 commit c6a4dfa

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

filecoin-proofs/src/api/mod.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,17 @@ pub fn generate_piece_commitment<T: std::io::Read>(
9090
let n = write_padded(source, &temp_piece_file)
9191
.map_err(|err| format_err!("failed to write and preprocess bytes: {:?}", err))?;
9292

93+
if n == 0 {
94+
return Err(format_err!(
95+
"generate_piece_commitment: read 0 bytes from source before EOF"
96+
));
97+
}
98+
9399
let n = UnpaddedBytesAmount(n as u64);
94100

95101
if n != piece_size {
96102
return Err(format_err!(
97-
"wrote more bytes ({:?}) than expected ({:?}) when preprocessing",
103+
"wrote ({:?}) but expected to write ({:?}) when preprocessing",
98104
n,
99105
piece_size
100106
));
@@ -177,6 +183,8 @@ where
177183

178184
match (write_rslt, join_rslt) {
179185
(Ok(n), Ok(Ok(r))) => {
186+
ensure!(n != 0, "add_piece: read 0 bytes before EOF from source");
187+
180188
let n = UnpaddedBytesAmount(n as u64);
181189

182190
ensure!(

filecoin-proofs/src/pieces.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,16 @@ pub fn compute_comm_d(sector_size: SectorSize, piece_infos: &[PieceInfo]) -> Res
5252
let first = piece_infos.first().unwrap().clone();
5353
ensure!(
5454
u64::from(PaddedBytesAmount::from(first.size)).is_power_of_two(),
55-
"Piece size must be a power of 2."
55+
"Piece size ({:?}) must be a power of 2.",
56+
PaddedBytesAmount::from(first.size)
5657
);
5758
stack.shift(first);
5859

5960
for piece_info in piece_infos.iter().skip(1) {
6061
ensure!(
6162
u64::from(PaddedBytesAmount::from(piece_info.size)).is_power_of_two(),
62-
"Piece size must be a power of 2."
63+
"Piece size ({:?}) must be a power of 2.",
64+
PaddedBytesAmount::from(piece_info.size)
6365
);
6466

6567
while stack.peek().size < piece_info.size {
@@ -661,8 +663,6 @@ mod tests {
661663
}
662664
assert_eq!(staged_sector.len(), u64::from(sector_size) as usize);
663665

664-
// println!("{:?}", &piece_infos);
665-
666666
let data_tree = graph.merkle_tree(&staged_sector)?;
667667
let comm_d_root: Fr = data_tree.root().into();
668668
let comm_d = commitment_from_fr::<Bls12>(comm_d_root);

0 commit comments

Comments
 (0)