J3 Issue No Code Attached Yet
avatar stAn47
stAn47
16 Oct 2017

Steps to reproduce the issue

Hello friends, it would be nice if JFile::copy checked if the src and dest paths are the same. Right now it gives an error and thus installer or other dependencies fail upon such a case.

Usage:
during the development we are using an installer path in an component directory such as /administrator/components/com_test/install/systempluginname

which is symlinked to
/plugins/system/systempluginname

upon changes in the component BE config, it either enables or disables particular plugins that are used per the component's logic, but mainly it makes sure that the plugins is up-to-date by updating it with the Joomla installer.

it would be nice if JFile::copy did not return an error upon same src and dest especially if those directories are symlinked and are seen as the same by "realpath".

i do not really know how to do a PR, but i would suggest:

$src = realpath($src); 
$dest = realpath($dest); 
if ($src === $dest) return true; 

into:
\libraries\joomla\filesystem\file.php

on Joomla 3.8.1

at about line 99

full function would then look like:

/**
	 * Copies a file
	 *
	 * @param   string   $src          The path to the source file
	 * @param   string   $dest         The path to the destination file
	 * @param   string   $path         An optional base path to prefix to the file names
	 * @param   boolean  $use_streams  True to use streams
	 *
	 * @return  boolean  True on success
	 *
	 * @since   11.1
	 */
	public static function copy($src, $dest, $path = null, $use_streams = false)
	{
		
		
		$pathObject = new JFilesystemWrapperPath;

		// Prepend a base path if it exists
		if ($path)
		{
			$src = $pathObject->clean($path . '/' . $src);
			$dest = $pathObject->clean($path . '/' . $dest);
			
		}
		
		$src = realpath($src); 
		$dest = realpath($dest); 
		if ($src === $dest) return true; 
		
		// Check src path
		if (!is_readable($src))
		{
			JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_JFILE_FIND_COPY', $src), JLog::WARNING, 'jerror');

			return false;
		}

		if ($use_streams)
		{
			$stream = JFactory::getStream();

			if (!$stream->copy($src, $dest))
			{
				JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_JFILE_STREAMS', $src, $dest, $stream->getError()), JLog::WARNING, 'jerror');

				return false;
			}

			return true;
		}
		else
		{
			$FTPOptions = JClientHelper::getCredentials('ftp');

			if ($FTPOptions['enabled'] == 1)
			{
				// Connect the FTP client
				$ftp = JClientFtp::getInstance($FTPOptions['host'], $FTPOptions['port'], array(), $FTPOptions['user'], $FTPOptions['pass']);

				// If the parent folder doesn't exist we must create it
				if (!file_exists(dirname($dest)))
				{
					$folderObject = new JFilesystemWrapperFolder;
					$folderObject->create(dirname($dest));
				}

				// Translate the destination path for the FTP account
				$dest = $pathObject->clean(str_replace(JPATH_ROOT, $FTPOptions['root'], $dest), '/');

				if (!$ftp->store($src, $dest))
				{
					// FTP connector throws an error
					return false;
				}

				$ret = true;
			}
			else
			{
				if (!@ copy($src, $dest))
				{
					JLog::add(JText::sprintf('JLIB_FILESYSTEM_ERROR_COPY_FAILED_ERR01', $src, $dest), JLog::WARNING, 'jerror');

					return false;
				}

				$ret = true;
			}

			return $ret;
		}
	}

Expected result

Do not give an error upon same src and dest

Actual result

It now fails...

System information (as much as possible)

Additional comments

avatar stAn47 stAn47 - open - 16 Oct 2017
avatar joomla-cms-bot joomla-cms-bot - labeled - 16 Oct 2017
avatar stAn47 stAn47 - change - 16 Oct 2017
Beskrivelsen blev ændret
avatar stAn47 stAn47 - edited - 16 Oct 2017
avatar franz-wohlkoenig franz-wohlkoenig - change - 26 Jan 2018
Status Ny Information mangler
avatar franz-wohlkoenig
franz-wohlkoenig - comment - 26 Jan 2018

Any Comment on this Feature Request?


This comment was created with the J!Tracker Application at issues.joomla.org/tracker/joomla-cms/18352.

avatar brianteeman brianteeman - change - 25 Mar 2018
Etiketter Tilføjet: J3 Issue
avatar brianteeman brianteeman - labeled - 25 Mar 2018
avatar franz-wohlkoenig franz-wohlkoenig - change - 16 Apr 2018
Status Information mangler Diskussion

Tilføj en kommentar

Log ind med GitHub for at sende en kommentar