zlib: ensure user provided memory functions are used by zlib, when given

As a bonus, this lets our MemoryTracking subsystem track zlib operations.
And also fixes a shortcut some zlib 1.2.x versions took using malloc()
instead of calloc(), which would trigger memory debuggers warnings on
memory being used without having been initialized.
This commit is contained in:
Yang Tse 2011-08-21 13:15:34 +02:00
parent 61ae7e9ce7
commit 1c400b4e5e
2 changed files with 36 additions and 1 deletions

View file

@ -133,7 +133,6 @@ print <<HEAD
* NEVER EVER edit this manually, fix the mkhelp.pl script instead!
* Generation time: $now
*/
#include "setup.h"
#ifdef USE_MANUAL
#include "hugehelp.h"
HEAD
@ -141,6 +140,9 @@ HEAD
if($c) {
print <<HEAD
#include <zlib.h>
#if defined(CURLDEBUG) && defined(CURLTOOLDEBUG)
#include "memdebug.h"
#endif
static const unsigned char hugehelpgz[] = {
/* This mumbo-jumbo is the huge help text compressed with gzip.
Thanks to this operation, the size of this data shrunk from $gzip
@ -165,6 +167,17 @@ HEAD
print <<EOF
#define BUF_SIZE 0x10000
static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
{
(void) opaque;
/* not a typo, keep it calloc() */
return (voidpf) calloc(items, size);
}
static void zfree_func(voidpf opaque, voidpf ptr)
{
(void) opaque;
free(ptr);
}
/* Decompress and send to stdout a gzip-compressed buffer */
void hugehelp(void)
{
@ -178,6 +191,8 @@ void hugehelp(void)
headerlen = 10;
memset(&z, 0, sizeof(z_stream));
z.zalloc = (alloc_func)zalloc_func;
z.zfree = (free_func)zfree_func;
z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
z.next_in = (unsigned char *)hugehelpgz + headerlen;