mirror of
https://github.com/php/php-src.git
synced 2025-08-18 23:18:56 +02:00
- fixed those pesky memleaks
This commit is contained in:
parent
0fe495975f
commit
f040cb6492
1 changed files with 22 additions and 4 deletions
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue