Vergleich inc/functions.php - 1.8.9 - 1.8.11

  Keine Änderungen   Hinzugefügt   Modifiziert   Entfernt
Zeile 343Zeile 343
	{
if(isset($mybb->user['uid']) && $mybb->user['uid'] != 0 && array_key_exists("timezone", $mybb->user))
{

	{
if(isset($mybb->user['uid']) && $mybb->user['uid'] != 0 && array_key_exists("timezone", $mybb->user))
{

			$offset = $mybb->user['timezone'];

			$offset = (float)$mybb->user['timezone'];

			$dstcorrection = $mybb->user['dst'];
}
elseif(defined("IN_ADMINCP"))
{

			$dstcorrection = $mybb->user['dst'];
}
elseif(defined("IN_ADMINCP"))
{

			$offset =  $mybbadmin['timezone'];

			$offset = (float)$mybbadmin['timezone'];

			$dstcorrection = $mybbadmin['dst'];
}
else
{

			$dstcorrection = $mybbadmin['dst'];
}
else
{

			$offset = $mybb->settings['timezoneoffset'];

			$offset = (float)$mybb->settings['timezoneoffset'];

			$dstcorrection = $mybb->settings['dstcorrection'];
}


			$dstcorrection = $mybb->settings['dstcorrection'];
}


Zeile 6777Zeile 6777
function fetch_remote_file($url, $post_data=array(), $max_redirects=20)
{
global $mybb, $config;

function fetch_remote_file($url, $post_data=array(), $max_redirects=20)
{
global $mybb, $config;

 

if(!my_validate_url($url, true))
{
return false;
}


$url_components = @parse_url($url);


$url_components = @parse_url($url);

 

if(!isset($url_components['scheme']))
{
$url_components['scheme'] = 'https';
}
if(!isset($url_components['port']))
{
$url_components['port'] = $url_components['scheme'] == 'https' ? 443 : 80;
}


if(
!$url_components ||
empty($url_components['host']) ||
(!empty($url_components['scheme']) && !in_array($url_components['scheme'], array('http', 'https'))) ||


if(
!$url_components ||
empty($url_components['host']) ||
(!empty($url_components['scheme']) && !in_array($url_components['scheme'], array('http', 'https'))) ||

		(!empty($url_components['port']) && !in_array($url_components['port'], array(80, 8080, 443))) ||

		(!in_array($url_components['port'], array(80, 8080, 443))) ||

		(!empty($config['disallowed_remote_hosts']) && in_array($url_components['host'], $config['disallowed_remote_hosts']))
)
{
return false;
}

		(!empty($config['disallowed_remote_hosts']) && in_array($url_components['host'], $config['disallowed_remote_hosts']))
)
{
return false;
}

 

$addresses = get_ip_by_hostname($url_components['host']);
$destination_address = $addresses[0];


if(!empty($config['disallowed_remote_addresses']))


if(!empty($config['disallowed_remote_addresses']))

	{
$addresses = gethostbynamel($url_components['host']);
if($addresses)
{
foreach($config['disallowed_remote_addresses'] as $disallowed_address)
{
$ip_range = fetch_ip_range($disallowed_address);
foreach($addresses as $address)
{
$packed_address = my_inet_pton($address);

if(is_array($ip_range))
{
if(strcmp($ip_range[0], $packed_address) <= 0 && strcmp($ip_range[1], $packed_address) >= 0)
{
return false;
}
}
elseif($address == $disallowed_address)
{
return false;
}

	{
foreach($config['disallowed_remote_addresses'] as $disallowed_address)
{
$ip_range = fetch_ip_range($disallowed_address);

$packed_address = my_inet_pton($destination_address);

if(is_array($ip_range))
{
if(strcmp($ip_range[0], $packed_address) <= 0 && strcmp($ip_range[1], $packed_address) >= 0)
{
return false;











				}
}

				}
}

		}





			elseif($destination_address == $disallowed_address)
{
return false;
}
}

	}

$post_body = '';

	}

$post_body = '';

Zeile 6830Zeile 6841
	}

if(function_exists("curl_init"))

	}

if(function_exists("curl_init"))

	{
$can_followlocation = @ini_get('open_basedir') === '' && !$mybb->safemode;

$request_header = $max_redirects != 0 && !$can_followlocation;


	{
$fetch_header = $max_redirects > 0;




		$ch = curl_init();

		$ch = curl_init();

		curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, $request_header);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

if($max_redirects != 0 && $can_followlocation)
{
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, $max_redirects);
}




























$curlopt = array(
CURLOPT_URL => $url,
CURLOPT_HEADER => $fetch_header,
CURLOPT_TIMEOUT => 10,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 0,
);

if($ca_bundle_path = get_ca_bundle_path())
{
$curlopt[CURLOPT_SSL_VERIFYPEER] = 1;
$curlopt[CURLOPT_CAINFO] = $ca_bundle_path;
}
else
{
$curlopt[CURLOPT_SSL_VERIFYPEER] = 0;
}

$curl_version_info = curl_version();
$curl_version = $curl_version_info['version'];

if(version_compare(PHP_VERSION, '7.0.7', '>=') && version_compare($curl_version, '7.49', '>='))
{
// CURLOPT_CONNECT_TO
$curlopt[10243] = array(
$url_components['host'].':'.$url_components['port'].':'.$destination_address
);
}
elseif(version_compare(PHP_VERSION, '5.5', '>=') && version_compare($curl_version, '7.21.3', '>='))
{
// CURLOPT_RESOLVE
$curlopt[10203] = array(
$url_components['host'].':'.$url_components['port'].':'.$destination_address
);
}


		if(!empty($post_body))
{

		if(!empty($post_body))
{

			curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_body);

			$curlopt[CURLOPT_POST] = 1;
$curlopt[CURLOPT_POSTFIELDS] = $post_body;

		}

		}

 

curl_setopt_array($ch, $curlopt);


$response = curl_exec($ch);



$response = curl_exec($ch);


		if($request_header)

		if($fetch_header)

		{
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);

		{
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($response, 0, $header_size);

Zeile 6886Zeile 6922
	}
else if(function_exists("fsockopen"))
{

	}
else if(function_exists("fsockopen"))
{

		if(!isset($url_components['port']))
{
$url_components['port'] = 80;
}

 
		if(!isset($url_components['path']))
{
$url_components['path'] = "/";

		if(!isset($url_components['path']))
{
$url_components['path'] = "/";

Zeile 6910Zeile 6942
			}
}


			}
}


		$fp = @fsockopen($scheme.$url_components['host'], $url_components['port'], $error_no, $error, 10);
@stream_set_timeout($fp, 10);
if(!$fp)

		if(function_exists('stream_context_create'))



		{

		{

			return false;
































			if($url_components['scheme'] == 'https' && $ca_bundle_path = get_ca_bundle_path())
{
$context = stream_context_create(array(
'ssl' => array(
'verify_peer' => true,
'verify_peer_name' => true,
'peer_name' => $url_components['host'],
'cafile' => $ca_bundle_path,
),
));
}
else
{
$context = stream_context_create(array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
),
));
}

$fp = @stream_socket_client($scheme.$destination_address.':'.(int)$url_components['port'], $error_no, $error, 10, STREAM_CLIENT_CONNECT, $context);
}
else
{
$fp = @fsockopen($scheme.$url_components['host'], (int)$url_components['port'], $error_no, $error, 10);
}

@stream_set_timeout($fp, 10);
if(!$fp)
{
return false;

		}
$headers = array();
if(!empty($post_body))

		}
$headers = array();
if(!empty($post_body))

Zeile 6962Zeile 7023
		$status_line = current(explode("\n\n", $header, 1));
$body = $data[1];


		$status_line = current(explode("\n\n", $header, 1));
$body = $data[1];


		if($max_redirects != 0 && (strstr($status_line, ' 301 ') || strstr($status_line, ' 302 ')))

		if($max_redirects > 0 && (strstr($status_line, ' 301 ') || strstr($status_line, ' 302 ')))

		{
preg_match('/Location:(.*?)(?:\n|$)/', $header, $matches);


		{
preg_match('/Location:(.*?)(?:\n|$)/', $header, $matches);


Zeile 6977Zeile 7038
		}

return $data;

		}

return $data;

	}
else if(empty($post_data))
{
return @implode("", @file($url));

 
	}
else

	}
else

	{

	{

		return false;
}

		return false;
}

 
}

/**
* Resolves a hostname into a set of IP addresses.
*
* @param string $hostname The hostname to be resolved
* @return array|bool The resulting IP addresses. False on failure
*/
function get_ip_by_hostname($hostname)
{
$addresses = @gethostbynamel($hostname);

if(!$addresses)
{
$result_set = @dns_get_record($hostname, DNS_A | DNS_AAAA);

if($result_set)
{
$addresses = array_column($result_set, 'ip');
}
else
{
return false;
}
}

return $addresses;
}

