diff --git a/post.php b/post.php index 33ed030b..f0297c28 100644 --- a/post.php +++ b/post.php @@ -16,7 +16,8 @@ require_once 'inc/bootstrap.php'; * @param [type] $file file to the the md5 of. * @return string|false */ -function md5_hash_of_file($config, $file) { +function md5_hash_of_file($config, $file) +{ $cmd = false; if ($config['bsd_md5']) { $cmd = '/sbin/md5 -r'; @@ -34,6 +35,34 @@ function md5_hash_of_file($config, $file) { } } +/** + * Strip the markup from the given string + * + * @param string $post_body the body of the post. + * @return string + */ +function strip_markup($post_body) +{ + if (mysql_version() >= 50503) { + return $post_body; // Assume we're using the utf8mb4 charset + } else { + // MySQL's `utf8` charset only supports up to 3-byte symbols + // Remove anything >= 0x010000 + + $chars = preg_split('//u', $post_body, -1, PREG_SPLIT_NO_EMPTY); + $res = ''; + foreach ($chars as $char) { + $o = 0; + $ord = ordutf8($char, $o); + if ($ord >= 0x010000) + continue; + $res .= $char; + } + + return $res; + } +} + /** * Method handling functions */ @@ -977,10 +1006,12 @@ function handle_post() function ipv4to6($ip) { if (strpos($ip, ':') !== false) { - if (strpos($ip, '.') > 0) + if (strpos($ip, '.') > 0) { $ip = substr($ip, strrpos($ip, ':') + 1); - else - return $ip; //native ipv6 + } else { + // Native ipv6. + return $ip; + } } $iparr = array_pad(explode('.', $ip), 4, 0); $part7 = base_convert(($iparr[0] * 256) + $iparr[1], 10, 16); @@ -989,9 +1020,10 @@ function handle_post() } if ($country_code = geoip_country_code_by_addr_v6($gi, ipv4to6($_SERVER['REMOTE_ADDR']))) { - if (!in_array(strtolower($country_code), array('eu', 'ap', 'o1', 'a1', 'a2'))) + if (!in_array(strtolower($country_code), array('eu', 'ap', 'o1', 'a1', 'a2'))) { $post['body'] .= "\n" . strtolower($country_code) . "" . "\n" . geoip_country_name_by_addr_v6($gi, ipv4to6($_SERVER['REMOTE_ADDR'])) . ""; + } } } @@ -1020,23 +1052,7 @@ function handle_post() } } - if (mysql_version() >= 50503) { - $post['body_nomarkup'] = $post['body']; // Assume we're using the utf8mb4 charset - } else { - // MySQL's `utf8` charset only supports up to 3-byte symbols - // Remove anything >= 0x010000 - - $chars = preg_split('//u', $post['body'], -1, PREG_SPLIT_NO_EMPTY); - $post['body_nomarkup'] = ''; - foreach ($chars as $char) { - $o = 0; - $ord = ordutf8($char, $o); - if ($ord >= 0x010000) - continue; - $post['body_nomarkup'] .= $char; - } - } - + $post['body_nomarkup'] = strip_markup($post['body']); $post['tracked_cites'] = markup($post['body'], true); if ($post['has_file']) { @@ -1514,8 +1530,7 @@ function handle_post() // Tell Javascript that we posted successfully if (isset($_COOKIE[$config['cookies']['js']])) { $js = json_decode($_COOKIE[$config['cookies']['js']]); - } - else { + } else { $js = (object) array(); } // Tell it to delete the cached post for referer