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

Can't decompress data which is compressed by rust code. #100

Open
WindSoilder opened this issue Aug 12, 2024 · 6 comments
Open

Can't decompress data which is compressed by rust code. #100

WindSoilder opened this issue Aug 12, 2024 · 6 comments

Comments

@WindSoilder
Copy link

Here is simplest reproducing example:

import zstd
zstd.decompress(b'\x28\xb5\x2f\xfd\x00\x58\x11\x00\x00\x7b\x7d')

It raises an error: Error: Input data invalid or missing content size in frame header.

More context

I'm trying to rewrite a client application in rust, it sends compressed data to server, then server decompresses it. Unfortunally the server failed to decompress data.

Here is how I do it in client side:

use std::io::Cursor;
use zstd;

fn main() {
    let body = zstd::encode_all(Cursor::new("{}".as_bytes()), 3).unwrap();
    for x in body.iter() {
        print!("\\x{x:x?}");
    }
}

And I copied the body and decompressed it in python, and it failed.


If I tried to compress data({} in my example) in python, and decompressed in rust, it successes. So I think it's the issue in python side.

In rust, I'm using zstd-rs for compressing/decompressing

@sergey-dryabzhinsky
Copy link
Owner

sergey-dryabzhinsky commented Nov 8, 2024 via email

@gyscos
Copy link

gyscos commented Nov 8, 2024

It looks like python-zstd is unable to decompress zstd data when the content-size is missing from the frame header.

https://github.com/sergey-dryabzhinsky/python-zstd/blob/master/src/python-zstd.c#L157C1-L157C96

The C library (or the rust binding) do not require this, or include it by default, which is why data compressed by the rust binding cannot currently be decompressed by python-zstd.

@sergey-dryabzhinsky
Copy link
Owner

What original data is?

@sergey-dryabzhinsky
Copy link
Owner

Can you decompress data using cli version of zstd?

@WindSoilder
Copy link
Author

Hi, the original data is {}. And I can decompress data using cli version of zstd.

@sergey-dryabzhinsky
Copy link
Owner

It's clearly no valid zstd block, there is no header, but maybe it's zstd stream chunk.

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

No branches or pull requests

3 participants