diff --git a/layout/html/forms/src/nsFormFrame.cpp b/layout/html/forms/src/nsFormFrame.cpp index 5c6eaf6deb26..2b4e29010cda 100644 --- a/layout/html/forms/src/nsFormFrame.cpp +++ b/layout/html/forms/src/nsFormFrame.cpp @@ -74,6 +74,7 @@ #include "prenv.h" #define SPECIFY_CHARSET_IN_CONTENT_TYPE +#define FIX_NON_ASCII_MULTIPART #if defined(ClientWallet) || defined(SingleSignon) || defined(CookieManagement) #include "nsIServiceManager.h" @@ -1009,6 +1010,9 @@ void nsFormFrame::Temp_GetContentType(char* aPathName, char* aContentType) void nsFormFrame::ProcessAsMultipart(nsString& aData, nsIFormControlFrame* aFrame) { +#ifdef FIX_NON_ASCII_MULTIPART + nsIUnicodeEncoder *encoder=nsnull; +#endif aData.SetLength(0); char buffer[BUFSIZE]; PRInt32 numChildren = mFormControls.Count(); @@ -1035,6 +1039,11 @@ void nsFormFrame::ProcessAsMultipart(nsString& aData, nsIFormControlFrame* aFram return; } +#ifdef FIX_NON_ASCII_MULTIPART + if(NS_FAILED( GetEncoder(&encoder) ) ) + encoder = nsnull; +#endif + PRInt32 boundaryLen = PL_strlen(boundary); PRInt32 contDispLen = PL_strlen(CONTENT_DISP); PRInt32 crlfLen = PL_strlen(CRLF); @@ -1062,8 +1071,22 @@ void nsFormFrame::ProcessAsMultipart(nsString& aData, nsIFormControlFrame* aFram contentLen += boundaryLen + crlfLen; contentLen += contDispLen; for (int valueX = 0; valueX < numValues; valueX++) { - char* name = names[valueX].ToNewCString(); - char* value = values[valueX].ToNewCString(); + + char* name = nsnull; + char* value = nsnull; + +#ifdef FIX_NON_ASCII_MULTIPART + if(encoder) { + name = UnicodeToNewBytes(names[valueX].GetUnicode(), names[valueX].Length(), encoder); + value = UnicodeToNewBytes(values[valueX].GetUnicode(), values[valueX].Length(), encoder); + } +#endif + + if(nsnull == name) + name = names[valueX].ToNewCString(); + if(nsnull == value) + value = values[valueX].ToNewCString(); + if ((0 == names[valueX].Length()) || (0 == values[valueX].Length())) { continue; } @@ -1131,8 +1154,21 @@ void nsFormFrame::ProcessAsMultipart(nsString& aData, nsIFormControlFrame* aFram continue; } for (int valueX = 0; valueX < numValues; valueX++) { - char* name = names[valueX].ToNewCString(); - char* value = values[valueX].ToNewCString(); + char* name = nsnull; + char* value = nsnull; + +#ifdef FIX_NON_ASCII_MULTIPART + if(encoder) { + name = UnicodeToNewBytes(names[valueX].GetUnicode(), names[valueX].Length(), encoder); + value = UnicodeToNewBytes(values[valueX].GetUnicode(), values[valueX].Length(), encoder); + } +#endif + + if(nsnull == name) + name = names[valueX].ToNewCString(); + if(nsnull == value) + value = values[valueX].ToNewCString(); + if ((0 == names[valueX].Length()) || (0 == values[valueX].Length())) { continue; } @@ -1184,8 +1220,12 @@ void nsFormFrame::ProcessAsMultipart(nsString& aData, nsIFormControlFrame* aFram PR_Close(tmpFile); +#ifdef FIX_NON_ASCII_MULTIPART + NS_IF_RELEASE(encoder); +#endif //StrAllocCopy(url_struct->post_data, tmpfilename); //url_struct->post_data_is_file = TRUE; + } // THE FOLLOWING WAS TAKEN FROM CMD/WINFE/FEGUI AND MODIFIED TO JUST