This file is indexed.

/usr/share/php/kohana3.1/modules/codebench/classes/bench/urlsite.php is in libkohana3.1-mod-codebench-php 3.1.5-1.1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php defined('SYSPATH') OR die('No direct access allowed.');
/**
 * @package    Kohana/Codebench
 * @category   Tests
 * @author     Geert De Deckere <geert@idoe.be>
 */
class Bench_URLSite extends Codebench {

	public $description = 'http://dev.kohanaframework.org/issues/3110';

	public $loops = 1000;

	public $subjects = array
	(
		'',
		'news',
		'news/',
		'/news/',
		'news/page/5',
		'news/page:5',
		'http://example.com/',
		'http://example.com/hello',
		'http://example.com:80/',
		'http://user:pass@example.com/',
	);

	public function __construct()
	{
		foreach ($this->subjects as $subject)
		{
			// Automatically create URIs with query string and/or fragment part appended
			$this->subjects[] = $subject.'?query=string';
			$this->subjects[] = $subject.'#fragment';
			$this->subjects[] = $subject.'?query=string#fragment';
		}

		parent::__construct();
	}

	public function bench_original($uri)
	{
		// Get the path from the URI
		$path = trim(parse_url($uri, PHP_URL_PATH), '/');

		if ($query = parse_url($uri, PHP_URL_QUERY))
		{
			$query = '?'.$query;
		}

		if ($fragment = parse_url($uri, PHP_URL_FRAGMENT))
		{
			$fragment = '#'.$fragment;
		}

		return $path.$query.$fragment;
	}

	public function bench_explode($uri)
	{
		// Chop off possible scheme, host, port, user and pass parts
		$path = preg_replace('~^[-a-z0-9+.]++://[^/]++/?~', '', trim($uri, '/'));

		$fragment = '';
		$explode = explode('#', $path, 2);
		if (isset($explode[1]))
		{
			$path = $explode[0];
			$fragment = '#'.$explode[1];
		}

		$query = '';
		$explode = explode('?', $path, 2);
		if (isset($explode[1]))
		{
			$path = $explode[0];
			$query = '?'.$explode[1];
		}

		return $path.$query.$fragment;
	}

	public function bench_regex($uri)
	{
		preg_match('~^(?:[-a-z0-9+.]++://[^/]++/?)?([^?#]++)?(\?[^#]*+)?(#.*)?~', trim($uri, '/'), $matches);
		$path = Arr::get($matches, 1, '');
		$query = Arr::get($matches, 2, '');
		$fragment = Arr::get($matches, 3, '');

		return $path.$query.$fragment;
	}

	public function bench_regex_without_arrget($uri)
	{
		preg_match('~^(?:[-a-z0-9+.]++://[^/]++/?)?([^?#]++)?(\?[^#]*+)?(#.*)?~', trim($uri, '/'), $matches);
		$path = isset($matches[1]) ? $matches[1] : '';
		$query = isset($matches[2]) ? $matches[2] : '';
		$fragment = isset($matches[3]) ? $matches[3] : '';

		return $path.$query.$fragment;
	}

	// And then I thought, why do all the work of extracting the query and fragment parts and then reappending them?
	// Just leaving them alone should be fine, right? As a bonus we get a very nice speed boost.
	public function bench_less_is_more($uri)
	{
		// Chop off possible scheme, host, port, user and pass parts
		$path = preg_replace('~^[-a-z0-9+.]++://[^/]++/?~', '', trim($uri, '/'));

		return $path;
	}

	public function bench_less_is_more_with_strpos_optimization($uri)
	{
		if (strpos($uri, '://') !== FALSE)
		{
			// Chop off possible scheme, host, port, user and pass parts
			$uri = preg_replace('~^[-a-z0-9+.]++://[^/]++/?~', '', trim($uri, '/'));
		}

		return $uri;
	}

}