commit 6f92a1feadf46e50286dfed67835e92038196dc2 Author: Valentin Gosu valentin.gosu@gmail.com Date: Thu Apr 10 10:23:04 2014 -0400
Bug 991471 - Fix offset when setting host on URL. r=mcmanus, a=abillings --- netwerk/base/src/nsStandardURL.cpp | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/netwerk/base/src/nsStandardURL.cpp b/netwerk/base/src/nsStandardURL.cpp index 2216580..d97718a 100644 --- a/netwerk/base/src/nsStandardURL.cpp +++ b/netwerk/base/src/nsStandardURL.cpp @@ -1476,7 +1476,14 @@ nsStandardURL::SetHost(const nsACString &input) len = flat.Length();
if (mHost.mLen < 0) { - mHost.mPos = mAuthority.mPos; + int port_length = 0; + if (mPort != -1) { + nsAutoCString buf; + buf.Assign(':'); + buf.AppendInt(mPort); + port_length = buf.Length(); + } + mHost.mPos = mAuthority.mPos + mAuthority.mLen - port_length; mHost.mLen = 0; }
@@ -1520,7 +1527,7 @@ nsStandardURL::SetPort(int32_t port) nsAutoCString buf; buf.Assign(':'); buf.AppendInt(port); - mSpec.Insert(buf, mHost.mPos + mHost.mLen); + mSpec.Insert(buf, mAuthority.mPos + mAuthority.mLen); mAuthority.mLen += buf.Length(); ShiftFromPath(buf.Length()); } @@ -1528,9 +1535,14 @@ nsStandardURL::SetPort(int32_t port) // Don't allow mPort == mDefaultPort port = -1;
+ // compute length of the current port + nsAutoCString buf; + buf.Assign(':'); + buf.AppendInt(mPort); + // need to remove the port number from the URL spec - uint32_t start = mHost.mPos + mHost.mLen; - int32_t lengthToCut = mPath.mPos - start; + uint32_t start = mAuthority.mPos + mAuthority.mLen - buf.Length(); + int32_t lengthToCut = buf.Length(); mSpec.Cut(start, lengthToCut); mAuthority.mLen -= lengthToCut; ShiftFromPath(-lengthToCut); @@ -1538,9 +1550,13 @@ nsStandardURL::SetPort(int32_t port) else { // need to replace the existing port nsAutoCString buf; + buf.Assign(':'); + buf.AppendInt(mPort); + uint32_t start = mAuthority.mPos + mAuthority.mLen - buf.Length(); + uint32_t length = buf.Length(); + + buf.Assign(':'); buf.AppendInt(port); - uint32_t start = mHost.mPos + mHost.mLen + 1; - uint32_t length = mPath.mPos - start; mSpec.Replace(start, length, buf); if (buf.Length() != length) { mAuthority.mLen += buf.Length() - length;
tbb-commits@lists.torproject.org