]> granicus.if.org Git - php/commitdiff
fix access fault on windows, fix memleak on all platforms when accessing a temp direc...
authorGreg Beaver <cellog@php.net>
Fri, 25 Apr 2008 04:34:03 +0000 (04:34 +0000)
committerGreg Beaver <cellog@php.net>
Fri, 25 Apr 2008 04:34:03 +0000 (04:34 +0000)
ext/phar/phar_object.c

index 810da7a7343159e206a0d42a253c67cc169736f9..0d01c57c3ebdf4426867408ffc08f57d87c519b1 100755 (executable)
@@ -1183,6 +1183,7 @@ PHP_METHOD(Phar, __construct)
 #ifdef PHP_WIN32
        } else {
                arch = estrndup(fname, fname_len);
+               arch_len = fname_len;
                save_fname = fname;
                fname = arch;
                phar_unixify_path_separators(arch, arch_len);
@@ -2906,15 +2907,20 @@ PHP_METHOD(Phar, offsetGet)
        char *fname, *error;
        int fname_len;
        zval *zfname;
+       phar_entry_info *entry;
        PHAR_ARCHIVE_OBJECT();
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &fname, &fname_len) == FAILURE) {
                return;
        }
        
-       if (!phar_get_entry_info_dir(phar_obj->arc.archive, fname, fname_len, 1, &error TSRMLS_CC)) {
+       if (!(entry = phar_get_entry_info_dir(phar_obj->arc.archive, fname, fname_len, 1, &error TSRMLS_CC))) {
                zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Entry %s does not exist%s%s", fname, error?", ":"", error?error:"");
        } else {
+               if (entry->is_temp_dir) {
+                       efree(entry->filename);
+                       efree(entry);
+               }
                fname_len = spprintf(&fname, 0, "phar://%s/%s", phar_obj->arc.archive->fname, fname);
                MAKE_STD_ZVAL(zfname);
                ZVAL_STRINGL(zfname, fname, fname_len, 0);