/** * Rename a cloud storage object. * * @return TRUE if the object was renamed, FALSE otherwise */ public function rename($from, $to) { if (!CloudStorageTools::parseFilename($from, $from_bucket, $from_object) || !isset($from_object)) { trigger_error(sprintf("Invalid Google Cloud Storage path: %s", $from), E_USER_ERROR); return false; } if (!CloudStorageTools::parseFilename($to, $to_bucket, $to_object) || !isset($to_object)) { trigger_error(sprintf("Invalid Google Cloud Storage path: %s", $to), E_USER_ERROR); return false; } // If the file being renamed is an uploaded file being moved to an allowed // include bucket trigger a warning. $allowed_buckets = $this->getAllowedBuckets(); foreach ($_FILES as $file) { if ($file['tmp_name'] == $from) { foreach ($allowed_buckets as $allowed_bucket) { // 5th character indicates start of bucket since it ignores 'gs://'. if (strpos($to, $allowed_bucket) === 5) { trigger_error(sprintf('Moving uploaded file (%s) to an allowed ' . 'include bucket (%s) which may be ' . 'vulnerable to local file inclusion (LFI).', $from, $allowed_bucket), E_USER_WARNING); break 2; } } } } $client = new CloudStorageRenameClient($from_bucket, $from_object, $to_bucket, $to_object, $this->context); return $client->rename(); }
/** * Rename a cloud storage object. * * @return TRUE if the object was renamed, FALSE otherwise */ public function rename($from, $to) { if (!$this->getBucketAndObjectFromPath($from, $from_bucket, $from_object) || !isset($from_object)) { trigger_error(sprintf("Invalid Google Cloud Storage path: %s", $from), E_USER_ERROR); return false; } if (!$this->getBucketAndObjectFromPath($to, $to_bucket, $to_object) || !isset($to_object)) { trigger_error(sprintf("Invalid Google Cloud Storage path: %s", $to), E_USER_ERROR); return false; } $client = new CloudStorageRenameClient($from_bucket, $from_object, $to_bucket, $to_object, $this->context); return $client->rename(); }