summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Beaver <cellog@php.net>2005-12-05 04:21:36 +0000
committerGreg Beaver <cellog@php.net>2005-12-05 04:21:36 +0000
commit92846c03d4c747c83135ffae706357faf39ba697 (patch)
tree8e0fbdd008eb52480904221d31f4152374e9af51
parent852eec498f5faabed6abc6118d84ac489fe1fd99 (diff)
downloadphp-git-92846c03d4c747c83135ffae706357faf39ba697.tar.gz
kill memory leaks
-rw-r--r--ext/phar/phar.c45
1 files changed, 23 insertions, 22 deletions
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index 337e718520..4e8a0191aa 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -58,6 +58,7 @@ static void destroy_phar_data(void *pDest)
{
phar_file_data *data = (phar_file_data *) pDest;
zend_hash_destroy(data->manifest);
+ FREE_HASHTABLE(data->manifest);
}
static void destroy_phar_manifest(void *pDest)
@@ -99,9 +100,9 @@ function_entry phar_functions[] = {
PHP_METHOD(PHP_Archive, mapPhar)
{
char *fname, *alias, *buffer, *endbuffer, *unpack_var, *savebuf;
- phar_file_data *mydata;
+ phar_file_data mydata;
zend_bool compressed;
- phar_manifest_entry *entry;
+ phar_manifest_entry entry;
HashTable *manifest;
int alias_len, i;
long halt_offset;
@@ -127,6 +128,7 @@ PHP_METHOD(PHP_Archive, mapPhar)
zend_get_constant("__COMPILER_HALT_OFFSET__", 24, halt_constant);
halt_offset = Z_LVAL(*halt_constant);
zval_dtor(halt_constant);
+ FREE_ZVAL(halt_constant);
// IGNORE_URL|STREAM_MUST_SEEK|REPORT_ERRORS
fp = VCWD_FOPEN(fname, "rb");
@@ -190,34 +192,32 @@ MAPPHAR_ALLOC_FAILURE:
// extract the number of entries
PHAR_GET_VAL(manifest_count)
// set up our manifest
- manifest = (HashTable *) emalloc(sizeof(HashTable));
+ ALLOC_HASHTABLE(manifest);
zend_hash_init(manifest, sizeof(phar_manifest_entry),
zend_get_hash_value, destroy_phar_manifest, 0);
for (manifest_index = 0; manifest_index < manifest_count; manifest_index++) {
if (buffer > endbuffer) goto MAPPHAR_FAILURE;
- entry = (phar_manifest_entry *) emalloc(sizeof(phar_manifest_entry));
- PHAR_GET_VAL(entry->filename_len)
- entry->filename = (char *) emalloc(entry->filename_len + 1);
- memcpy(entry->filename, buffer, entry->filename_len);
- *(entry->filename + entry->filename_len) = '\0';
- buffer += entry->filename_len;
- PHAR_GET_VAL(entry->uncompressed_filesize)
- PHAR_GET_VAL(entry->timestamp)
- PHAR_GET_VAL(entry->offset_within_phar)
- PHAR_GET_VAL(entry->compressed_filesize)
- zend_hash_add(manifest, entry->filename, entry->filename_len, entry,
+ PHAR_GET_VAL(entry.filename_len)
+ entry.filename = (char *) emalloc(entry.filename_len + 1);
+ memcpy(entry.filename, buffer, entry.filename_len);
+ entry.filename[entry.filename_len] = '\0';
+ buffer += entry.filename_len;
+ PHAR_GET_VAL(entry.uncompressed_filesize)
+ PHAR_GET_VAL(entry.timestamp)
+ PHAR_GET_VAL(entry.offset_within_phar)
+ PHAR_GET_VAL(entry.compressed_filesize)
+ zend_hash_add(manifest, entry.filename, entry.filename_len, &entry,
sizeof(phar_manifest_entry), NULL);
}
#undef PHAR_GET_VAL
- mydata = (phar_file_data *) emalloc(sizeof(phar_file_data));
- mydata->file = fname;
- mydata->alias = alias;
- mydata->alias_len = alias_len;
- mydata->internal_file_start = manifest_len + halt_offset + 4;
- mydata->is_compressed = compressed;
- mydata->manifest = manifest;
- zend_hash_add(&(PHAR_G(phar_data)), alias, alias_len, mydata,
+ mydata.file = fname;
+ mydata.alias = alias;
+ mydata.alias_len = alias_len;
+ mydata.internal_file_start = manifest_len + halt_offset + 4;
+ mydata.is_compressed = compressed;
+ mydata.manifest = manifest;
+ zend_hash_add(&(PHAR_G(phar_data)), alias, alias_len, &mydata,
sizeof(phar_file_data), NULL);
efree(savebuf);
fclose(fp);
@@ -572,6 +572,7 @@ PHAR_ZLIB_ERROR:
efree(idata);
return NULL;
}
+ efree(savebuf);
// check length
if (actual_length != idata->internal_file->uncompressed_filesize) {
goto PHAR_ZLIB_ERROR;