/**
* Returns the location of the CA bundle defined in the PHP configuration.
*
* @return string|bool The location of the CA bundle, false if not set
*/
function get_ca_bundle_path()
{
if($path = ini_get('openssl.cafile'))
{
return $path;
}
if($path = ini_get('curl.cainfo'))
{
return $path;
}

return false;

}

/**

}

/**

Zeile 7226Zeile 7329
 * @return int The UNIX timestamp when the ban will be lifted
*/
function ban_date2timestamp($date, $stamp=0)

 * @return int The UNIX timestamp when the ban will be lifted
*/
function ban_date2timestamp($date, $stamp=0)

{

{

	if($stamp == 0)
{
$stamp = TIME_NOW;

	if($stamp == 0)
{
$stamp = TIME_NOW;

Zeile 7640Zeile 7743
	global $mybb, $checksums, $bad_verify_files;

// We don't need to check these types of files

	global $mybb, $checksums, $bad_verify_files;

// We don't need to check these types of files

	$ignore = array(".", "..", ".svn", "config.php", "settings.php", "Thumb.db", "config.default.php", "lock", "htaccess.txt", "logo.gif", "logo.png");

	$ignore = array(".", "..", ".svn", "config.php", "settings.php", "Thumb.db", "config.default.php", "lock", "htaccess.txt", "htaccess-nginx.txt", "logo.gif", "logo.png");

	$ignore_ext = array("attach");

if(substr($path, -1, 1) == "/")
{
$path = substr($path, 0, -1);

	$ignore_ext = array("attach");

if(substr($path, -1, 1) == "/")
{
$path = substr($path, 0, -1);

	}


	}


	if(!is_array($bad_verify_files))
{
$bad_verify_files = array();

	if(!is_array($bad_verify_files))
{
$bad_verify_files = array();

Zeile 7662Zeile 7765
			while(($file = @readdir($dh)) !== false)
{
if(in_array($file, $ignore) || in_array(get_extension($file), $ignore_ext))

			while(($file = @readdir($dh)) !== false)
{
if(in_array($file, $ignore) || in_array(get_extension($file), $ignore_ext))

				{
continue;
}

				{
continue;
}


// Recurse through the directory tree
if(is_dir($path."/".$file))
{
verify_files($path."/".$file, ($count+1));


// Recurse through the directory tree
if(is_dir($path."/".$file))
{
verify_files($path."/".$file, ($count+1));

					continue;
}

					continue;
}


// We only need the last part of the path (from the MyBB directory to the file. i.e. inc/functions.php)
$file_path = ".".str_replace(substr(MYBB_ROOT, 0, -1), "", $path)."/".$file;


// We only need the last part of the path (from the MyBB directory to the file. i.e. inc/functions.php)
$file_path = ".".str_replace(substr(MYBB_ROOT, 0, -1), "", $path)."/".$file;





				// Does this file even exist in our official list? Perhaps it's a plugin
if(array_key_exists($file_path, $checksums))
{

				// Does this file even exist in our official list? Perhaps it's a plugin
if(array_key_exists($file_path, $checksums))
{

Zeile 7697Zeile 7800
					}
}
unset($checksums[$file_path]);

					}
}
unset($checksums[$file_path]);

			}

			}

		   @closedir($dh);

		   @closedir($dh);

		}
}

if($count == 0)

		}
}

