From 6f076f634b5944a20cce2325a7be281b3c016f43 Mon Sep 17 00:00:00 2001 From: "andreas.otte%debitel.net" Date: Thu, 27 Feb 2003 10:55:01 +0000 Subject: [PATCH] fix bug 191638 [index/html: files|dirs with "%" need to be properly encoded] force escape of % as part of filenames to %25 to not be damaged by unescape, r=bbaetz@acm.org, sr=darin@netscape.com --- netwerk/streamconv/converters/nsFTPDirListingConv.cpp | 10 +++++++--- netwerk/streamconv/converters/nsIndexedToHTML.cpp | 3 ++- xpcom/io/nsEscape.h | 1 + 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/netwerk/streamconv/converters/nsFTPDirListingConv.cpp b/netwerk/streamconv/converters/nsFTPDirListingConv.cpp index 713e9f0ebebb..2618da3a9fe3 100644 --- a/netwerk/streamconv/converters/nsFTPDirListingConv.cpp +++ b/netwerk/streamconv/converters/nsFTPDirListingConv.cpp @@ -351,10 +351,14 @@ nsFTPDirListingConv::DigestBufferLines(char *aBuffer, nsCString &aString) { if (offset) { result.fe_fnlen = offset - result.fe_fname; } - aString.Append(NS_LITERAL_CSTRING("\"") + - Substring(result.fe_fname, result.fe_fname+result.fe_fnlen) + - NS_LITERAL_CSTRING("\" ")); + nsCAutoString buf; + aString.Append(NS_LITERAL_CSTRING("\"") + + NS_EscapeURL(Substring(result.fe_fname, + result.fe_fname+result.fe_fnlen), + esc_Minimal|esc_OnlyASCII|esc_Forced,buf) + + NS_LITERAL_CSTRING("\" ")); + // CONTENT LENGTH if (type != 'd') diff --git a/netwerk/streamconv/converters/nsIndexedToHTML.cpp b/netwerk/streamconv/converters/nsIndexedToHTML.cpp index cd6a5b4f6868..3c9b9046eb1f 100644 --- a/netwerk/streamconv/converters/nsIndexedToHTML.cpp +++ b/netwerk/streamconv/converters/nsIndexedToHTML.cpp @@ -497,7 +497,8 @@ nsIndexedToHTML::OnIndexAvailable(nsIRequest *aRequest, NS_ConvertUCS2toUTF8 utf8UnEscapeSpec(unEscapeSpec); NS_EscapeURL(utf8UnEscapeSpec.get(), utf8UnEscapeSpec.Length(), - esc_FileBaseName|esc_OnlyASCII|esc_AlwaysCopy, escapeBuf); + esc_Forced|esc_FileBaseName|esc_OnlyASCII|esc_AlwaysCopy, + escapeBuf); pushBuffer.Append(NS_ConvertUTF8toUCS2(escapeBuf)); diff --git a/xpcom/io/nsEscape.h b/xpcom/io/nsEscape.h index c1f04b959f1c..cdd37a95d328 100644 --- a/xpcom/io/nsEscape.h +++ b/xpcom/io/nsEscape.h @@ -113,6 +113,7 @@ enum EscapeMask { esc_Query = PR_BIT(8), esc_Ref = PR_BIT(9), /** special flags **/ + esc_Minimal = esc_Scheme | esc_Username | esc_Password | esc_Host | esc_FilePath | esc_Param | esc_Query | esc_Ref, esc_Forced = PR_BIT(10), /* forces escaping of existing escape sequences */ esc_OnlyASCII = PR_BIT(11), /* causes non-ascii octets to be skipped */ esc_OnlyNonASCII = PR_BIT(12), /* causes ascii octets to be skipped */