From 26aea21e5de2a0fad48fcb7f372b96f53435d750 Mon Sep 17 00:00:00 2001 From: Marco Dickert Date: Mon, 11 May 2020 17:07:18 +0200 Subject: [PATCH] Fix: tmp_dir relative to __DIR__ (zipnload) Signed-off-by: Marco Dickert --- build/libifm.php | 16 ++++++++-------- ifm.php | 16 ++++++++-------- src/main.php | 15 +++++++-------- 3 files changed, 23 insertions(+), 24 deletions(-) diff --git a/build/libifm.php b/build/libifm.php index 3cae309..33b3264 100644 --- a/build/libifm.php +++ b/build/libifm.php @@ -3884,8 +3884,9 @@ f00bar; elseif ( ! $this->isFilenameValid( $d['filename'] ) ) $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['invalid_filename'] ) ); else { + trigger_error("foo bar"); unset( $zip ); - $dfile = $this->pathCombine( $this->config['tmp_dir'], uniqid( "ifm-tmp-" ) . ".zip" ); // temporary filename + $dfile = $this->pathCombine( __DIR__, $this->config['tmp_dir'], uniqid( "ifm-tmp-" ) . ".zip" ); // temporary filename try { IFMArchive::createZip( realpath( $d['filename'] ), $dfile ); if( $d['filename'] == "." ) { @@ -4307,13 +4308,12 @@ f00bar; } // combines two parts to a valid path - private function pathCombine( $a, $b ) { - if( trim( $a ) == "" && trim( $b ) == "" ) - return ""; - elseif( trim( $a ) == "" ) - return ltrim( $b, '/' ); - else - return rtrim( $a, '/' ) . '/' . trim( $b, '/' ); + private function pathCombine(...$parts) { + $ret = ""; + foreach($parts as $part) + if (trim($part) != "") + $ret .= (empty($ret)?rtrim($part,"/"):trim($part, '/'))."/"; + return rtrim($ret, "/"); } // check if filename is allowed diff --git a/ifm.php b/ifm.php index 1066607..bc5a933 100644 --- a/ifm.php +++ b/ifm.php @@ -3884,8 +3884,9 @@ f00bar; elseif ( ! $this->isFilenameValid( $d['filename'] ) ) $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['invalid_filename'] ) ); else { + trigger_error("foo bar"); unset( $zip ); - $dfile = $this->pathCombine( $this->config['tmp_dir'], uniqid( "ifm-tmp-" ) . ".zip" ); // temporary filename + $dfile = $this->pathCombine( __DIR__, $this->config['tmp_dir'], uniqid( "ifm-tmp-" ) . ".zip" ); // temporary filename try { IFMArchive::createZip( realpath( $d['filename'] ), $dfile ); if( $d['filename'] == "." ) { @@ -4307,13 +4308,12 @@ f00bar; } // combines two parts to a valid path - private function pathCombine( $a, $b ) { - if( trim( $a ) == "" && trim( $b ) == "" ) - return ""; - elseif( trim( $a ) == "" ) - return ltrim( $b, '/' ); - else - return rtrim( $a, '/' ) . '/' . trim( $b, '/' ); + private function pathCombine(...$parts) { + $ret = ""; + foreach($parts as $part) + if (trim($part) != "") + $ret .= (empty($ret)?rtrim($part,"/"):trim($part, '/'))."/"; + return rtrim($ret, "/"); } // check if filename is allowed diff --git a/src/main.php b/src/main.php index d9f5ced..ef2c0b0 100644 --- a/src/main.php +++ b/src/main.php @@ -820,7 +820,7 @@ f00bar; $this->jsonResponse( array( "status" => "ERROR", "message" => $this->l['invalid_filename'] ) ); else { unset( $zip ); - $dfile = $this->pathCombine( $this->config['tmp_dir'], uniqid( "ifm-tmp-" ) . ".zip" ); // temporary filename + $dfile = $this->pathCombine( __DIR__, $this->config['tmp_dir'], uniqid( "ifm-tmp-" ) . ".zip" ); // temporary filename try { IFMArchive::createZip( realpath( $d['filename'] ), $dfile ); if( $d['filename'] == "." ) { @@ -1242,13 +1242,12 @@ f00bar; } // combines two parts to a valid path - private function pathCombine( $a, $b ) { - if( trim( $a ) == "" && trim( $b ) == "" ) - return ""; - elseif( trim( $a ) == "" ) - return ltrim( $b, '/' ); - else - return rtrim( $a, '/' ) . '/' . trim( $b, '/' ); + private function pathCombine(...$parts) { + $ret = ""; + foreach($parts as $part) + if (trim($part) != "") + $ret .= (empty($ret)?rtrim($part,"/"):trim($part, '/'))."/"; + return rtrim($ret, "/"); } // check if filename is allowed