Closed Bug 233361 Opened 21 years ago Closed 20 years ago

content destroyed without warning when accepting option to automatically send as UNICODE (UTF-8)

Categories

(MailNews Core :: Composition, defect)

defect
Not set
critical

Tracking

(Not tracked)

RESOLVED FIXED
mozilla1.7beta

People

(Reporter: xn--mlform-iua, Assigned: jshin1987)

References

Details

(Keywords: intl)

Attachments

(1 file, 1 obsolete file)

User-Agent:       
Build Identifier: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.7a) Gecko/20040207 Firebird/0.8.0+

Your mail sending preferences are set to 'ISO-8859-1' and you are editing a
message where the encoding inside View->Charset Encoding is set to the same. You
type in some characters that are outside the character set of 'ISO-8859-1'. When
you want to send you do the normal thing, and up pops a warning that tells me
that I have used characters outside the encoding. It also tells that it is
usually OK to send as UNICODE(UTF-8) and that if I simply hit «OK», the message
will be stored or sent in exactly that format. I hit 'OK'. But when the message
reaches the receiver all characters outside ISO-8859-1 have been «converted»
into question marks.

Reproducible: Always
Steps to Reproduce:
1. Compos a letter containg e.g. the russian letter 'Я' and norwegian 'Å'.
   (it should be safe to copye an daste the above line into your mail)
2. Make sure the encoding is set to ISO-8859-1 before you hit 'Send'
3. Hit 'Send' and notice the warning that pops up, which you read.
4. Hit 'OK' to get the letter sent using the promised UTF-8 encoding.


Actual Results:  
When you received the mail the russian letter will be a question mark. I.e.
instead of being sent using UTF-8 --as promised-- the letter was sent using
ISO-8859-1 and the letters outside the scope of 8859-1 were destroyed.
Insidently, if you start with a russian encoding then it is the norwegian letter
that gets destroyed as the mail is sent using the russian character set. Note
that the loss of data is visible both in the stored version in the 'Sent' folder
as wel as in the received version.

Expected Results:  
The sofwtare should have done what it promises to do. If it is not able to do
what it currently promises then it should not give us the option to hit 'OK'.
Because one can of course fix the problem by choosing UTF-8 before hitting 'Send'.

Tested in: released version of Mozilla 1.6 for OSX
and in Mozilla Thunderbird 0.5b (20040204)
*** Bug 233362 has been marked as a duplicate of this bug. ***
Can confirm this on Win98 with 1.6 and 1.7a (20040206).
Doesn't happen if user_pref("intl.fallbackCharsetList.ISO-8859-1", "UTF-8"); set
so wil automatically fall to UTF-8 if needed.
Status: UNCONFIRMED → NEW
Ever confirmed: true
OS: MacOS X → All
Hardware: Macintosh → All
This is regression from of bug 194862.
The alert text was changed and some JS code added. But the main code at
~nsMsgCompose.cpp#1019 still behaves like before: the message is sent without
changing the character coding.

Jungshik, I CC'ed you here because you did the patch.
I can't see when !gMsgCompose.checkCharsetConversion(getCurrentIdentity(),
fallbackCharset) at MsgComposeCommands.js#1651 is true and so your manual set
fallbackCharset.value = "UTF-8" won't be executed at all.

So I think we'll at least need something like 
  m_compFields->SetCharacterSet("UTF-8");
after nsMsgCompose.cpp#1024.
Works for me on 1.6 with the default fallback of ISO-8859-1 to Windows-1252. 
 
> I can't see when !gMsgCompose.checkCharsetConversion(getCurrentIdentity(),
> fallbackCharset) at MsgComposeCommands.js#1651 is true and so your manual set
> fallbackCharset.value = "UTF-8" won't be executed at all.

 No, that part is not to blame.  That statement doesn't have to be reached.
|fallbackCharset| is set in
|gMsgCompose.checkCharsetConversion(getCurrentIdentity(),fallbackCharset)| if
|gMsgCompose.checkCharsetConversion(get.....)| succeeds. 


Why don't you post characters that turned into question marks in your test?
Please, set View | Character Coding to UTF-8 _before_ posting non-ASCII
characters in bugzilla.



I can reproduce this on WinXP.

Composition encoding was manually set ISO-8859-1, and I pressed OK on all
Unicode warning popups.
          
Msg Subject   Msg Body      UI                           Received msg
---------------------------------------------------------------------
Test          Test          No popup                     ISO-8859-1
Test          native char   Sending Mail... popup        ISO-8859-1
                            & Unicode warning popup
native char   Test          Unicode warning popup        UTF-8
native char   native char   Unicode warning popup        UTF-8

I think row 2 is this bug.
Keywords: intl
Jungshik, the combination of Å and Я is what I used according to Leifs report to
get the alert pop up.

