diff --git a/classes/File.php b/classes/File.php
index 9758cf7f55..e04a9d5255 100644
--- a/classes/File.php
+++ b/classes/File.php
@@ -94,7 +94,13 @@ class File extends Memcached_DataObject
$file_redir = File_redirection::staticGet('url', $given_url);
if (empty($file_redir)) {
$redir_data = File_redirection::where($given_url);
- $redir_url = $redir_data['url'];
+ if (is_array($redir_data)) {
+ $redir_url = $redir_data['url'];
+ } elseif (is_string($redir_data)) {
+ $redir_url = $redir_data;
+ } else {
+ throw new ServerException("Can't process url '$given_url'");
+ }
// TODO: max field length
if ($redir_url === $given_url || strlen($redir_url) > 255) {
$x = File::saveNew($redir_data, $given_url);
diff --git a/classes/File_redirection.php b/classes/File_redirection.php
index 76b18f672d..79052bf7d3 100644
--- a/classes/File_redirection.php
+++ b/classes/File_redirection.php
@@ -79,6 +79,9 @@ class File_redirection extends Memcached_DataObject
}
}
+ if(strpos($short_url,'://') === false){
+ return $short_url;
+ }
$curlh = File_redirection::_commonCurl($short_url, $redirs);
// Don't include body in output
curl_setopt($curlh, CURLOPT_NOBODY, true);
diff --git a/lib/util.php b/lib/util.php
index 56753debe0..d249b154fc 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -522,20 +522,21 @@ function common_linkify($url) {
if(strpos($url, '@') !== false && strpos($url, ':') === false) {
//url is an email address without the mailto: protocol
- return XMLStringer::estring('a', array('href' => "mailto:$url", 'rel' => 'external'), $url);
- }
+ $canon = "mailto:$url";
+ $longurl = "mailto:$url";
+ }else{
- $canon = File_redirection::_canonUrl($url);
+ $canon = File_redirection::_canonUrl($url);
- $longurl_data = File_redirection::where($url);
- if (is_array($longurl_data)) {
- $longurl = $longurl_data['url'];
- } elseif (is_string($longurl_data)) {
- $longurl = $longurl_data;
- } else {
- throw new ServerException("Can't linkify url '$url'");
+ $longurl_data = File_redirection::where($canon);
+ if (is_array($longurl_data)) {
+ $longurl = $longurl_data['url'];
+ } elseif (is_string($longurl_data)) {
+ $longurl = $longurl_data;
+ } else {
+ throw new ServerException("Can't linkify url '$url'");
+ }
}
-
$attrs = array('href' => $canon, 'title' => $longurl, 'rel' => 'external');
$is_attachment = false;
diff --git a/tests/HashTagDetectionTests.php b/tests/HashTagDetectionTests.php
index aeac4a5e3f..483d7135e1 100644
--- a/tests/HashTagDetectionTests.php
+++ b/tests/HashTagDetectionTests.php
@@ -7,6 +7,7 @@ if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
define('STATUSNET', true);
+define('LACONICA', true);
require_once INSTALLDIR . '/lib/common.php';
diff --git a/tests/URLDetectionTest.php b/tests/URLDetectionTest.php
index a7cdcaa242..45203bf6e3 100644
--- a/tests/URLDetectionTest.php
+++ b/tests/URLDetectionTest.php
@@ -7,6 +7,7 @@ if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
define('STATUSNET', true);
+define('LACONICA', true);
require_once INSTALLDIR . '/lib/common.php';
@@ -30,11 +31,11 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
array('link http://www.somesite.com/xyz/35637563@N00/52803365/ link',
'link http://www.somesite.com/xyz/35637563@N00/52803365/ link'),
array('http://127.0.0.1',
- 'http://127.0.0.1'),
+ 'http://127.0.0.1'),
array('127.0.0.1',
- '127.0.0.1'),
+ '127.0.0.1'),
array('127.0.0.1:99',
- '127.0.0.1:99'),
+ '127.0.0.1:99'),
array('127.0.0.1/Name:test.php',
'127.0.0.1/Name:test.php'),
array('127.0.0.1/~test',
@@ -62,23 +63,23 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
array('http://::1/test.php',
'http://::1/test.php'),
array('http://::1',
- 'http://::1'),
+ 'http://::1'),
array('2001:4978:1b5:0:21d:e0ff:fe66:59ab/test.php',
'2001:4978:1b5:0:21d:e0ff:fe66:59ab/test.php'),
array('[2001:4978:1b5:0:21d:e0ff:fe66:59ab]:99/test.php',
'[2001:4978:1b5:0:21d:e0ff:fe66:59ab]:99/test.php'),
array('2001:4978:1b5:0:21d:e0ff:fe66:59ab',
- '2001:4978:1b5:0:21d:e0ff:fe66:59ab'),
+ '2001:4978:1b5:0:21d:e0ff:fe66:59ab'),
array('http://127.0.0.1',
- 'http://127.0.0.1'),
+ 'http://127.0.0.1'),
array('example.com',
- 'example.com'),
+ 'example.com'),
array('example.com',
- 'example.com'),
+ 'example.com'),
array('http://example.com',
- 'http://example.com'),
+ 'http://example.com'),
array('http://example.com.',
- 'http://example.com.'),
+ 'http://example.com.'),
array('/var/lib/example.so',
'/var/lib/example.so'),
array('example',
@@ -91,6 +92,8 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
'mailto:user@example.com'),
array('mailto:user@example.com?subject=test',
'mailto:user@example.com?subject=test'),
+ array('xmpp:user@example.com',
+ 'xmpp:user@example.com'),
array('#example',
'#example'),
array('#example.com',
@@ -98,33 +101,33 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
array('#.net',
'#.net'),
array('http://example',
- 'http://example'),
+ 'http://example'),
array('http://3xampl3',
- 'http://3xampl3'),
+ 'http://3xampl3'),
array('http://example/',
'http://example/'),
array('http://example/path',
'http://example/path'),
array('http://example.com',
- 'http://example.com'),
+ 'http://example.com'),
array('https://example.com',
- 'https://example.com'),
+ 'https://example.com'),
array('ftp://example.com',
- 'ftp://example.com'),
+ 'ftp://example.com'),
array('ftps://example.com',
- 'ftps://example.com'),
+ 'ftps://example.com'),
array('http://user@example.com',
- 'http://user@example.com'),
+ 'http://user@example.com'),
array('http://user:pass@example.com',
- 'http://user:pass@example.com'),
+ 'http://user:pass@example.com'),
array('http://example.com:8080',
- 'http://example.com:8080'),
+ 'http://example.com:8080'),
array('http://example.com:8080/test.php',
'http://example.com:8080/test.php'),
array('example.com:8080/test.php',
'example.com:8080/test.php'),
array('http://www.example.com',
- 'http://www.example.com'),
+ 'http://www.example.com'),
array('http://example.com/',
'http://example.com/'),
array('http://example.com/path',
@@ -136,45 +139,45 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
array('http://example.com/path.php?foo=bar&bar=foo',
'http://example.com/path.php?foo=bar&bar=foo'),
array('http://example.com.',
- 'http://example.com.'),
+ 'http://example.com.'),
array('http://müllärör.de',
- 'http://müllärör.de'),
+ 'http://müllärör.de'),
array('http://ﺱﺲﺷ.com',
- 'http://ﺱﺲﺷ.com'),
+ 'http://ﺱﺲﺷ.com'),
array('http://сделаткартинки.com',
- 'http://сделаткартинки.com'),
+ 'http://сделаткартинки.com'),
array('http://tūdaliņ.lv',
- 'http://tūdaliņ.lv'),
+ 'http://tūdaliņ.lv'),
array('http://brændendekærlighed.com',
- 'http://brændendekærlighed.com'),
+ 'http://brændendekærlighed.com'),
array('http://あーるいん.com',
- 'http://あーるいん.com'),
+ 'http://あーるいん.com'),
array('http://예비교사.com',
- 'http://예비교사.com'),
+ 'http://예비교사.com'),
array('http://example.com.',
- 'http://example.com.'),
+ 'http://example.com.'),
array('http://example.com?',
- 'http://example.com?'),
+ 'http://example.com?'),
array('http://example.com!',
- 'http://example.com!'),
+ 'http://example.com!'),
array('http://example.com,',
- 'http://example.com,'),
+ 'http://example.com,'),
array('http://example.com;',
- 'http://example.com;'),
+ 'http://example.com;'),
array('http://example.com:',
- 'http://example.com:'),
+ 'http://example.com:'),
array('\'http://example.com\'',
- '\'http://example.com\''),
+ '\'http://example.com\''),
array('"http://example.com"',
- '"http://example.com"'),
+ '"http://example.com"'),
array('http://example.com',
- 'http://example.com'),
+ 'http://example.com'),
array('(http://example.com)',
- '(http://example.com)'),
+ '(http://example.com)'),
array('[http://example.com]',
- '[http://example.com]'),
+ '[http://example.com]'),
array('',
- '<http://example.com>'),
+ '<http://example.com>'),
array('http://example.com/path/(foo)/bar',
'http://example.com/path/(foo)/bar'),
array('http://example.com/path/[foo]/bar',
@@ -185,7 +188,7 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
array('http://example.com/path/foo/[bar]',
'http://example.com/path/foo/[bar]'),
array('Hey, check out my cool site http://example.com okay?',
- 'Hey, check out my cool site http://example.com okay?'),
+ 'Hey, check out my cool site http://example.com okay?'),
array('What about parens (e.g. http://example.com/path/foo/(bar))?',
'What about parens (e.g. http://example.com/path/foo/(bar))?'),
array('What about parens (e.g. http://example.com/path/foo/(bar)?',
@@ -204,51 +207,51 @@ class URLDetectionTest extends PHPUnit_Framework_TestCase
array('Unbalanced too (e.g. http://example.com/path/foo/(bar))))?',
'Unbalanced too (e.g. http://example.com/path/foo/(bar))))?'),
array('example.com',
- 'example.com'),
+ 'example.com'),
array('example.org',
- 'example.org'),
+ 'example.org'),
array('example.co.uk',
- 'example.co.uk'),
+ 'example.co.uk'),
array('www.example.co.uk',
- 'www.example.co.uk'),
+ 'www.example.co.uk'),
array('farm1.images.example.co.uk',
- 'farm1.images.example.co.uk'),
+ 'farm1.images.example.co.uk'),
array('example.museum',
- 'example.museum'),
+ 'example.museum'),
array('example.travel',
- 'example.travel'),
+ 'example.travel'),
array('example.com.',
- 'example.com.'),
+ 'example.com.'),
array('example.com?',
- 'example.com?'),
+ 'example.com?'),
array('example.com!',
- 'example.com!'),
+ 'example.com!'),
array('example.com,',
- 'example.com,'),
+ 'example.com,'),
array('example.com;',
- 'example.com;'),
+ 'example.com;'),
array('example.com:',
- 'example.com:'),
+ 'example.com:'),
array('\'example.com\'',
- '\'example.com\''),
+ '\'example.com\''),
array('"example.com"',
- '"example.com"'),
+ '"example.com"'),
array('example.com',
- 'example.com'),
+ 'example.com'),
array('(example.com)',
- '(example.com)'),
+ '(example.com)'),
array('[example.com]',
- '[example.com]'),
+ '[example.com]'),
array('',
- '<example.com>'),
+ '<example.com>'),
array('Hey, check out my cool site example.com okay?',
- 'Hey, check out my cool site example.com okay?'),
+ 'Hey, check out my cool site example.com okay?'),
array('Hey, check out my cool site example.com.I made it.',
- 'Hey, check out my cool site example.com.I made it.'),
+ 'Hey, check out my cool site example.com.I made it.'),
array('Hey, check out my cool site example.com.Funny thing...',
- 'Hey, check out my cool site example.com.Funny thing...'),
+ 'Hey, check out my cool site example.com.Funny thing...'),
array('Hey, check out my cool site example.com.You will love it.',
- 'Hey, check out my cool site example.com.You will love it.'),
+ 'Hey, check out my cool site example.com.You will love it.'),
array('What about parens (e.g. example.com/path/foo/(bar))?',
'What about parens (e.g. example.com/path/foo/(bar))?'),
array('What about parens (e.g. example.com/path/foo/(bar)?',