Index: src/wp-includes/comment.php
===================================================================
--- src/wp-includes/comment.php	(revision 38024)
+++ src/wp-includes/comment.php	(working copy)
@@ -36,18 +36,27 @@
  *		                       trackback, or pingback.
  * @return bool If all checks pass, true, otherwise false.
  */
-function check_comment($author, $email, $url, $comment, $user_ip, $user_agent, $comment_type) {
+function check_comment( $author, $email, $url, $comment, $user_ip, $user_agent, $comment_type ) {
 	global $wpdb;
 
 	// If manual moderation is enabled, skip all checks and return false.
-	if ( 1 == get_option('comment_moderation') )
+	if ( 1 == get_option( 'comment_moderation' ) ) {
+
 		return false;
-
+	}
 	/** This filter is documented in wp-includes/comment-template.php */
 	$comment = apply_filters( 'comment_text', $comment );
 
 	// Check for the number of external links if a max allowed number is set.
-	if ( $max_links = get_option( 'comment_max_links' ) ) {
+	/**
+	 * Filters the maximum number of links allowed in a comment.
+	 *
+	 * @since 4.6.0
+	 *
+	 * @param int    $max_links The number of links allowed.
+	 * @param string $url       Comment author's URL. Included in allowed links total.
+	 */
+	if ( $max_links = apply_filters( 'comment_max_links_allowed', get_option( 'comment_max_links' ), $url ) ) {
 		$num_links = preg_match_all( '/<a [^>]*href/i', $comment, $out );
 
 		/**
@@ -54,6 +63,7 @@
 		 * Filters the maximum number of links allowed in a comment.
 		 *
 		 * @since 3.0.0
+		 * @deprecated 4.6.0 Use links_found_in_comment instead.
 		 *
 		 * @param int    $num_links The number of links allowed.
 		 * @param string $url       Comment author's URL. Included in allowed links total.
@@ -60,32 +70,47 @@
 		 */
 		$num_links = apply_filters( 'comment_max_links_url', $num_links, $url );
 
+
+		/**
+		 * Filters the maximum number of links allowed in a comment.
+		 *
+		 * @since 4.6.0
+		 *
+		 * @param int    $num_links The number of links allowed.
+		 * @param string $url       Comment author's URL. Included in allowed links total.
+		 */
+		$num_links = apply_filters( 'links_found_in_comment', $num_links, $url );
+
 		/*
 		 * If the number of links in the comment exceeds the allowed amount,
 		 * fail the check by returning false.
 		 */
-		if ( $num_links >= $max_links )
+		if ( $num_links >= $max_links ) {
+
 			return false;
+		}
 	}
 
-	$mod_keys = trim(get_option('moderation_keys'));
+	$mod_keys = trim( get_option( 'moderation_keys' ) );
 
 	// If moderation 'keys' (keywords) are set, process them.
-	if ( !empty($mod_keys) ) {
-		$words = explode("\n", $mod_keys );
+	if ( ! empty( $mod_keys ) ) {
+		$words = explode( '\n', $mod_keys );
 
-		foreach ( (array) $words as $word) {
-			$word = trim($word);
+		foreach ( (array) $words as $word ) {
+			$word = trim( $word );
 
 			// Skip empty lines.
-			if ( empty($word) )
+			if ( empty( $word ) ) {
+
 				continue;
+			}
 
 			/*
 			 * Do some escaping magic so that '#' (number of) characters in the spam
 			 * words don't break things:
 			 */
-			$word = preg_quote($word, '#');
+			$word = preg_quote( $word, '#' );
 
 			/*
 			 * Check the comment fields for moderation keywords. If any are found,
@@ -92,12 +117,12 @@
 			 * fail the check for the given field by returning false.
 			 */
 			$pattern = "#$word#i";
-			if ( preg_match($pattern, $author) ) return false;
-			if ( preg_match($pattern, $email) ) return false;
-			if ( preg_match($pattern, $url) ) return false;
-			if ( preg_match($pattern, $comment) ) return false;
-			if ( preg_match($pattern, $user_ip) ) return false;
-			if ( preg_match($pattern, $user_agent) ) return false;
+			if ( preg_match( $pattern, $author ) ) { return false; };
+			if ( preg_match( $pattern, $email ) ) { return false; };
+			if ( preg_match( $pattern, $url ) ) { return false; };
+			if ( preg_match( $pattern, $comment ) ) { return false; };
+			if ( preg_match( $pattern, $user_ip ) ) { return false; };
+			if ( preg_match( $pattern, $user_agent ) ) { return false; };
 		}
 	}
 
@@ -108,16 +133,19 @@
 	 * as well as whether there are any moderation keywords (if set) present in the author
 	 * email address. If both checks pass, return true. Otherwise, return false.
 	 */
-	if ( 1 == get_option('comment_whitelist')) {
-		if ( 'trackback' != $comment_type && 'pingback' != $comment_type && $author != '' && $email != '' ) {
+	if ( 1 == get_option( 'comment_whitelist' ) ) {
+		if ( 'trackback' != $comment_type && 'pingback' != $comment_type && '' != $author && '' != $email ) {
 			// expected_slashed ($author, $email)
-			$ok_to_comment = $wpdb->get_var("SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = '1' LIMIT 1");
-			if ( ( 1 == $ok_to_comment ) &&
-				( empty($mod_keys) || false === strpos( $email, $mod_keys) ) )
-					return true;
-			else
+			$ok_to_comment = $wpdb->get_var( "SELECT comment_approved FROM $wpdb->comments WHERE comment_author = '$author' AND comment_author_email = '$email' and comment_approved = '1' LIMIT 1" );
+			if ( ( 1 == $ok_to_comment ) &&	( empty( $mod_keys ) || false === strpos( $email, $mod_keys ) ) ) {
+
+				return true;
+			} else {
+
 				return false;
+			}
 		} else {
+
 			return false;
 		}
 	}
