|
1 | 1 | use crate::types::FileRange; |
2 | | -use anyhow::{Context as _, Result, bail}; |
| 2 | +use anyhow::{Context as _, Result, anyhow, bail}; |
3 | 3 | use docs_rs_types::CompressionAlgorithm; |
4 | 4 | use itertools::Itertools as _; |
5 | 5 | use sqlx::{Acquire as _, QueryBuilder, Row as _, Sqlite}; |
@@ -96,17 +96,20 @@ pub(crate) async fn create<R: io::Read + io::Seek, P: AsRef<Path> + std::fmt::De |
96 | 96 |
|
97 | 97 | let entry = archive.by_index(i)?; |
98 | 98 |
|
99 | | - let start = entry.data_start() as i64; |
100 | | - let end = (entry.data_start() + entry.compressed_size() - 1) as i64; |
| 99 | + let start = entry |
| 100 | + .data_start() |
| 101 | + .ok_or_else(|| anyhow!("missing data_start in zip derectory"))?; |
| 102 | + |
| 103 | + let end = start + entry.compressed_size() - 1; |
101 | 104 | let compression_raw = match entry.compression() { |
102 | 105 | zip::CompressionMethod::Bzip2 => compression_bzip, |
103 | 106 | c => bail!("unsupported compression algorithm {} in zip-file", c), |
104 | 107 | }; |
105 | 108 |
|
106 | 109 | insert_stmt.push_values([()], |mut b, _| { |
107 | 110 | b.push_bind(entry.name()) |
108 | | - .push_bind(start) |
109 | | - .push_bind(end) |
| 111 | + .push_bind(start as i64) |
| 112 | + .push_bind(end as i64) |
110 | 113 | .push_bind(compression_raw); |
111 | 114 | }); |
112 | 115 | insert_stmt |
|
0 commit comments