]> granicus.if.org Git - php/commitdiff
- Fix memleaks
authorMarcus Boerger <helly@php.net>
Sun, 12 Nov 2006 17:37:51 +0000 (17:37 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 12 Nov 2006 17:37:51 +0000 (17:37 +0000)
ext/phar/phar.c

index 3f63e139e4e60b15b96afbe8dfbb2a9ae0e50978..31b5929acced1052e83286cded01ecc368293ab7 100644 (file)
@@ -686,6 +686,8 @@ static php_url* phar_open_url(php_stream_wrapper *wrapper, char *filename, char
                
                if (phar_split_fname(filename, strlen(filename), &arch, &arch_len, &entry, &entry_len TSRMLS_CC) == FAILURE) {
                        php_stream_wrapper_log_error(wrapper, options TSRMLS_CC, "phar error: invalid url \"%s\" (cannot contain .phar.php and .phar.gz)", filename);
+                       efree(arch);
+                       efree(entry);
                        return NULL;
                }
                resource = ecalloc(1, sizeof(php_url));
@@ -1656,23 +1658,32 @@ PHP_METHOD(PharFileInfo, __construct)
        }
 
        if (phar_split_fname(fname, fname_len, &arch, &arch_len, &entry, &entry_len TSRMLS_CC) == FAILURE) {
+               efree(arch);
+               efree(entry);
                zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
                        "Cannot access phar file entry '%s'", fname);
                return;
        }
 
        if (phar_open_filename(arch, arch_len, NULL, 0, &phar_data TSRMLS_CC) == FAILURE) {
+               efree(arch);
+               efree(entry);
                zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
                        "Cannot open phar file '%s'", fname);
                return;
        }
 
        if ((entry_info = phar_get_entry_info(phar_data, entry, entry_len TSRMLS_CC)) == NULL) {
+               efree(arch);
                zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC,
                        "Cannot access phar file entry '%s' in archive '%s'", entry, arch);
+               efree(entry);
                return;
        }
 
+       efree(arch);
+       efree(entry);
+
        entry_obj->ent.entry = entry_info;
 
        INIT_PZVAL(&arg1);