From df0b8258889f0c81f1893576d3d1eb5927931673 Mon Sep 17 00:00:00 2001 From: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com> Date: Sun, 27 Jun 2021 09:44:42 +0200 Subject: [PATCH] Latest version of lzo.c We have pulled commit 004b582 from 14 May 2016. Tests have been moved to a different file, so the file is smaller. I have kept local changes, except the removal of INT_MAX -1000. Signed-off-by: Dimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com> --- lzo.c | 61 ++++------------------------------------------------------- 1 file changed, 4 insertions(+), 57 deletions(-) diff --git a/lzo.c b/lzo.c index ac95fb9b..c3c2d067 100644 --- a/lzo.c +++ b/lzo.c @@ -20,6 +20,7 @@ */ #include +#include //#include "avutil.h" //#include "avassert.h" @@ -67,7 +68,7 @@ static inline int get_len(LZOContext *c, int x, int mask) int cnt = x & mask; if (!cnt) { while (!(x = get_byte(c))) { - if (cnt >= 65535) { + if (cnt >= INT_MAX - 1000) { c->error |= AV_LZO_ERROR; break; } @@ -122,6 +123,7 @@ static inline void copy(LZOContext *c, int cnt) static inline void copy_backptr(LZOContext *c, int back, int cnt) { register uint8_t *dst = c->out; + /* Should never happen */ if (cnt <= 0) { c->error |= AV_LZO_ERROR; return; @@ -168,7 +170,7 @@ int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen) while (!c.error) { int cnt, back; if (x > 15) { - if (x > 63) { /* cccbbbnn BBBBBBBB */ + if (x > 63) { /* cccbbbnn BBBBBBBB */ cnt = (x >> 5) - 1; back = (GETB(c) << 3) + ((x >> 2) & 7) + 1; } else if (x > 31) { /* 001ccccc (cccccccc...) bbbbbbnn BBBBBBBB */ @@ -210,58 +212,3 @@ int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen) *outlen = c.out_end - c.out; return c.error; } - -#ifdef TEST -#include -#include -#include "log.h" -#define MAXSZ (10*1024*1024) - -/* Define one of these to 1 if you wish to benchmark liblzo - * instead of our native implementation. */ -#define BENCHMARK_LIBLZO_SAFE 0 -#define BENCHMARK_LIBLZO_UNSAFE 0 - -int main(int argc, char *argv[]) { - FILE *in = fopen(argv[1], "rb"); - int comp_level = argc > 2 ? atoi(argv[2]) : 0; - uint8_t *orig = av_malloc(MAXSZ + 16); - uint8_t *comp = av_malloc(2*MAXSZ + 16); - uint8_t *decomp = av_malloc(MAXSZ + 16); - size_t s = fread(orig, 1, MAXSZ, in); - lzo_uint clen = 0; - long tmp[LZO1X_MEM_COMPRESS]; - int inlen, outlen; - int i; - av_log_set_level(AV_LOG_DEBUG); - if (comp_level == 0) { - lzo1x_1_compress(orig, s, comp, &clen, tmp); - } else if (comp_level == 11) { - lzo1x_1_11_compress(orig, s, comp, &clen, tmp); - } else if (comp_level == 12) { - lzo1x_1_12_compress(orig, s, comp, &clen, tmp); - } else if (comp_level == 15) { - lzo1x_1_15_compress(orig, s, comp, &clen, tmp); - } else - lzo1x_999_compress(orig, s, comp, &clen, tmp); - for (i = 0; i < 300; i++) { -START_TIMER - inlen = clen; outlen = MAXSZ; -#if BENCHMARK_LIBLZO_SAFE - if (lzo1x_decompress_safe(comp, inlen, decomp, &outlen, NULL)) -#elif BENCHMARK_LIBLZO_UNSAFE - if (lzo1x_decompress(comp, inlen, decomp, &outlen, NULL)) -#else - if (av_lzo1x_decode(decomp, &outlen, comp, &inlen)) -#endif - av_log(NULL, AV_LOG_ERROR, "decompression error\n"); -STOP_TIMER("lzod") - } - if (memcmp(orig, decomp, s)) - av_log(NULL, AV_LOG_ERROR, "decompression incorrect\n"); - else - av_log(NULL, AV_LOG_ERROR, "decompression OK\n"); - fclose(in); - return 0; -} -#endif -- 2.51.0