38 #define SWF_ZLIB_MIN_VERSION 0x06
39 #define SWF_LZMA_MIN_VERSION 0x0D
43 if (buffer_len >= 3 && buffer[1] ==
'W' && buffer[2] ==
'S') {
46 else if (buffer[0] ==
'C')
48 else if (buffer[0] ==
'Z')
75 uint32_t decompress_depth,
76 uint32_t compress_depth)
94 if (buffer_len <=
offset) {
99 uint32_t compressed_data_len = 0;
100 if (compress_depth > 0 && compress_depth <= buffer_len -
offset) {
101 compressed_data_len = compress_depth;
103 compressed_data_len = buffer_len -
offset;
123 if (decompressed_swf_len == 0) {
128 uint32_t decompressed_data_len = decompressed_swf_len;
131 if (decompress_depth > 0 && decompress_depth < decompressed_data_len)
132 decompressed_data_len = decompress_depth;
135 decompressed_data_len += 8;
139 if (out_buffer->
size < decompressed_data_len) {
143 out_buffer->
len = decompressed_data_len;
150 out_buffer->
buf[0] =
'F';
151 out_buffer->
buf[1] =
'W';
152 out_buffer->
buf[2] =
'S';
153 out_buffer->
buf[3] = swf_version;
154 memcpy(out_buffer->
buf + 4, &decompressed_swf_len, 4);
155 memset(out_buffer->
buf + 8, 0, decompressed_data_len - 8);
164 (uint8_t *)buffer +
offset, compressed_data_len,
165 out_buffer->
buf + 8, out_buffer->
len - 8);
177 compressed_data_len += 13;
178 uint8_t *compressed_data =
SCCalloc(1, compressed_data_len);
179 if (compressed_data == NULL) {
183 memcpy(compressed_data, buffer + 12, 5);
185 memset(compressed_data + 5, 0xFF, 8);
187 memcpy(compressed_data + 13, buffer +
offset, compressed_data_len - 13);
193 compressed_data, compressed_data_len,
194 out_buffer->
buf + 8, out_buffer->
len - 8);