Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

System.NotSupportedException: 'Specified method is not supported.' On reader.MoveToNextEntry() while decompresing 7z #734

Closed
GamingCity opened this issue Mar 11, 2023 · 11 comments

Comments

@GamingCity
Copy link

GamingCity commented Mar 11, 2023

Ive been getting this exception when i try to extract a 7zip file, it always start extracting files and get to the same point and throws the exception.

using (var archive = ArchiveFactory.Open("D:\test.7z"))
{
var reader = archive.ExtractAllEntries();
reader.EntryExtractionProgress += Reader_EntryExtractionProgress;
while (reader.MoveToNextEntry()) <--Exception here
{
if (!reader.Entry.IsDirectory)
reader.WriteEntryToDirectory("D:\temp", new ExtractionOptions() { ExtractFullPath = true, Overwrite = true });
}
}
void Reader_EntryExtractionProgress(object? sender, ReaderExtractionEventArgs e)
{
Console.WriteLine($"{e.Item.Key}: {e.ReaderProgress.PercentageRead} % read, {e.ReaderProgress.PercentageReadExact} % extracted");
}

Im using .net 6.0 on a simple console app.
image

It seems to complain that it cant call reflection from this context, yet i dont understand why it manages to extract half the file before having this problem.

WriteAllToDirectory() also gives this exception.

@Erior
Copy link
Contributor

Erior commented Mar 11, 2023

Can be DeltaFilter #726, do you have the test file somewhere or can you build from this repo and test/report the CMethodId id value when it fails?

@Shivansps
Copy link

(sorry i posted the issue from the wrong account)
Yeah this is the file, its extensionless but it is a 7z. https://cf.fsnebula.org/storage/38/aa/9cb349c96e4fc0d9e3b88d681642764af71cdf9476a7af6281caafdffafd

@Erior
Copy link
Contributor

Erior commented Mar 12, 2023

If you open it in 7z you can see that some entries are using Method Delta:X LZMA, The support for this was added recently and has not yet been released.

@GamingCity
Copy link
Author

ok if this is fixed on main then ill close this for now.

@GamingCity
Copy link
Author

GamingCity commented Mar 17, 2023

OK, using master instead of the nuget package allowed to decompress a lot more files, but im still finding some of them fail to decompress...
Like this one:
https://cf.fsnebula.org/storage/7c/ba/0af317e290e891db84e4674bff95ded7ac5a10785292b59bca26381878d1

It seems that there is a Delta:1 and a Delta:2 but i dont think thats the issue as it seems to extract those files or most of those files just fine.

OK this is thwing the exception at deltafilter.cs, _distance is 0

public DeltaFilter(bool isEncoder, Stream baseStream, byte[] info) : base(isEncoder, baseStream, 1)
{
_distance = info[0];
_history = new byte[DISTANCE_MAX];
_position = 0;

  if (_distance < DISTANCE_MIN)
  {
      throw new NotSupportedException();
  }

}

@Erior
Copy link
Contributor

Erior commented Mar 19, 2023

Using the link, it actually fails on a file that 7zip says does not use the delta method, I will see if there are other conditions than the ID for the filter detection

@Erior
Copy link
Contributor

Erior commented Mar 19, 2023

and I was wrong, but it looks to be a noop setup, not applying the filter seems to be the right way, I'll look into it some more later

@Erior
Copy link
Contributor

Erior commented Mar 19, 2023

From my testing it looks like the check should be removed #735

@Erior
Copy link
Contributor

Erior commented Mar 21, 2023

@GamingCity please try master again, the changes has been merged.

@GamingCity
Copy link
Author

Seems to be working fine now, thanks.

@adamhathcock
Copy link
Owner

Thanks both!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants