]> www.infradead.org Git - users/dwmw2/openconnect.git/commitdiff
Latest version of lzo.c
authorDimitri Papadopoulos <3350651+DimitriPapadopoulos@users.noreply.gitlab.com>
Sun, 27 Jun 2021 07:44:42 +0000 (09:44 +0200)
committerDimitri Papadopoulos <3350651-DimitriPapadopoulos@users.noreply.gitlab.com>
Mon, 28 Jun 2021 13:11:27 +0000 (15:11 +0200)
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

diff --git a/lzo.c b/lzo.c
index ac95fb9befe87fa310111d2140524cb2b8637e48..c3c2d06753b1de27526b1110e3236e32da95d29f 100644 (file)
--- a/lzo.c
+++ b/lzo.c
@@ -20,6 +20,7 @@
  */
 
 #include <string.h>
+#include <limits.h>
 
 //#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 <stdio.h>
-#include <lzo/lzo1x.h>
-#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