lzms_get_needed_memory(size_t max_block_size, unsigned int compression_level)
{
struct lzms_compressor_params params;
+ u64 size = 0;
- lzms_build_params(compression_level, ¶ms);
+ if (max_block_size >= INT32_MAX)
+ return 0;
- u64 size = 0;
+ lzms_build_params(compression_level, ¶ms);
size += sizeof(struct lzms_compressor);
size += max_block_size;
if (uncompressed_size == 0)
return 0;
- /* The x86 post-processor requires that the uncompressed length fit into
- * a signed 32-bit integer. Also, the position slot table cannot be
- * searched for a position of INT32_MAX or greater. */
- if (uncompressed_size >= INT32_MAX) {
- LZMS_DEBUG("Uncompressed length too large "
- "(got %zu, expected < INT32_MAX)",
- uncompressed_size);
- return -1;
- }
-
/* Decode the literals and matches. */
if (lzms_decode_items(compressed_data, compressed_size,
uncompressed_data, uncompressed_size, ctx))
{
struct lzms_decompressor *ctx;
+ /* The x86 post-processor requires that the uncompressed length fit into
+ * a signed 32-bit integer. Also, the position slot table cannot be
+ * searched for a position of INT32_MAX or greater. */
+ if (max_block_size >= INT32_MAX)
+ return WIMLIB_ERR_INVALID_PARAM;
+
ctx = ALIGNED_MALLOC(sizeof(struct lzms_decompressor),
DECODE_TABLE_ALIGNMENT);
if (ctx == NULL)
mf_params->nice_match_len = xpress_params->nice_match_length;
}
-static inline bool
-xpress_window_size_valid(size_t window_size)
-{
- return (window_size > 0 && window_size <= XPRESS_MAX_OFFSET + 1);
-}
-
static void
xpress_free_compressor(void *_c);
u64 size = 0;
struct xpress_compressor_params params;
- if (!xpress_window_size_valid(max_window_size))
+ if (max_window_size > XPRESS_MAX_OFFSET + 1)
return 0;
xpress_build_params(compression_level, max_window_size, ¶ms);
struct xpress_compressor_params params;
struct lz_mf_params mf_params;
- if (!xpress_window_size_valid(max_window_size))
+ if (max_window_size > XPRESS_MAX_OFFSET + 1)
return WIMLIB_ERR_INVALID_PARAM;
xpress_build_params(compression_level, max_window_size, ¶ms);
#include "wimlib/decompressor_ops.h"
#include "wimlib/decompress_common.h"
+#include "wimlib/error.h"
#include "wimlib/xpress.h"
/*
uncompressed_size, decode_table);
}
+static int
+xpress_create_decompressor(size_t max_block_size, void **dec_ret)
+{
+ if (max_block_size > XPRESS_MAX_OFFSET + 1)
+ return WIMLIB_ERR_INVALID_PARAM;
+
+ return 0;
+}
+
const struct decompressor_ops xpress_decompressor_ops = {
- .decompress = xpress_decompress,
+ .create_decompressor = xpress_create_decompressor,
+ .decompress = xpress_decompress,
};