I know that the JS code is not to blame because it's not reached (though I don't
know when it will ever be reached). The code not changed in SendMsg() (around
line 1024) should be the one to blame.
Allthough cyrillic Я and Norwegian Ø are just an example. Just set the encoding
of the message you send  to something that you know are different from the
characters contained in the message body. (Btw, 'Ø' is contained in both
ISO-8859-1 and in Windows-1252 but not in for instance Koi-8, which you could try.)
Issac and Christian, thank you for for finding that out. And, thanks, Leif, for
reporting it.

I confirmed the problem in case 2 in comment #2 with characters outside
Windows-1252, let alone ISO-8859-1.  With characters covered by Windows-1252 but
not by ISO-8859-1, it's fine.

I was totally misled by the following sentence to believe that we're checking
the message body as well as the message header.

> The message you composed contains characters not found in the selected 
> Character Coding, so your message may become unreadable after you send or 
> save it.

It turned out that in JS code, we only checked the message header  while the
message body is checked in C++ code (nsMsgCompose.cpp) as Christian wrote. 

I should've paid attention to the following comment :

// Check if the headers of composing mail can be converted to a mail charse

at 
http://lxr.mozilla.org/mozilla/source/mailnews/compose/resources/content/MsgComposeCommands.js#1642
Assignee: sspitzer → jshin
Attached patch patch (obsolete) — Splinter Review
This is effectively a one-liner, but I added comments and changed the variable
name to make clear what's being done.
Comment on attachment 140866 [details] [diff] [review]
patch

>Index: mailnews/compose/src/nsMsgCompose.cpp
>
>+          m_compFields->SetCharacterSet("UTF-8");

This is not enough. I've gotta convert the content of the body to UTF-8, here.
Somehow, it doesn't work...
Ah, JS only checks the header, yes. I overread that comment too ...

Yeah, the conversion is done (or resp. tried) in nsMsgI18NSaveAsCharset() and
fallbackCharset only contains the destination charset. So setting
m_compFields->SetCharacterSet to UTF-8 allone changes nothing.

What works is to call nsMsgI18NSaveAsCharset() as we now do and do the same
again before setting the charset to UTF-8.

With one modification, replace parameter m_compFields->GetCharacterSet() with a
constant "UTF-8".

@@ -1023,6 +1023,12 @@ NS_IMETHODIMP nsMsgCompose::SendMsg(MSG_
         PR_FREEIF(outCString);
         return NS_ERROR_MSG_MULTILINGUAL_SEND;
       }
+
+      PR_Free(outCString);
+      rv = nsMsgI18NSaveAsCharset(contentType, "UTF-8", 
+                              msgBody.get(), &outCString, 
+                              getter_Copies(fallbackCharset), &isAsciiOnly);
+      m_compFields->SetCharacterSet("UTF-8");
     }
     // re-label to the fallback charset
     else if (fallbackCharset)


I don't know if we should test the result again and alert the user in case of
failure. There might still be characters not convertable to UTF-8, yes?
Ah, not to forget GetBodyFromEditor() at nsMsgSend.cpp#1758, there is a similar
situation we should take care of.
Attached patch updated patchSplinter Review
fixes both files.
Attachment #140866 - Attachment is obsolete: true
Comment on attachment 140935 [details] [diff] [review]
updated patch

asking for r/sr.
Attachment #140935 - Flags: superreview?(bienvenu)
Attachment #140935 - Flags: review?(sspitzer)
As the patch merely make a feature currently in 1.6 work as it should, can we
expect to see it in 1.7? And in that context: are the Status & Resolution fields
correct? Perhaps a review won't happen before one claim it resolved? At least we
are past the 'New' status... Best regards, Leif.
Leif, see please http://bugzilla.mozilla.org/bug_status.html for the meaning of
Status and Resolution. But I change the status to Assigned.

I bet it will go into 1.7, but not 1.7a because that's to short.
Status: NEW → ASSIGNED
ping, sspitzer. can you review? 
Comment on attachment 140935 [details] [diff] [review]
updated patch

asking mscott for review
Attachment #140935 - Flags: review?(sspitzer) → review?(mscott)
nominating as a blocker to 1.7beta and setting the target milestone to 1.7b
Flags: blocking1.7b?
Target Milestone: --- → mozilla1.7beta
Attachment #140935 - Flags: superreview?(bienvenu) → superreview+
Comment on attachment 140935 [details] [diff] [review]
updated patch

> nsCAutoString attachment1 [details] [diff] [review]_body;

I think that should be a nsCString. body text is likely to be longer than the
default auto string size.
Attachment #140935 - Flags: review?(mscott) → review+
thanks all (especially Christian for the help), patch got landed.
Status: ASSIGNED → RESOLVED
Closed: 20 years ago
Keywords: relnote
Resolution: --- → FIXED
Flags: blocking1.7b?
Product: MailNews → Core
Product: Core → MailNews Core
Keywords: relnote
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: