Skip to content
Snippets Groups Projects
Commit fd7b7f14 authored by Jory A. Pratt's avatar Jory A. Pratt Committed by Matt Turner
Browse files

util: Heap-allocate 256K zlib buffer

The disk cache code tries to allocate a 256 Kbyte buffer on the stack.
Since musl only gives 80 Kbyte of stack space per thread, this causes a
trap.

See https://wiki.musl-libc.org/functional-differences-from-glibc.html#Thread-stack-size



(In musl-1.1.21 the default stack size has increased to 128K)

[mattst88]: Original author unknown, but I think this is small enough
            that it is not copyrightable.
Reviewed-by: default avatarMatt Turner <mattst88@gmail.com>
Reviewed-by: default avatarEric Anholt <eric@anholt.net>
Reviewed-by: default avatarEric Engestrom <eric.engestrom@intel.com>
parent 9c19d07b
No related branches found
No related tags found
No related merge requests found
......@@ -732,7 +732,7 @@ static size_t
deflate_and_write_to_disk(const void *in_data, size_t in_data_size, int dest,
const char *filename)
{
unsigned char out[BUFSIZE];
unsigned char *out;
/* allocate deflate state */
z_stream strm;
......@@ -749,6 +749,11 @@ deflate_and_write_to_disk(const void *in_data, size_t in_data_size, int dest,
/* compress until end of in_data */
size_t compressed_size = 0;
int flush;
out = malloc(BUFSIZE * sizeof(unsigned char));
if (out == NULL)
return 0;
do {
int remaining = in_data_size - BUFSIZE;
flush = remaining > 0 ? Z_NO_FLUSH : Z_FINISH;
......@@ -770,6 +775,7 @@ deflate_and_write_to_disk(const void *in_data, size_t in_data_size, int dest,
ssize_t written = write_all(dest, out, have);
if (written == -1) {
(void)deflateEnd(&strm);
free(out);
return 0;
}
} while (strm.avail_out == 0);
......@@ -784,6 +790,7 @@ deflate_and_write_to_disk(const void *in_data, size_t in_data_size, int dest,
/* clean up and return */
(void)deflateEnd(&strm);
free(out);
return compressed_size;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment