pollita Tue Jul 20 01:08:53 2004 EDT
Modified files:
/php-src/ext/zlib zlib_filter.c
Log:
Make persistency safe
http://cvs.php.net/diff.php/php-src/ext/zlib/zlib_filter.c?r1=1.2&r2=1.3&ty=u
Index: php-src/ext/zlib/zlib_filter.c
diff -u php-src/ext/zlib/zlib_filter.c:1.2 php-src/ext/zlib/zlib_filter.c:1.3
--- php-src/ext/zlib/zlib_filter.c:1.2 Sun Jul 18 09:23:40 2004
+++ php-src/ext/zlib/zlib_filter.c Tue Jul 20 01:08:52 2004
@@ -16,14 +16,16 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zlib_filter.c,v 1.2 2004/07/18 13:23:40 wez Exp $ */
+/* $Id: zlib_filter.c,v 1.3 2004/07/20 05:08:52 pollita Exp $ */
#include "php.h"
#include "php_zlib.h"
/* {{{ data structure */
+/* Passed as opaque in malloc callbacks */
typedef struct _php_zlib_filter_data {
+ int persistent;
z_stream strm;
char *inbuf;
size_t inbuf_len;
@@ -37,12 +39,12 @@
static voidpf php_zlib_alloc(voidpf opaque, uInt items, uInt size)
{
- return (voidpf)safe_emalloc(items, size, 0);
+ return (voidpf)pemalloc(items * size,
((php_zlib_filter_data*)opaque)->persistent);
}
static void php_zlib_free(voidpf opaque, voidpf address)
{
- efree((void*)address);
+ pefree((void*)address, ((php_zlib_filter_data*)opaque)->persistent);
}
/* }}} */
@@ -140,9 +142,9 @@
if (thisfilter && thisfilter->abstract) {
php_zlib_filter_data *data = thisfilter->abstract;
inflateEnd(&(data->strm));
- efree(data->inbuf);
- efree(data->outbuf);
- efree(data);
+ pefree(data->inbuf, data->persistent);
+ pefree(data->outbuf, data->persistent);
+ pefree(data, data->persistent);
}
}
@@ -248,9 +250,9 @@
if (thisfilter && thisfilter->abstract) {
php_zlib_filter_data *data = thisfilter->abstract;
deflateEnd(&(data->strm));
- efree(data->inbuf);
- efree(data->outbuf);
- efree(data);
+ pefree(data->inbuf, data->persistent);
+ pefree(data->outbuf, data->persistent);
+ pefree(data, data->persistent);
}
}
@@ -270,13 +272,8 @@
php_zlib_filter_data *data;
int status;
- if (persistent) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "this filter is not safe
to use with a persistent stream");
- return NULL;
- }
-
/* Create this filter */
- data = ecalloc(1, sizeof(php_zlib_filter_data));
+ data = pecalloc(1, sizeof(php_zlib_filter_data), persistent);
/* Circular reference */
data->strm.opaque = (voidpf) data;
@@ -284,9 +281,9 @@
data->strm.zalloc = (alloc_func) php_zlib_alloc;
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 *) emalloc(data->inbuf_len);
+ data->strm.next_in = data->inbuf = (Bytef *) pemalloc(data->inbuf_len,
persistent);
data->strm.avail_in = 0;
- data->strm.next_out = data->outbuf = (Bytef *) emalloc(data->outbuf_len);
+ data->strm.next_out = data->outbuf = (Bytef *) pemalloc(data->outbuf_len,
persistent);
data->strm.data_type = Z_ASCII;
if (strcasecmp(filtername, "zlib.inflate") == 0) {
@@ -384,9 +381,9 @@
if (status != Z_OK) {
/* Unspecified (probably strm) error, let stream-filter error do its
own whining */
- efree(data->strm.next_in);
- efree(data->strm.next_out);
- efree(data);
+ pefree(data->strm.next_in, persistent);
+ pefree(data->strm.next_out, persistent);
+ pefree(data, persistent);
return NULL;
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php