37 #include <htp/lzma/LzmaDec.h> 39 #define MAX_SWF_DECOMPRESSED_LEN 50000000 45 const uint32_t buffer_len)
51 uint32_t a = buffer[4];
52 uint32_t b = buffer[5];
53 uint32_t c = buffer[6];
54 uint32_t d = buffer[7];
56 uint32_t value = (((a & 0xff) << 24UL) |
57 ((b & 0xff) << 16UL) |
61 uint32_t
len = (((value >> 24) & 0x000000FFUL) |
62 ((value >> 8) & 0x0000FF00UL) |
63 ((value << 8) & 0x00FF0000UL) |
64 ((value << 24) & 0xFF000000UL));
83 uint8_t *compressed_data, uint32_t compressed_data_len,
84 uint8_t *decompressed_data, uint32_t decompressed_data_len)
88 infstream.zalloc = Z_NULL;
89 infstream.zfree = Z_NULL;
90 infstream.opaque = Z_NULL;
92 infstream.avail_in = (uInt)compressed_data_len;
93 infstream.next_in = (Bytef *)compressed_data;
94 infstream.avail_out = (uInt)decompressed_data_len;
95 infstream.next_out = (Bytef *)decompressed_data;
97 inflateInit(&infstream);
98 int result = inflate(&infstream, Z_NO_FLUSH);
121 inflateEnd(&infstream);
126 static void *SzAlloc(ISzAllocPtr p,
size_t size) {
return malloc(size); }
127 static void SzFree(ISzAllocPtr p,
void *
address) { free(address); }
128 static const ISzAlloc suri_lzma_Alloc = { SzAlloc, SzFree };
136 uint8_t *compressed_data, uint32_t compressed_data_len,
137 uint8_t *decompressed_data, uint32_t decompressed_data_len)
142 LzmaDec_Construct(&strm);
145 if (compressed_data_len < LZMA_PROPS_SIZE + 8) {
149 ret = LzmaDec_Allocate(&strm, compressed_data, LZMA_PROPS_SIZE, &suri_lzma_Alloc);
155 compressed_data += LZMA_PROPS_SIZE + 8;
156 compressed_data_len -= LZMA_PROPS_SIZE + 8;
157 size_t inprocessed = compressed_data_len;
158 size_t outprocessed = decompressed_data_len;
160 ret = LzmaDec_DecodeToBuf(&strm, decompressed_data, &outprocessed,
171 case SZ_ERROR_UNSUPPORTED:
179 case SZ_ERROR_INPUT_EOF:
189 LzmaDec_Free(&strm, &suri_lzma_Alloc);
void DetectEngineSetEvent(DetectEngineThreadCtx *det_ctx, uint8_t e)
int FileSwfLzmaDecompression(DetectEngineThreadCtx *det_ctx, uint8_t *compressed_data, uint32_t compressed_data_len, uint8_t *decompressed_data, uint32_t decompressed_data_len)
uint32_t FileGetSwfDecompressedLen(const uint8_t *buffer, const uint32_t buffer_len)
#define MAX_SWF_DECOMPRESSED_LEN
int FileSwfZlibDecompression(DetectEngineThreadCtx *det_ctx, uint8_t *compressed_data, uint32_t compressed_data_len, uint8_t *decompressed_data, uint32_t decompressed_data_len)
uint8_t FileGetSwfVersion(const uint8_t *buffer, const uint32_t buffer_len)