summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Rothstein <drothstein@gmail.com>2014-05-06 05:17:12 -0400
committerDavid Rothstein <drothstein@gmail.com>2014-05-06 05:17:12 -0400
commit709a0a5a33afb11f192d638d260c71e9069e10d7 (patch)
treeb1141b6cc2e330ba3a2914fd7e956e2c9f01f6d9
parent9d558710106ff03e1ad4f55e447e24f62333b9f4 (diff)
downloadbrdo-709a0a5a33afb11f192d638d260c71e9069e10d7.tar.gz
brdo-709a0a5a33afb11f192d638d260c71e9069e10d7.tar.bz2
Issue #2143461 by Sneakyvv: drupal_get_query_array() does not work correctly if a query parameter contains an equals sign.
-rw-r--r--includes/common.inc2
-rw-r--r--modules/simpletest/tests/common.test25
2 files changed, 26 insertions, 1 deletions
diff --git a/includes/common.inc b/includes/common.inc
index 1c55f347c..e1a1673d7 100644
--- a/includes/common.inc
+++ b/includes/common.inc
@@ -458,7 +458,7 @@ function drupal_get_query_array($query) {
$result = array();
if (!empty($query)) {
foreach (explode('&', $query) as $param) {
- $param = explode('=', $param);
+ $param = explode('=', $param, 2);
$result[$param[0]] = isset($param[1]) ? rawurldecode($param[1]) : '';
}
}
diff --git a/modules/simpletest/tests/common.test b/modules/simpletest/tests/common.test
index 25d5c8731..f6e03b006 100644
--- a/modules/simpletest/tests/common.test
+++ b/modules/simpletest/tests/common.test
@@ -2785,3 +2785,28 @@ class ArrayDiffUnitTest extends DrupalUnitTestCase {
$this->assertIdentical(drupal_array_diff_assoc_recursive($this->array1, $this->array2), $expected);
}
}
+
+/**
+ * Tests the functionality of drupal_get_query_array().
+ */
+class DrupalGetQueryArrayTestCase extends DrupalWebTestCase {
+
+ public static function getInfo() {
+ return array(
+ 'name' => 'Query parsing using drupal_get_query_array()',
+ 'description' => 'Tests that drupal_get_query_array() correctly parses query parameters.',
+ 'group' => 'System',
+ );
+ }
+
+ /**
+ * Tests that drupal_get_query_array() correctly explodes query parameters.
+ */
+ public function testDrupalGetQueryArray() {
+ $url = "http://my.site.com/somepath?foo=/content/folder[@name='foo']/folder[@name='bar']";
+ $parsed = parse_url($url);
+ $result = drupal_get_query_array($parsed['query']);
+ $this->assertEqual($result['foo'], "/content/folder[@name='foo']/folder[@name='bar']", 'drupal_get_query_array() should only explode parameters on the first equals sign.');
+ }
+
+}