diff options
author | Dries Buytaert <dries@buytaert.net> | 2009-10-01 19:04:26 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2009-10-01 19:04:26 +0000 |
commit | 087a54a673b0f32265da209b86badd247da181bf (patch) | |
tree | c11ada431091251ade4b37dcf195693d304660dd | |
parent | 67e96428168dc612f7d4a8161a07bf686bff8db0 (diff) | |
download | brdo-087a54a673b0f32265da209b86badd247da181bf.tar.gz brdo-087a54a673b0f32265da209b86badd247da181bf.tar.bz2 |
- Patch #578520 by sun, c960657 | mfb, Dries, catch, mattyoung: Changed Make in url() only accept an array.
-rw-r--r-- | includes/common.inc | 7 | ||||
-rw-r--r-- | modules/simpletest/tests/common.test | 9 |
2 files changed, 14 insertions, 2 deletions
diff --git a/includes/common.inc b/includes/common.inc index ec5d34cda..51918f062 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -520,8 +520,11 @@ function drupal_parse_url($url) { } // Internal URLs. else { - $parts = parse_url($url); - $options['path'] = $parts['path']; + // parse_url() does not support relative URLs, so make it absolute. E.g. the + // relative URL "foo/bar:1" isn't properly parsed. + $parts = parse_url('http://example.com/' . $url); + // Strip the leading slash that was just added. + $options['path'] = substr($parts['path'], 1); if (isset($parts['query'])) { parse_str($parts['query'], $options['query']); } diff --git a/modules/simpletest/tests/common.test b/modules/simpletest/tests/common.test index 32857bf11..123fc1b85 100644 --- a/modules/simpletest/tests/common.test +++ b/modules/simpletest/tests/common.test @@ -94,6 +94,15 @@ class CommonURLUnitTest extends DrupalUnitTestCase { ); $this->assertEqual(drupal_parse_url($url), $result, t('Relative URL parsed correctly.')); + // Relative URL that is known to confuse parse_url(). + $url = 'foo/bar:1'; + $result = array( + 'path' => 'foo/bar:1', + 'query' => array(), + 'fragment' => '', + ); + $this->assertEqual(drupal_parse_url($url), $result, t('Relative URL parsed correctly.')); + // Absolute URL. $url = '/foo/bar?foo=bar&bar=baz&baz#foo'; $result = array( |