From 2ebbfbf4e49353cf32b4c40fc099496dae1eb19f Mon Sep 17 00:00:00 2001 From: "darin%netscape.com" Date: Sat, 19 Apr 2003 19:47:28 +0000 Subject: [PATCH] fixes bug 202188 "Gopher support completely defunct" r=dougt sr=bz git-svn-id: svn://10.0.0.236/trunk@141457 18797224-902f-48f8-a5cc-f745e15eee43 --- .../streamconv/converters/nsIndexedToHTML.cpp | 24 +++++++++++++++---- .../streamconv/converters/nsIndexedToHTML.h | 3 +++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.cpp b/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.cpp index c68df4dbc1a..4ebcfbf9c4b 100644 --- a/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.cpp +++ b/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.cpp @@ -107,6 +107,7 @@ nsIndexedToHTML::Init(nsIStreamListener* aListener) { getter_AddRefs(mBundle)); mRowCount = 0; + mExpectAbsLoc = PR_FALSE; return rv; } @@ -236,6 +237,9 @@ nsIndexedToHTML::OnStartRequest(nsIRequest* request, nsISupports *aContext) { NS_ENSURE_SUCCESS(rv, rv); rv = mParser->SetEncoding(NS_LossyConvertUCS2toASCII(charset).get()); NS_ENSURE_SUCCESS(rv, rv); + + } else if (NS_SUCCEEDED(uri->SchemeIs("gopher", &isScheme)) && isScheme) { + mExpectAbsLoc = PR_TRUE; } nsString buffer; @@ -476,7 +480,7 @@ nsIndexedToHTML::OnIndexAvailable(nsIRequest *aRequest, nsXPIDLCString loc; aIndex->GetLocation(getter_Copies(loc)); - + if (!mTextToSubURI) { mTextToSubURI = do_GetService(NS_ITEXTTOSUBURI_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; @@ -496,9 +500,21 @@ nsIndexedToHTML::OnIndexAvailable(nsIRequest *aRequest, NS_ConvertUCS2toUTF8 utf8UnEscapeSpec(unEscapeSpec); - NS_EscapeURL(utf8UnEscapeSpec.get(), utf8UnEscapeSpec.Length(), - esc_Colon|esc_Forced|esc_FileBaseName|esc_OnlyASCII|esc_AlwaysCopy, - escapeBuf); + // now minimally re-escape the location... + PRUint32 escFlags; + // for some protocols, like gopher, we expect the location to be absolute. + // if so, and if the location indeed appears to be a valid URI, then go + // ahead and treat it like one. + if (mExpectAbsLoc && + NS_SUCCEEDED(net_ExtractURLScheme(utf8UnEscapeSpec, nsnull, nsnull, nsnull))) { + // escape as absolute + escFlags = esc_Forced | esc_OnlyASCII | esc_AlwaysCopy | esc_Minimal; + } + else { + // escape as relative + escFlags = esc_Forced | esc_OnlyASCII | esc_AlwaysCopy | esc_FileBaseName | esc_Colon; + } + NS_EscapeURL(utf8UnEscapeSpec.get(), utf8UnEscapeSpec.Length(), escFlags, escapeBuf); pushBuffer.Append(NS_ConvertUTF8toUCS2(escapeBuf)); diff --git a/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.h b/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.h index b3481309e71..b2dfe1c68db 100644 --- a/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.h +++ b/mozilla/netwerk/streamconv/converters/nsIndexedToHTML.h @@ -92,6 +92,9 @@ protected: private: // Current number of rows PRInt32 mRowCount; + + // Expecting absolute locations, given by 201 lines. + PRBool mExpectAbsLoc; }; #endif