diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-12-12 10:30:32 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-12-12 10:40:01 +0100 |
commit | bcb73d076b043c34ab88265c2bdddaff8b702cc1 (patch) | |
tree | 5db530f9bc516aa3375007a3d39724fd23c4bae9 /lib | |
parent | c229e8909096540910db9d52689308279a1fd1d0 (diff) |
Fix "buffer to small" being treated as error in zstd compressor
The zstd compress function returns an error code if it cannot fit the
compressed data into the given destination buffer.
This commit adds a check for this error and reports that the
libsquashfs compressor implementation was unable to shrink the input
instead of claiming a fatal error happened.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqfs/comp/zstd.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/lib/sqfs/comp/zstd.c b/lib/sqfs/comp/zstd.c index 3fac85f..a850033 100644 --- a/lib/sqfs/comp/zstd.c +++ b/lib/sqfs/comp/zstd.c @@ -12,6 +12,7 @@ #include <string.h> #include <zstd.h> +#include <zstd_errors.h> #include "internal.h" @@ -63,8 +64,12 @@ static sqfs_s32 zstd_comp_block(sqfs_compressor_t *base, const sqfs_u8 *in, ret = ZSTD_compressCCtx(zstd->zctx, out, outsize, in, size, zstd->level); - if (ZSTD_isError(ret)) + if (ZSTD_isError(ret)) { + if (ZSTD_getErrorCode(ret) == ZSTD_error_dstSize_tooSmall) + return 0; + return SQFS_ERROR_COMPRESSOR; + } return ret < size ? ret : 0; } |