Skip to content

Instantly share code, notes, and snippets.

@nitram509
Last active May 16, 2016 19:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nitram509/081b5826e173910eba20097cba9dde8c to your computer and use it in GitHub Desktop.
Save nitram509/081b5826e173910eba20097cba9dde8c to your computer and use it in GitHub Desktop.
/**
* Test to re-produce https://github.com/MeteoGroup/jbrotli/issues/2
*/
#include <fcntl.h>
#include <string>
#include "../enc/compressor.h"
int main(int argc, char **argv) {
const bool is_last = true;
const bool no_flush = false;
const size_t input_size = 4096;
size_t out_size;
uint8_t input_buffer[input_size];
uint8_t *output_buffer;
memset(&input_buffer[0], 0, input_size);
brotli::BrotliParams params;
params.mode = brotli::BrotliParams::MODE_GENERIC;
params.quality = 11;
params.lgwin = 22;
params.lgblock = 0;
brotli::BrotliCompressor *compressor = new brotli::BrotliCompressor(params);
compressor->input_block_size();
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #1
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #2
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // crash on Windows 10, 64bit, MinGW, gcc v4.9.2
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #4
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #5
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #6
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #7
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #8
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #9
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // crash on Ubuntu Linux, 64bit, GCC v4.9.2-10
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // #11
compressor->CopyInputToRingBuffer(4096, &input_buffer[0]);
compressor->WriteBrotliData(is_last, no_flush, &out_size, &output_buffer); // crash on Windows 10, 64bit, Visual C++ 2015 Update v2
delete compressor;
return 0;
}
@nitram509
Copy link
Author

The loop was unrolled by intend ;-)

@nitram509
Copy link
Author

nitram509 commented May 16, 2016

Created to demonstrate google/brotli#346

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment