If the entropy is high enough, the data may not be compressable,
or at least not compressable enough to make room for the header.
If the compression level is 0, the "compressed" is guaranteed
to take more room than the "uncompressed" data.
-const char cgi_rcs[] = "$Id: cgi.c,v 1.137 2011/07/03 17:55:23 fabiankeil Exp $";
+const char cgi_rcs[] = "$Id: cgi.c,v 1.138 2011/07/08 13:27:31 fabiankeil Exp $";
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/cgi.c,v $
/*********************************************************************
*
* File : $Source: /cvsroot/ijbswa/current/cgi.c,v $
char *compress_buffer(char *buffer, size_t *buffer_length, int compression_level)
{
char *compressed_buffer;
char *compress_buffer(char *buffer, size_t *buffer_length, int compression_level)
{
char *compressed_buffer;
- size_t new_length = *buffer_length;
assert(-1 <= compression_level && compression_level <= 9);
assert(-1 <= compression_level && compression_level <= 9);
+ /*
+ * If the compression level is 0 or if the entropy
+ * is high, the "compressing" data will take more
+ * room then the uncompressed data due to the zlib
+ * overhead.
+ *
+ * XXX: The overhead isn't constant and 30 bytes
+ * may not be enough for everybody
+ */
+ new_length = *buffer_length + 30;
+
compressed_buffer = malloc(new_length);
if (NULL == compressed_buffer)
{
compressed_buffer = malloc(new_length);
if (NULL == compressed_buffer)
{