LIBS="${TMPLIBS} -lz"
fi
- # liblzma
- enable_liblzma=no
-
- AC_ARG_WITH(liblzma_includes,
- [ --with-liblzma-includes=DIR liblzma include directory],
- [with_liblzma_includes="$withval"],[with_liblzma_includes="no"])
- AC_ARG_WITH(liblzma_libraries,
- [ --with-liblzma-libraries=DIR liblzma library directory],
- [with_liblzma_libraries="$withval"],[with_liblzma_libraries="no"])
-
- if test "$with_liblzma_includes" != "no"; then
- CPPFLAGS="${CPPFLAGS} -I${with_liblzma_includes}"
- fi
- TMPLIBS="${LIBS}"
-
- AC_CHECK_HEADER(lzma.h,
- AC_CHECK_LIB(lzma,lzma_code,[
- AC_DEFINE([HAVE_LIBLZMA],[1],[liblzma available])
- LIBLZMA="yes"
- if test "$LIBLZMA" = "yes"; then
- if test "$with_liblzma_libraries" != "no"; then
- LDFLAGS="${LDFLAGS} -L${with_liblzma_libraries}"
- LIBS="${TMPLIBS} -llzma"
- else
- LIBS="${TMPLIBS} -llzma"
- fi
- fi]),LIBLZMA="no")
-
- if test "$LIBLZMA" != "yes"; then
- echo
- echo " Error! liblzma library not found."
- echo " Debian/Ubuntu: apt install liblzma-dev"
- echo " Fedora: dnf install xz-devel"
- echo " CentOS/RHEL: yum install xz-devel"
- echo
- exit 1
- fi
- enable_liblzma=yes
- LIBS="${TMPLIBS} -llzma"
-
#libpcre
AC_ARG_WITH(libpcre_includes,
[ --with-libpcre-includes=DIR libpcre include directory],
libnss support: ${enable_nss}
libnspr support: ${enable_nspr}
libjansson support: ${enable_jansson}
- liblzma support: ${enable_liblzma}
hiredis support: ${enable_hiredis}
hiredis async with libevent: ${enable_hiredis_async}
Prelude support: ${enable_prelude}
#include <zlib.h>
-#include <lzma.h>
+#include <htp/lzma/LzmaDec.h>
#define MAX_SWF_DECOMPRESSED_LEN 50000000
/*
return ret;
}
+static void *SzAlloc(ISzAllocPtr p, size_t size) { return malloc(size); }
+static void SzFree(ISzAllocPtr p, void *address) { free(address); }
+static const ISzAlloc suri_lzma_Alloc = { SzAlloc, SzFree };
+
/* ZWS format */
/*
* | 4 bytes | 4 bytes | 4 bytes | 5 bytes | n bytes | 6 bytes |
uint8_t *compressed_data, uint32_t compressed_data_len,
uint8_t *decompressed_data, uint32_t decompressed_data_len)
{
- int ret = 1;
- lzma_stream strm = LZMA_STREAM_INIT;
- lzma_ret result = lzma_alone_decoder(&strm, UINT64_MAX /* memlimit */);
- if (result != LZMA_OK) {
+ int ret = 0;
+
+ CLzmaDec strm;
+ LzmaDec_Construct(&strm);
+ ELzmaStatus status;
+
+ if (compressed_data_len < LZMA_PROPS_SIZE + 8) {
+ DetectEngineSetEvent(det_ctx, FILE_DECODER_EVENT_LZMA_FORMAT_ERROR);
+ return 0;
+ }
+ ret = LzmaDec_Allocate(&strm, compressed_data, LZMA_PROPS_SIZE, &suri_lzma_Alloc);
+ if (ret != SZ_OK) {
DetectEngineSetEvent(det_ctx, FILE_DECODER_EVENT_LZMA_DECODER_ERROR);
return 0;
}
-
- strm.avail_in = compressed_data_len;
- strm.next_in = compressed_data;
- strm.avail_out = decompressed_data_len;
- strm.next_out = decompressed_data;
-
- result = lzma_code(&strm, LZMA_RUN);
- switch(result) {
- case LZMA_STREAM_END:
+ LzmaDec_Init(&strm);
+ compressed_data += LZMA_PROPS_SIZE + 8;
+ compressed_data_len -= LZMA_PROPS_SIZE + 8;
+ size_t inprocessed = compressed_data_len;
+ size_t outprocessed = decompressed_data_len;
+
+ ret = LzmaDec_DecodeToBuf(&strm, decompressed_data, &outprocessed,
+ compressed_data, &inprocessed, LZMA_FINISH_ANY, &status, MAX_SWF_DECOMPRESSED_LEN);
+
+ switch(ret) {
+ case SZ_OK:
+ ret = 1;
break;
- case LZMA_OK:
- break;
- case LZMA_MEMLIMIT_ERROR:
+ case SZ_ERROR_MEM:
DetectEngineSetEvent(det_ctx, FILE_DECODER_EVENT_LZMA_MEMLIMIT_ERROR);
ret = 0;
break;
- case LZMA_OPTIONS_ERROR:
+ case SZ_ERROR_UNSUPPORTED:
DetectEngineSetEvent(det_ctx, FILE_DECODER_EVENT_LZMA_OPTIONS_ERROR);
ret = 0;
break;
- case LZMA_FORMAT_ERROR:
- DetectEngineSetEvent(det_ctx, FILE_DECODER_EVENT_LZMA_FORMAT_ERROR);
- ret = 0;
- break;
- case LZMA_DATA_ERROR:
+ case SZ_ERROR_DATA:
DetectEngineSetEvent(det_ctx, FILE_DECODER_EVENT_LZMA_DATA_ERROR);
ret = 0;
break;
- case LZMA_BUF_ERROR:
+ case SZ_ERROR_INPUT_EOF:
DetectEngineSetEvent(det_ctx, FILE_DECODER_EVENT_LZMA_BUF_ERROR);
ret = 0;
break;
break;
}
- lzma_end(&strm);
+ LzmaDec_Free(&strm, &suri_lzma_Alloc);
return ret;
}