gendx / lzma-rs

An LZMA decoder written in pure Rust
MIT License
127 stars 27 forks source link

How to set dictSize on lzma2_decompress #12

Open jimliang opened 4 years ago

jimliang commented 4 years ago

In https://mvnrepository.com/artifact/com.github.veithen.cosmos.bootstrap/org.tukaani.xz I see

package org.tukaani.xz;

public class LZMA2InputStream extends InputStream {

   ...
    public LZMA2InputStream(InputStream in, int dictSize) {
        this(in, dictSize, (byte[])null);
    }

dictSize is a param to construct LZMA2InputStream

gendx commented 4 years ago

The LZMA format contains a header which specifies the dictionary size to use: https://github.com/gendx/lzma-rs/blob/master/src/decode/lzma.rs#L46

So lzma-rs just follows whatever dictionary size is written in the compressed stream, there is currently no way to override this value, nor to set limits on it.

XVilka commented 4 years ago

Some formats specify the properties in a different format. It would be awesome to have the "raw" function with everything as a parameter instead.

gendx commented 4 years ago

Do you have a reference to the code and documentation for such "some formats"? Otherwise it's hard to add the feature you wish. Feel free to send a pull-request as well (with supporting references, example files, etc.).

jimliang commented 4 years ago

xz for java: https://tukaani.org/xz/java.html see LZMAInputStream, LZMA2InputStream @gendx

chyyran commented 2 years ago

I am working on porting libchdr to Rust, which directly interfaces with the LZMA SDK and sets the dictSize and other LZMA params explicitly.

My current solution is to vendor lzma-rs to expose the required options in Stream.

gendx commented 2 years ago

I assume this issue is the same feature request as #72?

chyyran commented 2 years ago

74 covers this for LZMA1, but I'm not sure how the current design of the LZMA2 decoder can take a useful dict_size parameter.