diff options
author | Sara Golemon <pollita@php.net> | 2004-07-21 02:38:40 +0000 |
---|---|---|
committer | Sara Golemon <pollita@php.net> | 2004-07-21 02:38:40 +0000 |
commit | ee93ed0aaa411091ff24aef965606bc160cc184f (patch) | |
tree | 87b764833c722458e2e63e95a94023291ee519ec /ext/zlib/zlib_filter.c | |
parent | a03447092d53ca433bc15753145128d629dec9d3 (diff) | |
download | php-git-ee93ed0aaa411091ff24aef965606bc160cc184f.tar.gz |
Persistent mallocs can return NULL (on failure)
Diffstat (limited to 'ext/zlib/zlib_filter.c')
-rw-r--r-- | ext/zlib/zlib_filter.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/ext/zlib/zlib_filter.c b/ext/zlib/zlib_filter.c index fea8164920..c73e10e877 100644 --- a/ext/zlib/zlib_filter.c +++ b/ext/zlib/zlib_filter.c @@ -39,7 +39,7 @@ typedef struct _php_zlib_filter_data { static voidpf php_zlib_alloc(voidpf opaque, uInt items, uInt size) { - return (voidpf)pemalloc(items * size, ((php_zlib_filter_data*)opaque)->persistent); + return (voidpf)safe_pemalloc(items, size, 0, ((php_zlib_filter_data*)opaque)->persistent); } static void php_zlib_free(voidpf opaque, voidpf address) @@ -274,6 +274,10 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f /* Create this filter */ data = pecalloc(1, sizeof(php_zlib_filter_data), persistent); + if (!data) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", data->inbuf_len); + return NULL; + } /* Circular reference */ data->strm.opaque = (voidpf) data; @@ -282,8 +286,20 @@ static php_stream_filter *php_zlib_filter_create(const char *filtername, zval *f data->strm.zfree = (free_func) php_zlib_free; data->strm.avail_out = data->outbuf_len = data->inbuf_len = 2048; data->strm.next_in = data->inbuf = (Bytef *) pemalloc(data->inbuf_len, persistent); + if (!data->inbuf) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", data->inbuf_len); + pefree(data, persistent); + return NULL; + } data->strm.avail_in = 0; data->strm.next_out = data->outbuf = (Bytef *) pemalloc(data->outbuf_len, persistent); + if (!data->outbuf) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed allocating %d bytes.", data->inbuf_len); + pefree(data->inbuf, persistent); + pefree(data, persistent); + return NULL; + } + data->strm.data_type = Z_ASCII; if (strcasecmp(filtername, "zlib.inflate") == 0) { |