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 memset(&infstream, 0,
sizeof(infstream));
89 infstream.zalloc = Z_NULL;
90 infstream.zfree = Z_NULL;
91 infstream.opaque = Z_NULL;
93 infstream.avail_in = (uInt)compressed_data_len;
94 infstream.next_in = (Bytef *)compressed_data;
95 infstream.avail_out = (uInt)decompressed_data_len;
96 infstream.next_out = (Bytef *)decompressed_data;
98 int result = inflateInit(&infstream);
104 result = inflate(&infstream, Z_NO_FLUSH);
127 inflateEnd(&infstream);
132 static void *SzAlloc(ISzAllocPtr p,
size_t size) {
return malloc(size); }
133 static void SzFree(ISzAllocPtr p,
void *
address) { free(
address); }
134 static const ISzAlloc suri_lzma_Alloc = { SzAlloc, SzFree };
142 uint8_t *compressed_data, uint32_t compressed_data_len,
143 uint8_t *decompressed_data, uint32_t decompressed_data_len)
148 LzmaDec_Construct(&strm);
151 if (compressed_data_len < LZMA_PROPS_SIZE + 8) {
155 ret = LzmaDec_Allocate(&strm, compressed_data, LZMA_PROPS_SIZE, &suri_lzma_Alloc);
161 compressed_data += LZMA_PROPS_SIZE + 8;
162 compressed_data_len -= LZMA_PROPS_SIZE + 8;
163 size_t inprocessed = compressed_data_len;
164 size_t outprocessed = decompressed_data_len;
166 ret = LzmaDec_DecodeToBuf(&strm, decompressed_data, &outprocessed,
177 case SZ_ERROR_UNSUPPORTED:
185 case SZ_ERROR_INPUT_EOF:
195 LzmaDec_Free(&strm, &suri_lzma_Alloc);