diff --git a/mozilla/netwerk/base/src/nsURLHelper.cpp b/mozilla/netwerk/base/src/nsURLHelper.cpp index eeadc01a607..a906eb5ad08 100644 --- a/mozilla/netwerk/base/src/nsURLHelper.cpp +++ b/mozilla/netwerk/base/src/nsURLHelper.cpp @@ -359,12 +359,6 @@ net_CoalesceDirs(netCoalesceFlags flags, char* path) *urlPtr++ = *fwdPtr; } } - // Copy remaining stuff past the #?; - for (; *fwdPtr != '\0'; ++fwdPtr) - { - *urlPtr++ = *fwdPtr; - } - *urlPtr = '\0'; // terminate the url /* * Now lets remove trailing . case @@ -372,7 +366,14 @@ net_CoalesceDirs(netCoalesceFlags flags, char* path) */ if ((urlPtr > (path+1)) && (*(urlPtr-1) == '.') && (*(urlPtr-2) == '/')) - *(urlPtr-1) = '\0'; + urlPtr--; + + // Copy remaining stuff past the #?; + for (; *fwdPtr != '\0'; ++fwdPtr) + { + *urlPtr++ = *fwdPtr; + } + *urlPtr = '\0'; // terminate the url } nsresult diff --git a/mozilla/netwerk/test/unit/test_bug321706.js b/mozilla/netwerk/test/unit/test_bug321706.js new file mode 100644 index 00000000000..e0fe019c3e5 --- /dev/null +++ b/mozilla/netwerk/test/unit/test_bug321706.js @@ -0,0 +1,14 @@ +const Cc = Components.classes; +const Ci = Components.interfaces; + +const url = "http://foo.com/folder/file?/."; + +function run_test() { + var ios = Cc["@mozilla.org/network/io-service;1"]. + getService(Ci.nsIIOService); + + var newURI = ios.newURI(url, null, null); + do_check_eq(newURI.spec, url); + do_check_eq(newURI.path, "/folder/file?/."); + do_check_eq(newURI.resolve("./file?/."), url); +}