mirror of
https://github.com/ouch-org/ouch.git
synced 2025-06-01 17:10:21 +00:00
Fix 7z BadSignature error when compressing and then listing (#819)
This commit is contained in:
parent
c3b89b038d
commit
da9b32a366
@ -30,6 +30,9 @@ Categories Used:
|
||||
- Give better error messages when archive extensions are invalid [\#817](https://github.com/ouch-org/ouch/pull/817) ([marcospb19](https://github.com/marcospb19))
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
- Fix 7z BadSignature error when compressing and then listing [\#819](https://github.com/ouch-org/ouch/pull/819) ([tommady](https://github.com/tommady))
|
||||
|
||||
### Tweaks
|
||||
|
||||
- Make `.bz3` opt-out [\#814](https://github.com/ouch-org/ouch/pull/814) ([amyspark](https://github.com/amyspark))
|
||||
|
@ -171,12 +171,10 @@ where
|
||||
}
|
||||
|
||||
/// List contents of `archive_path`, returning a vector of archive entries
|
||||
pub fn list_archive(
|
||||
archive_path: &Path,
|
||||
password: Option<&[u8]>,
|
||||
) -> Result<impl Iterator<Item = crate::Result<FileInArchive>>> {
|
||||
let reader = fs::File::open(archive_path)?;
|
||||
|
||||
pub fn list_archive<R>(reader: R, password: Option<&[u8]>) -> Result<impl Iterator<Item = crate::Result<FileInArchive>>>
|
||||
where
|
||||
R: Read + Seek,
|
||||
{
|
||||
let mut files = Vec::new();
|
||||
|
||||
let entry_extract_fn = |entry: &SevenZArchiveEntry, _: &mut dyn Read, _: &PathBuf| {
|
||||
|
@ -122,7 +122,10 @@ pub fn list_archive_contents(
|
||||
}
|
||||
}
|
||||
|
||||
Box::new(archive::sevenz::list_archive(archive_path, password)?)
|
||||
let mut vec = vec![];
|
||||
io::copy(&mut reader, &mut vec)?;
|
||||
|
||||
Box::new(archive::sevenz::list_archive(io::Cursor::new(vec), password)?)
|
||||
}
|
||||
Gzip | Bzip | Bzip3 | Lz4 | Lzma | Snappy | Zstd | Brotli => {
|
||||
unreachable!("Not an archive, should be validated before calling this function.");
|
||||
|
@ -1065,3 +1065,27 @@ fn fail_when_compressing_archive_as_the_second_extension() {
|
||||
.is_some());
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn sevenz_list_should_not_failed() {
|
||||
let temp_dir = tempdir().unwrap();
|
||||
let root_path = temp_dir.path();
|
||||
let src_files_path = root_path.join("src_files");
|
||||
fs::create_dir_all(&src_files_path).unwrap();
|
||||
|
||||
let archive = root_path.join("archive.7z.gz");
|
||||
crate::utils::cargo_bin()
|
||||
.arg("compress")
|
||||
.arg("--yes")
|
||||
.arg(fs::File::create(src_files_path.join("README.md")).unwrap().path())
|
||||
.arg(&archive)
|
||||
.assert()
|
||||
.success();
|
||||
|
||||
crate::utils::cargo_bin()
|
||||
.arg("list")
|
||||
.arg("--yes")
|
||||
.arg(&archive)
|
||||
.assert()
|
||||
.success();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user