Fix bug in the url module's url_parse method if 'parseQueryString' is true
authorBenjamin Thomas <benjamin@benjaminthomas.org>
Wed, 6 Jan 2010 03:03:14 +0000 (03:03 +0000)
committerRyan Dahl <ry@tinyclouds.org>
Wed, 6 Jan 2010 10:12:11 +0000 (02:12 -0800)
lib/url.js
test/mjsunit/test-url.js

index dd82b83..71c9f9d 100644 (file)
@@ -74,7 +74,12 @@ function url_parse (url, parseQueryString) {
   if (qm !== -1) {
     out.search = rest.substr(qm);
     out.query = rest.substr(qm+1);
-    if (parseQueryString) out.query = (querystring || querystring = require("querystring")).parse(out.query);
+    if (parseQueryString) {
+      if (!querystring) {
+        querystring = require("querystring");
+      }
+      out.query = querystring.parse(out.query);
+    }
     rest = rest.slice(0, qm);
   }
   if (rest) out.pathname = rest;
index dfdd287..1ec6b71 100644 (file)
@@ -176,6 +176,27 @@ for (var u in parseTests) {
   assert.equal(expected, actual, "format("+u+") == "+u+"\nactual:"+actual);
 }
 
+var parseTestsWithQueryString = {
+  "/foo/bar?baz=quux#frag" : {
+   "href": "/foo/bar?baz=quux#frag",
+   "hash": "#frag",
+   "search": "?baz=quux",
+   "query": {
+     "baz": "quux"
+   },
+   "pathname": "/foo/bar"
+  },
+};
+for (var u in parseTestsWithQueryString) {
+  var actual = url.parse(u,true);
+  var expected = parseTestsWithQueryString[u];
+  for (var i in expected) {
+    var e = JSON.stringify(expected[i]),
+      a = JSON.stringify(actual[i]);
+    assert.equal(e, a, "parse(" + u + ")."+i+" == "+e+"\nactual: "+a);
+  }
+}
+
 // some extra formatting tests, just to verify that it'll format slightly wonky content to a valid url.
 var formatTests = {
   "http://a.com/a/b/c?s#h" : {