- fixed those pesky memleaks

This commit is contained in:
Steph Fox 2008-04-26 01:52:22 +00:00
parent 0fe495975f
commit f040cb6492

View file

@ -1304,7 +1304,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
phar_entry_data *data; phar_entry_data *data;
php_stream *fp; php_stream *fp;
long contents_len; long contents_len;
char *fname, *error, *str_key, *base = p_obj->b, *opened, *save = NULL; char *fname, *error, *str_key, *base = p_obj->b, *opened, *save = NULL, *temp = NULL;
zend_class_entry *ce = p_obj->c; zend_class_entry *ce = p_obj->c;
phar_archive_object *phar_obj = p_obj->p; phar_archive_object *phar_obj = p_obj->p;
char *str = "[stream]"; char *str = "[stream]";
@ -1382,9 +1382,9 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
goto phar_spl_fileinfo; goto phar_spl_fileinfo;
case SPL_FS_INFO: case SPL_FS_INFO:
case SPL_FS_FILE: case SPL_FS_FILE:
/* FIXME: memleak here */
fname = expand_filepath(intern->file_name, NULL TSRMLS_CC); fname = expand_filepath(intern->file_name, NULL TSRMLS_CC);
fname_len = strlen(fname); fname_len = strlen(fname);
save = fname;
is_splfileinfo = 1; is_splfileinfo = 1;
goto phar_spl_fileinfo; goto phar_spl_fileinfo;
} }
@ -1400,14 +1400,15 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
phar_spl_fileinfo: phar_spl_fileinfo:
if (base_len) { if (base_len) {
/* FIXME: memleak here */ temp = expand_filepath(base, NULL TSRMLS_CC);
base = expand_filepath(base, NULL TSRMLS_CC); base = temp;
base_len = strlen(base); base_len = strlen(base);
if (strstr(fname, base)) { if (strstr(fname, base)) {
str_key_len = fname_len - base_len; str_key_len = fname_len - base_len;
if (str_key_len <= 0) { if (str_key_len <= 0) {
if (save) { if (save) {
efree(save); efree(save);
efree(temp);
} }
return ZEND_HASH_APPLY_KEEP; return ZEND_HASH_APPLY_KEEP;
} }
@ -1416,6 +1417,7 @@ phar_spl_fileinfo:
zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %s returned a path \"%s\" that is not in the base directory \"%s\"", ce->name, fname, base); zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %s returned a path \"%s\" that is not in the base directory \"%s\"", ce->name, fname, base);
if (save) { if (save) {
efree(save); efree(save);
efree(temp);
} }
return ZEND_HASH_APPLY_STOP; return ZEND_HASH_APPLY_STOP;
} }
@ -1442,6 +1444,9 @@ phar_spl_fileinfo:
if (save) { if (save) {
efree(save); efree(save);
} }
if (temp) {
efree(temp);
}
return ZEND_HASH_APPLY_STOP; return ZEND_HASH_APPLY_STOP;
} }
#endif #endif
@ -1451,6 +1456,9 @@ phar_spl_fileinfo:
if (save) { if (save) {
efree(save); efree(save);
} }
if (temp) {
efree(temp);
}
return ZEND_HASH_APPLY_STOP; return ZEND_HASH_APPLY_STOP;
} }
@ -1461,6 +1469,9 @@ phar_spl_fileinfo:
if (save) { if (save) {
efree(save); efree(save);
} }
if (temp) {
efree(temp);
}
return ZEND_HASH_APPLY_STOP; return ZEND_HASH_APPLY_STOP;
} }
@ -1471,6 +1482,9 @@ after_open_fp:
if (save) { if (save) {
efree(save); efree(save);
} }
if (temp) {
efree(temp);
}
if (close_fp) { if (close_fp) {
php_stream_close(fp); php_stream_close(fp);
} }
@ -1486,9 +1500,13 @@ after_open_fp:
} }
add_assoc_string(p_obj->ret, str_key, opened, 0); add_assoc_string(p_obj->ret, str_key, opened, 0);
if (save) { if (save) {
efree(save); efree(save);
} }
if (temp) {
efree(temp);
}
data->internal_file->compressed_filesize = data->internal_file->uncompressed_filesize = contents_len; data->internal_file->compressed_filesize = data->internal_file->uncompressed_filesize = contents_len;
phar_entry_delref(data TSRMLS_CC); phar_entry_delref(data TSRMLS_CC);