From b2ac0fc51cfa90fe218c34df0255677f3d5c918f Mon Sep 17 00:00:00 2001 From: Antoine Musso Date: Fri, 8 Jul 2005 05:54:16 +0000 Subject: [PATCH] Fix #787 : External links being rendered. Tests cases at http://twenkill.dyndns.org/wiki/787 and http://test.leuksman.com/index.php/787 --- RELEASE-NOTES | 1 + includes/Parser.php | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 1d967246d0..9097ac65a1 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -544,6 +544,7 @@ of MediaWiki:Newpagetext) to &action=edit, if page is new. * Fix talk page move handling * (bug 2721) New language file for Vietnamese with the Vietnamese number notation * (bug 2749)   would appear as a literal in image galleries for Cs, Fr, Fur, Pl and Sv +* (bug 787) external links being rendered when they only have one slash === Caveats === diff --git a/includes/Parser.php b/includes/Parser.php index bff43b96d6..8a7110506c 100644 --- a/includes/Parser.php +++ b/includes/Parser.php @@ -47,17 +47,17 @@ define( 'STRIP_COMMENTS', 'HTMLCommentStrip' ); define( 'UNIQ_PREFIX', 'NaodW29'); # Constants needed for external link processing -define( 'URL_PROTOCOLS', 'http|https|ftp|irc|gopher|news|mailto' ); -define( 'HTTP_PROTOCOLS', 'http|https' ); +define( 'URL_PROTOCOLS', 'http:\/\/|https:\/\/|ftp:\/\/|irc:\/\/|gopher:\/\/|news:|mailto:' ); +define( 'HTTP_PROTOCOLS', 'http:\/\/|https:\/\/' ); # Everything except bracket, space, or control characters define( 'EXT_LINK_URL_CLASS', '[^]<>"\\x00-\\x20\\x7F]' ); # Including space define( 'EXT_LINK_TEXT_CLASS', '[^\]\\x00-\\x1F\\x7F]' ); define( 'EXT_IMAGE_FNAME_CLASS', '[A-Za-z0-9_.,~%\\-+&;#*?!=()@\\x80-\\xFF]' ); define( 'EXT_IMAGE_EXTENSIONS', 'gif|png|jpg|jpeg' ); -define( 'EXT_LINK_BRACKETED', '/\[(\b('.URL_PROTOCOLS.'):'.EXT_LINK_URL_CLASS.'+) *('.EXT_LINK_TEXT_CLASS.'*?)\]/S' ); +define( 'EXT_LINK_BRACKETED', '/\[(\b('.URL_PROTOCOLS.')'.EXT_LINK_URL_CLASS.'+) *('.EXT_LINK_TEXT_CLASS.'*?)\]/S' ); define( 'EXT_IMAGE_REGEX', - '/^('.HTTP_PROTOCOLS.':)'. # Protocol + '/^('.HTTP_PROTOCOLS.')'. # Protocol '('.EXT_LINK_URL_CLASS.'+)\\/'. # Hostname and path '('.EXT_IMAGE_FNAME_CLASS.'+)\\.((?i)'.EXT_IMAGE_EXTENSIONS.')$/S' # Filename ); @@ -1110,7 +1110,7 @@ class Parser $fname = 'Parser::replaceFreeExternalLinks'; wfProfileIn( $fname ); - $bits = preg_split( '/(\b(?:'.URL_PROTOCOLS.'):)/S', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); + $bits = preg_split( '/(\b(?:'.URL_PROTOCOLS.'))/S', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); $s = array_shift( $bits ); $i = 0; @@ -1291,7 +1291,7 @@ class Parser # Don't allow internal links to pages containing # PROTO: where PROTO is a valid URL protocol; these # should be external links. - if (preg_match('/^(\b(?:'.URL_PROTOCOLS.'):)/', $m[1])) { + if (preg_match('/^(\b(?:'.URL_PROTOCOLS.'))/', $m[1])) { $s .= $prefix . '[[' . $line ; continue; } -- 2.20.1