summaryrefslogtreecommitdiff
path: root/ext/zlib/zlib_filter.c
diff options
context:
space:
mode:
authorSara Golemon <pollita@php.net>2004-07-21 02:38:40 +0000
committerSara Golemon <pollita@php.net>2004-07-21 02:38:40 +0000
commitee93ed0aaa411091ff24aef965606bc160cc184f (patch)
tree87b764833c722458e2e63e95a94023291ee519ec /ext/zlib/zlib_filter.c
parenta03447092d53ca433bc15753145128d629dec9d3 (diff)
downloadphp-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.c18
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) {