if($count == 0)

	{
if(!empty($checksums))
{

	{
if(!empty($checksums))
{

Zeile 7721Zeile 7824
	if($count == 0)
{
return $bad_verify_files;

	if($count == 0)
{
return $bad_verify_files;

	}
}


	}
}


/**
* Returns a signed value equal to an integer
*

/**
* Returns a signed value equal to an integer
*

Zeile 7766Zeile 7869
		{
$output = @fread($handle, $bytes);
@fclose($handle);

		{
$output = @fread($handle, $bytes);
@fclose($handle);

		}
}
else
{
return $output;
}

if(strlen($output) < $bytes)
{

		}
}
else
{
return $output;
}

if(strlen($output) < $bytes)
{

		if(function_exists('mcrypt_create_iv'))
{
if (DIRECTORY_SEPARATOR == '/')

		if(function_exists('mcrypt_create_iv'))
{
if (DIRECTORY_SEPARATOR == '/')

			{

			{

				$source = MCRYPT_DEV_URANDOM;
}
else

				$source = MCRYPT_DEV_URANDOM;
}
else

Zeile 7800Zeile 7903
		{
// PHP <5.3.4 had a bug which makes that function unusable on Windows
if ((DIRECTORY_SEPARATOR == '/') || version_compare(PHP_VERSION, '5.3.4', '>='))

		{
// PHP <5.3.4 had a bug which makes that function unusable on Windows
if ((DIRECTORY_SEPARATOR == '/') || version_compare(PHP_VERSION, '5.3.4', '>='))

			{

			{

				$output = openssl_random_pseudo_bytes($bytes, $crypto_strong);
if ($crypto_strong == false)
{

				$output = openssl_random_pseudo_bytes($bytes, $crypto_strong);
if ($crypto_strong == false)
{

Zeile 7852Zeile 7955
		$output = pack('H*', $output);

return $output;

		$output = pack('H*', $output);

return $output;

	}
else
{
return $output;
}
}

	}
else
{
return $output;
}
}


/**
* Returns a securely generated seed integer


/**
* Returns a securely generated seed integer

Zeile 7883Zeile 7986
		{
$elements = unpack('N2', $output);
$output = abs($elements[1] << 32 | $elements[2]);

		{
$elements = unpack('N2', $output);
$output = abs($elements[1] << 32 | $elements[2]);

		}


		}


	} while($output > PHP_INT_MAX);

return $output;

	} while($output > PHP_INT_MAX);

return $output;

Zeile 7936Zeile 8039
function trim_blank_chrs($string, $charlist="")
{
$hex_chrs = array(

function trim_blank_chrs($string, $charlist="")
{
$hex_chrs = array(

		0x09 => 1, // \x{0009}

		0x09 => 1, // \x{0009}

		0x0A => 1, // \x{000A}
0x0B => 1, // \x{000B}
0x0D => 1, // \x{000D}

		0x0A => 1, // \x{000A}
0x0B => 1, // \x{000B}
0x0D => 1, // \x{000D}

Zeile 8066Zeile 8169
			return match_sequence($string, $level, $i, $n);
}
return $n;

			return match_sequence($string, $level, $i, $n);
}
return $n;

	}


	}


	return 0;
}


	return 0;
}


Zeile 8081Zeile 8184
	static $gd_version;

if($gd_version)

	static $gd_version;

if($gd_version)

	{

	{

		return $gd_version;
}
if(!extension_loaded('gd'))

		return $gd_version;
}
if(!extension_loaded('gd'))

Zeile 8093Zeile 8196
	{
$gd_info = gd_info();
preg_match('/\d/', $gd_info['GD Version'], $gd);

	{
$gd_info = gd_info();
preg_match('/\d/', $gd_info['GD Version'], $gd);

		$gd_version = $gd[0];
}

		$gd_version = $gd[0];
}

	else
{
ob_start();

	else
{
ob_start();

Zeile 8144Zeile 8247
				elseif($c > 239)
{
$bytes = 4;

				elseif($c > 239)
{
$bytes = 4;

				}
elseif($c > 223)
{

				}
elseif($c > 223)
{

					$bytes = 3;
}
elseif($c > 191)

					$bytes = 3;
}
elseif($c > 191)

				{

				{

					$bytes = 2;
}
if(($i + $bytes) > $len)
{
if($return)

					$bytes = 2;
}
if(($i + $bytes) > $len)
{
if($return)

					{

					{

						$string .= '?';
break;

						$string .= '?';
break;

					}

					}

					else
{
return false;

					else
{
return false;

Zeile 8172Zeile 8275
					$i++;
$b = ord($input[$i]);
if($b < 128 || $b > 191)

					$i++;
$b = ord($input[$i]);
if($b < 128 || $b > 191)

					{

					{

						if($return)
{
$valid = false;
$string .= '?';
break;

						if($return)
{
$valid = false;
$string .= '?';
break;

						}

						}

						else
{
return false;

						else
{
return false;

Zeile 8194Zeile 8297
				{
$string .= $multibytes;
}

				{
$string .= $multibytes;
}

			}

			}

			else
{
$string .= $input[$i];

			else
{
$string .= $input[$i];

			}
}

			}
}

		$input = $string;
}
if($return)

		$input = $string;
}
if($return)

	{

	{

		if($allow_mb4)
{
return $input;
}

		if($allow_mb4)
{
return $input;
}

		else
{
return preg_replace("#[^\\x00-\\x7F][\\x80-\\xBF]{3,}#", '?', $input);
}
}

		else
{
return preg_replace("#[^\\x00-\\x7F][\\x80-\\xBF]{3,}#", '?', $input);
}
}

	else
{
if($allow_mb4)

	else
{
if($allow_mb4)

		{

		{

			return true;
}
else

			return true;
}
else

Zeile 8225Zeile 8328
		}
}
}

		}
}
}





/**
* Send a Private Message to a user.
*

/**
* Send a Private Message to a user.
*

Zeile 8239Zeile 8342
	global $lang, $mybb, $db, $session;

if($mybb->settings['enablepms'] == 0)

	global $lang, $mybb, $db, $session;

if($mybb->settings['enablepms'] == 0)

	{
return false;
}


	{
return false;
}


	if(!is_array($pm))
{
return false;

	if(!is_array($pm))
{
return false;

Zeile 8251Zeile 8354
	if(isset($pm['language']))
{
if($pm['language'] != $mybb->user['language'] && $lang->language_exists($pm['language']))

	if(isset($pm['language']))
{
if($pm['language'] != $mybb->user['language'] && $lang->language_exists($pm['language']))

		{

		{

			// Load user language
$lang->set_language($pm['language']);
$lang->load($pm['language_file']);

			// Load user language
$lang->set_language($pm['language']);
$lang->load($pm['language_file']);





			$revert = true;
}

			$revert = true;
}





		foreach(array('subject', 'message') as $key)
{
if(is_array($pm[$key]))

		foreach(array('subject', 'message') as $key)
{
if(is_array($pm[$key]))

Zeile 8277Zeile 8380
			}

$pm[$key] = $lang_string;

			}

$pm[$key] = $lang_string;

		}

		}


if(isset($revert))
{


if(isset($revert))
{

Zeile 8288Zeile 8391
	}

if(!$pm['subject'] ||!$pm['message'] || !$pm['touid'] || (!$pm['receivepms'] && !$admin_override))

	}

if(!$pm['subject'] ||!$pm['message'] || !$pm['touid'] || (!$pm['receivepms'] && !$admin_override))

	{

	{

		return false;
}

		return false;
}





	require_once MYBB_ROOT."inc/datahandlers/pm.php";

$pmhandler = new PMDataHandler();

	require_once MYBB_ROOT."inc/datahandlers/pm.php";

$pmhandler = new PMDataHandler();

Zeile 8304Zeile 8407
	if(is_array($toid))
{
$recipients_to = $toid;

	if(is_array($toid))
{
$recipients_to = $toid;

	}

	}

	else
{
$recipients_to = array($toid);

	else
{
$recipients_to = array($toid);

Zeile 8356Zeile 8459
	if($pmhandler->validate_pm())
{
$pmhandler->insert_pm();

	if($pmhandler->validate_pm())
{
$pmhandler->insert_pm();

		return true;

		return true;

	}

return false;

	}

return false;

Zeile 8432Zeile 8535
			if(substr($file_dir_path, 0, my_strlen(MYBB_ROOT)) == MYBB_ROOT)
{
$file_dir_path = str_replace(MYBB_ROOT, '', $file_dir_path);

			if(substr($file_dir_path, 0, my_strlen(MYBB_ROOT)) == MYBB_ROOT)
{
$file_dir_path = str_replace(MYBB_ROOT, '', $file_dir_path);

			}

$cdn_upload_path = $cdn_path . DIRECTORY_SEPARATOR . $file_dir_path;


			}

$cdn_upload_path = $cdn_path . DIRECTORY_SEPARATOR . $file_dir_path;


			if(!($dir_exists = is_dir($cdn_upload_path)))
{
$dir_exists = @mkdir($cdn_upload_path, 0777, true);

			if(!($dir_exists = is_dir($cdn_upload_path)))
{
$dir_exists = @mkdir($cdn_upload_path, 0777, true);

Zeile 8488Zeile 8591
	}

return false;

	}

return false;

 
}

/**
* Strip html tags from string, also removes <script> and <style> contents.
*
* @param string $string String to stripe
* @param string $allowable_tags Allowed html tags
*
* @return string Striped string
*/
function my_strip_tags($string, $allowable_tags = '')
{
$pattern = array(
'@(&lt;)style[^(&gt;)]*?(&gt;).*?(&lt;)/style(&gt;)@siu',
'@(&lt;)script[^(&gt;)]*?.*?(&lt;)/script(&gt;)@siu',
'@<style[^>]*?>.*?</style>@siu',
'@<script[^>]*?.*?</script>@siu',
);
$string = preg_replace($pattern, '', $string);
return strip_tags($string, $allowable_tags);

}

}