Hi, > On the contrary, it's good you reported it since it was a bug in the fix :).
Yes, indeed. > Sergey: it seems to me we can only safely prepend "http://" if the "www." > is at ^ or preceded by whitespace. As in: > > # Prepare usual links: prefix "www." with "http://" > # if it is preceded by whitespace or at the beginning of line. > # (don't want to prefix in cases like "//www.." or "ngwww...") > $line = preg_replace('/(\s|^)(www\.)/i', '$1http://$2', $line); Yes, but that breaks expansion of constructs like [www.gnu.org main site] To handle this, the regexp should also include '[', i.e.: $line = preg_replace('/(^|\s|\[)(www\.)/i', '$1http://$2', $line); (full patch attached). > It's not clear to me what other case is trying to be handled by the > original alternative of [^/], though surely it was something, and maybe > we'll hear about it shortly ... Apparently the intent was to catch eventual appearance of 'http://' at the same time allowing expansion when prefixed by another character. In particular, that allowed expansion of www\. within double quotes as in "www.gnu.org". The proposed modification does not allow this. I believe we can live with it, though. Best regards, Sergey
>From cd8a3d04c57f21aee5256e261de544acccf3a198 Mon Sep 17 00:00:00 2001 From: Sergey Poznyakoff <[email protected]> Date: Wed, 6 Jul 2016 10:24:44 +0300 Subject: [PATCH] Fix 72d0512 * frontend/php/include/markup.php: Prepend http:// if 'www.' appears at the beginning of a line, after a whitespace or [. --- frontend/php/include/markup.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/frontend/php/include/markup.php b/frontend/php/include/markup.php index 41d17c9..5b3d44d 100644 --- a/frontend/php/include/markup.php +++ b/frontend/php/include/markup.php @@ -631,10 +631,11 @@ function _markup_inline($line) # we can expect web browsers to support) $protocols = "https?|ftp|sftp|file|afs|nfs|ircs?"; + # Prepare usual links: prefix every "www." with "http://" # unless there is a // before - $line = preg_replace('/\b(www\.)/i', 'http://$1', $line); - + $line = preg_replace('/(^|\s|\[)(www\.)/i', '$1http://$2', $line); + # replace the @ sign with an HTML entity, if it is used within # an url (e.g. for pointers to mailing lists). This way, the # @ sign doesn't get mangled in the e-mail markup code -- 1.8.3.1
