mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-08 04:18:52 +00:00
[ticket/16189] Make wrappers call native functions
PHPBB3-16189
This commit is contained in:
parent
0a7e98951b
commit
00682db8a6
1 changed files with 2 additions and 114 deletions
|
@ -639,60 +639,7 @@ function phpbb_checkdnsrr($host, $type = 'MX')
|
||||||
*/
|
*/
|
||||||
function phpbb_inet_ntop($in_addr)
|
function phpbb_inet_ntop($in_addr)
|
||||||
{
|
{
|
||||||
$in_addr = bin2hex($in_addr);
|
return inet_ntop($in_addr);
|
||||||
|
|
||||||
switch (strlen($in_addr))
|
|
||||||
{
|
|
||||||
case 8:
|
|
||||||
return implode('.', array_map('hexdec', str_split($in_addr, 2)));
|
|
||||||
|
|
||||||
case 32:
|
|
||||||
if (substr($in_addr, 0, 24) === '00000000000000000000ffff')
|
|
||||||
{
|
|
||||||
return phpbb_inet_ntop(pack('H*', substr($in_addr, 24)));
|
|
||||||
}
|
|
||||||
|
|
||||||
$parts = str_split($in_addr, 4);
|
|
||||||
$parts = preg_replace('/^0+(?!$)/', '', $parts);
|
|
||||||
$ret = implode(':', $parts);
|
|
||||||
|
|
||||||
$matches = array();
|
|
||||||
preg_match_all('/(?<=:|^)(?::?0){2,}/', $ret, $matches, PREG_OFFSET_CAPTURE);
|
|
||||||
$matches = $matches[0];
|
|
||||||
|
|
||||||
if (empty($matches))
|
|
||||||
{
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
$longest_match = '';
|
|
||||||
$longest_match_offset = 0;
|
|
||||||
foreach ($matches as $match)
|
|
||||||
{
|
|
||||||
if (strlen($match[0]) > strlen($longest_match))
|
|
||||||
{
|
|
||||||
$longest_match = $match[0];
|
|
||||||
$longest_match_offset = $match[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$ret = substr_replace($ret, '', $longest_match_offset, strlen($longest_match));
|
|
||||||
|
|
||||||
if ($longest_match_offset == strlen($ret))
|
|
||||||
{
|
|
||||||
$ret .= ':';
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($longest_match_offset == 0)
|
|
||||||
{
|
|
||||||
$ret = ':' . $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ret;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -710,64 +657,5 @@ function phpbb_inet_ntop($in_addr)
|
||||||
*/
|
*/
|
||||||
function phpbb_inet_pton($address)
|
function phpbb_inet_pton($address)
|
||||||
{
|
{
|
||||||
$ret = '';
|
return inet_pton($address);
|
||||||
if (preg_match(get_preg_expression('ipv4'), $address))
|
|
||||||
{
|
|
||||||
foreach (explode('.', $address) as $part)
|
|
||||||
{
|
|
||||||
$ret .= ($part <= 0xF ? '0' : '') . dechex($part);
|
|
||||||
}
|
|
||||||
|
|
||||||
return pack('H*', $ret);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (preg_match(get_preg_expression('ipv6'), $address))
|
|
||||||
{
|
|
||||||
$parts = explode(':', $address);
|
|
||||||
$missing_parts = 8 - count($parts) + 1;
|
|
||||||
|
|
||||||
if (substr($address, 0, 2) === '::')
|
|
||||||
{
|
|
||||||
++$missing_parts;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (substr($address, -2) === '::')
|
|
||||||
{
|
|
||||||
++$missing_parts;
|
|
||||||
}
|
|
||||||
|
|
||||||
$embedded_ipv4 = false;
|
|
||||||
$last_part = end($parts);
|
|
||||||
|
|
||||||
if (preg_match(get_preg_expression('ipv4'), $last_part))
|
|
||||||
{
|
|
||||||
$parts[count($parts) - 1] = '';
|
|
||||||
$last_part = phpbb_inet_pton($last_part);
|
|
||||||
$embedded_ipv4 = true;
|
|
||||||
--$missing_parts;
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach ($parts as $i => $part)
|
|
||||||
{
|
|
||||||
if (strlen($part))
|
|
||||||
{
|
|
||||||
$ret .= str_pad($part, 4, '0', STR_PAD_LEFT);
|
|
||||||
}
|
|
||||||
else if ($i && $i < count($parts) - 1)
|
|
||||||
{
|
|
||||||
$ret .= str_repeat('0000', $missing_parts);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$ret = pack('H*', $ret);
|
|
||||||
|
|
||||||
if ($embedded_ipv4)
|
|
||||||
{
|
|
||||||
$ret .= $last_part;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue