summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-12-12 10:30:32 +0100
committerDavid Oberhollenzer <david.oberhollenzer@sigma-star.at>2019-12-12 10:40:01 +0100
commitbcb73d076b043c34ab88265c2bdddaff8b702cc1 (patch)
tree5db530f9bc516aa3375007a3d39724fd23c4bae9
parentc229e8909096540910db9d52689308279a1fd1d0 (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>
-rw-r--r--lib/sqfs/comp/zstd.c7
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;
}