From efe519c1945a3ed0ae93c8466e02fec2a6997b09 Mon Sep 17 00:00:00 2001 From: Greg Beaver Date: Fri, 25 Apr 2008 04:34:03 +0000 Subject: [PATCH] fix access fault on windows, fix memleak on all platforms when accessing a temp directory via offsetGet --- ext/phar/phar_object.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c index 810da7a734..0d01c57c3e 100755 --- a/ext/phar/phar_object.c +++ b/ext/phar/phar_object.c @@ -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); -- 2.50.1