Closed Bug 24692 Opened 25 years ago Closed 25 years ago

Message is lost after copying to a non-ascii folder name

Categories

(MailNews Core :: Internationalization, defect, P3)

x86
Windows NT
defect

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: marina, Assigned: Bienvenu)

Details

(Whiteboard: [PDT+] ETA 2-24-2000)

Attachments

(1 file)

Steps to reproduce:
-go to Yahoo.fr;
-send this page to your account;
-get message, verify mail body is correct;
-now copy this message to two folders (one with ascii name and another one with 
non-ascii name);
//note: message copyed to ascii folder displays all comtents fine;
after selecting message in non-ascii folder there is no body
i forgot to mention that no problem occur when moving messages.
Summary: Message is lost after copying to a non-ascii folder name → Message is lost after copying to a non-ascii folder name
QA assigned to marina.
QA Contact: momoi → marina
Questions:
1) Is this IMAP or local?
2) Is the folder name in non-ascii displayed fine?
it is a local folder and non-ascii name is displyed fine.
Reassign to jefft. I think he owns this part.
Assignee: nhotta → jefft
Status: NEW → ASSIGNED
Target Milestone: M14
Nominate as beta1 stopper
Keywords: beta1
Putting on on PDT+ radar for beta1.
Whiteboard: [PDT+]
Whiteboard: [PDT+] → [PDT+] ETA 2-14-2000
David, is this yours? We are having problem locating non-ascii folder database.

02/10/00  01:57p        <DIR>          .
02/10/00  01:57p        <DIR>          ..
02/10/00  01:57p                     0 Aחזה
02/10/00  01:57p                 1,049 Aחזה.msf
02/09/00  01:29p                     0 Drafts
02/10/00  11:04a                 1,133 Drafts.msf
02/10/00  01:35p             1,099,685 Inbox
02/10/00  01:52p                29,954 Inbox.msf
02/10/00  11:04a                   960 popstate.dat
02/10/00  11:03a                     0 rules.dat
02/09/00  01:29p                     0 Sent
02/09/00  01:29p                     0 Templates
02/10/00  01:14p                 8,123 Trash
02/10/00  01:37p                 1,630 Trash.msf
02/09/00  01:29p                     0 Unsent Messages
02/10/00  01:52p                 1,133 Unsent Messages.msf
              16 File(s)      1,143,667 bytes
                          1,240,010,752 bytes free

F:\JeffTsai\work\qatest21\Mail\server1>

+	dbHeap	0x00000000
+	dbName	0x0c2d2788 "F:\JeffTsai\work\qatest21\Mail\server1\Aח.sbd\ה.msf"
+	m_mdbEnv	0x0c2d2518
+	myMDBFactory	0x0aebce98
+	&newFile	0x0012c804
+	newFile	0x00000000
	ret	2153054214
+	this	0x0c2d2900


NTDLL! 77f7629c()
nsDebug::Assertion(const char * 0x0b42cb28, const char * 0x0b42ca34, const char 
* 0x0b42ca0c, int 78) line 189 + 13 bytes
mork_assertion_signal(const char * 0x0b42cb28) line 78 + 31 bytes
morkEnv::NewError(const char * 0x0b42cb6c) line 369 + 19 bytes
morkEnv::CantMakeWhenBadError() line 404
morkHandle::morkHandle(morkEnv * 0x0c2d25d0, morkHandleFace * 0x0c2d2250, 
morkObject * 0x0c2d2430, unsigned long 1181314149) line 101
orkinFile::orkinFile(morkEnv * 0x0c2d25d0, morkHandleFace * 0x0c2d2250, morkFile 
* 0x0c2d2430) line 67 + 32 bytes
orkinFile::MakeFile(morkEnv * 0x0c2d25d0, morkFile * 0x0c2d2430) line 81 + 43 
bytes
morkFile::AcquireFileHandle(morkEnv * 0x0c2d25d0) line 144 + 13 bytes
orkinFactory::CreateNewFile(nsIMdbEnv * 0x0c2d2518, nsIMdbHeap * 0x0aebcfa8, 
const char * 0x0c2d2788, nsIMdbFile * * 0x0012c804) line 350 + 12 bytes
nsMsgDatabase::OpenMDB(nsMsgDatabase * const 0x0c2d2900, const char * 
0x0c2d2788, int 1) line 626 + 30 bytes
nsMailDatabase::Open(nsMailDatabase * const 0x0c2d2b20, nsIFileSpec * 
0x0c495d00, int 1, int 0, nsIMsgDatabase * * 0x0c491454) line 89 + 29 bytes
nsMsgLocalMailFolder::GetDatabase(nsIMsgWindow * 0x0be92650) line 463 + 66 bytes
nsMsgLocalMailFolder::UpdateFolder(nsMsgLocalMailFolder * const 0x0c4913e8, 
nsIMsgWindow * 0x0be92650) line 509 + 19 bytes
XPTC_InvokeByIndex(nsISupports * 0x0c4913e8, unsigned int 32, unsigned int 1, 
nsXPTCVariant * 0x0012cb28) line 139
nsXPCWrappedNativeClass::CallWrappedMethod(JSContext * 0x01d9c090, 
nsXPCWrappedNative * 0x0c495360, const XPCNativeMemberDescriptor * 0x0b8d94fc, 
nsXPCWrappedNativeClass::CallMode CALL_METHOD, unsigned int 1, long * 
0x00f008d0, long * 0x0012cce8) line 898 + 43 bytes
WrappedNative_CallMethod(JSContext * 0x01d9c090, JSObject * 0x0b831890, unsigned 
int 1, long * 0x00f008d0, long * 0x0012cce8) line 200 + 34 bytes
js_Invoke(JSContext * 0x01d9c090, unsigned int 1, unsigned int 0) line 665 + 26 
bytes
js_Interpret(JSContext * 0x01d9c090, long * 0x0012d5d4) line 2292 + 15 bytes
js_Invoke(JSContext * 0x01d9c090, unsigned int 3, unsigned int 0) line 681 + 13 
bytes
js_Interpret(JSContext * 0x01d9c090, long * 0x0012de7c) line 2292 + 15 bytes
js_Invoke(JSContext * 0x01d9c090, unsigned int 1, unsigned int 0) line 681 + 13 
bytes
js_Interpret(JSContext * 0x01d9c090, long * 0x0012e724) line 2292 + 15 bytes
js_Invoke(JSContext * 0x01d9c090, unsigned int 0, unsigned int 0) line 681 + 13 
bytes
js_Interpret(JSContext * 0x01d9c090, long * 0x0012efcc) line 2292 + 15 bytes
js_Invoke(JSContext * 0x01d9c090, unsigned int 1, unsigned int 2) line 681 + 13 
bytes
js_InternalInvoke(JSContext * 0x01d9c090, JSObject * 0x0b8c15d0, long 193733968, 
unsigned int 0, unsigned int 1, long * 0x0012f158, long * 0x0012f104) line 754 + 
19 bytes
JS_CallFunctionValue(JSContext * 0x01d9c090, JSObject * 0x0b8c15d0, long 
193733968, unsigned int 1, long * 0x0012f158, long * 0x0012f104) line 2772 + 31 
bytes
nsJSContext::CallEventHandler(nsJSContext * const 0x01d9ed60, void * 0x0b8c15d0, 
void * 0x0b8c2550, unsigned int 1, void * 0x0012f158, int * 0x0012f154) line 562 
+ 33 bytes
nsJSEventListener::HandleEvent(nsIDOMEvent * 0x0c2d3594) line 128 + 57 bytes
nsEventListenerManager::HandleEventSubType(nsListenerStruct * 0x0bcd5aa0, 
nsIDOMEvent * 0x0c2d3594, unsigned int 8) line 677 + 19 bytes
nsEventListenerManager::HandleEvent(nsIPresContext * 0x01d9eb70, nsEvent * 
0x0012f6b0, nsIDOMEvent * * 0x0012f650, unsigned int 7, nsEventStatus * 
0x0012f6d0) line 1171 + 31 bytes
nsXULElement::HandleDOMEvent(nsXULElement * const 0x0bbf0720, nsIPresContext * 
0x01d9eb70, nsEvent * 0x0012f6b0, nsIDOMEvent * * 0x0012f650, unsigned int 1, 
nsEventStatus * 0x0012f6d0) line 2928
nsXULTreeElement::FireOnSelectHandler(nsXULTreeElement * const 0x0beb471c) line 
556
nsXULTreeElement::SelectCell(nsXULTreeElement * const 0x0beb4718, 
nsIDOMXULElement * 0x0c2791b4) line 207
nsTreeFrame::SetSelection(nsIPresContext * 0x01d9eb70, nsTreeCellFrame * 
0x0b90d4b4) line 130
nsTreeCellFrame::HandleMouseDownEvent(nsIPresContext * 0x01d9eb70, nsGUIEvent * 
0x0012fb14, nsEventStatus * 0x0012fa20) line 246
nsTreeCellFrame::HandleEvent(nsTreeCellFrame * const 0x0b90d4b4, nsIPresContext 
* 0x01d9eb70, nsGUIEvent * 0x0012fb14, nsEventStatus * 0x0012fa20) line 199
PresShell::HandleEvent(PresShell * const 0x0af523a4, nsIView * 0x0bd75310, 
nsGUIEvent * 0x0012fb14, nsEventStatus * 0x0012fa20) line 2875 + 38 bytes
nsView::HandleEvent(nsView * const 0x0bd75310, nsGUIEvent * 0x0012fb14, unsigned 
int 8, nsEventStatus * 0x0012fa20, int & 0) line 799
nsView::HandleEvent(nsView * const 0x0af52860, nsGUIEvent * 0x0012fb14, unsigned 
int 28, nsEventStatus * 0x0012fa20, int & 0) line 784
nsViewManager::DispatchEvent(nsViewManager * const 0x0af51040, nsGUIEvent * 
0x0012fb14, nsEventStatus * 0x0012fa20) line 1704
HandleEvent(nsGUIEvent * 0x0012fb14) line 69
nsWindow::DispatchEvent(nsWindow * const 0x0af52744, nsGUIEvent * 0x0012fb14, 
nsEventStatus & nsEventStatus_eIgnore) line 493 + 10 bytes
nsWindow::DispatchWindowEvent(nsGUIEvent * 0x0012fb14) line 514
nsWindow::DispatchMouseEvent(unsigned int 302, nsPoint * 0x00000000) line 3038 + 
21 bytes
ChildWindow::DispatchMouseEvent(unsigned int 302, nsPoint * 0x00000000) line 
3256
nsWindow::ProcessMessage(unsigned int 513, unsigned int 1, long 13631562, long * 
0x0012fda0) line 2335 + 24 bytes
nsWindow::WindowProc(HWND__ * 0x58f20222, unsigned int 513, unsigned int 1, long 
13631562) line 673 + 27 bytes
USER32! 77e71820()
00d0004a()
Assignee: jefft → bienvenu
Status: ASSIGNED → NEW
accepting, but it'll have to wait until I finish the AOL IMAP stuff, I believe.
Status: NEW → ASSIGNED
Whiteboard: [PDT+] ETA 2-14-2000 → [PDT+] ETA 2-20-2000
No, this is not me. I think the first part about the message getting lost is 
probably you, Jeff, not catching the error trying to copy to the destination 
folder (I haven't debugged that part, however). The assertion opening the db is 
because the mPath that we create in nsMsgFolder::parseURI(PRBool needServer) is 
bogus, perhaps because file spec is rejecting the illegal characters. I stepped 
through the following loop

    while (token) {
      // skip leading '/' (and other // style things)
      if (nsCRT::strcmp(token, "")!=0) {

        // add .sbd onto the previous path
        if (haveFirst) {
          newPath+=".sbd";
          newPath += "/";
        }
        
        hashedToken = token;
        NS_MsgHashIfNecessary(hashedToken);
        newPath += hashedToken;
        haveFirst=PR_TRUE;
      }
      
      token = nsCRT::strtok(newStr, "/", &newStr);
    }

and the newPath created is garbage. I know Scott has been looking at similar 
problems, especially with regard to double byte chars, so I'm cc'ing him.

cc'ing Alec.

I'm not sure what to do about this.  Perhaps GetPath shouldn't be based on 
parsing the uri.  Or perhaps as Alec has mentioned we need to get the uri 
parsing code to not eliminate whitespace.
ugh. 
What if we nsEscaped the rest of the URI before we passed it to SetSpec?
I think we need to do something like utf-7 encode the folder name in the uri, 
and the db name, and set the online name for display purposes only. It's a scary 
change, however.
Attached patch patch for fixSplinter Review
OK, I found the place where we're not checking an error code in the msg/copy 
code, so I should be able to prevent the data loss. I'll attached that diff. 
Also, I looked at 4.x, and it's able to create folders and database files with 
non-ascii names, so I suspect we're doing something evil in the file spec code.
the msg is now no longer lost, but non-ascii folder names still don't work, so 
I'm leaving this open.
Whiteboard: [PDT+] ETA 2-20-2000 → [PDT+] ETA 2-18-2000
this turns out to be what looks like a bug in nsCRT::strtok - it's not handling 
characters with the high bit set correctly.  The ח in Aחזה looks like '/' to 
nsCRT::strtok, which messes up our parsing routines. I'll probably switch to 
using nsCString and FindChar instead. Should have a fix tomorrow.
if strtok is busted, we should fix it, no?
Yes, I think we should. It's used all over the place. I think some of those 
places can have 8 bit data.
moving out ETA - after getting around the strtok bug, I've now run into a 
problem with the way we encode uri's - some code expects uri's to be ut8 
(NS_MakeAbsoluteURI uses ut8 encoding) and other code expects uri's to be 
straight 8 bit characters. Perhaps converting to utf7 everywhere would get 
around that, but it's a scary change.
Whiteboard: [PDT+] ETA 2-18-2000 → [PDT+] ETA 2-25-2000
David: What code expects URLs to be straight 8 bit characters? We need to fix 
that. Can you file a separate bug against andreas.otte@primus-online.de, and cc 
me? Thanks.
It's mailnews code that creates url's (and uri's) with 8 bit characters. Should 
we utf-7 encode them, or utf-8 encode them?
URLs are supposed to be UTF8 encoded when handed to necko (although I really 
regret not changing this to PRUnichar* a long time ago).
ah, the fun just never stops with this bug. utf8 seems to have the joyous 
property that if you utf8 encode a string that is already utf8-encoded, you get 
a different string. So even if I utf8 encode the local mail folder uri's, I run 
into grief because the xul utf8 encodes the utf8-encoded folder name that it 
gets out of the uri. So, unless I'm more than usually confused, I think utf8 is 
not the way to go here (despite the fact that it's relatively convenient with 
nsStrings and nsTextFormatter to convert back and forth between them). So I 
might be stuck with the relatively expensive utf7 encoding/decoding.
Shouldn't we know at all points in the code whether a char* represents UTF8 or 
ascii? If this is getting confused along the way causing us to UTF8 encode 
twice, we need to fix that, not work around it with a double encoding. But 
perhaps I'm not understanding you...
we should, but I don't, at least. Are URI's supposed to be utf8 encoded? If so,
nsXULContentUtils::GetElementRefResource is broken, or the code that stores
uri's is broken; nsXULContentUtils::GetelementRefResource seems to assume that
they're not utf8 encoded. If URI's are NOT supposed to be utf8-encoded, then I
need to come up another way of storing 8 bit data safely so that utf8 encoding
won't touch it.

Users of nsStdURL (which is what I think mail/news uses) are supposed to convert 
their strings to UTF8 before initializing the url (with SetSpec). SetSpec just 
says it takes a char*, but it's supposed to be UTF8. Sounds like this isn't 
happening somewhere. Similarly, callers of GetSpec should assume that they're 
getting UTF8. 

Cc'ing Andreas just in case I've got something wrong here.
We can certainly change the XUL/RDF stuff to do UTF8 encoding & docoding of 
URLs (although I'm not exactly sure all of the places where we'd need to do 
that). I was under the assumption that all URLs were 7-bit ascii when I wrote 
the code.
I changed the local mail code to convert to utf8 before calling setspec and 
convert from utf8 when calling getspec, but that doesn't do any good unless 
everyone does the same. Also, the problem I'm having now is with URI's, not 
URL's. Do you think this utf8 convention applies to URI's as well?
To go into a little more detail, rdf_MakeAbsoluteURI(nsIURI* aURL, nsString& 
aURI) calls rdf_MakeAbsoluteURI(nsIURI* aURL, nsString& aURI) which calls 
NS_MakeAbsoluteURI - the first thing that does is take the spec and convert it 
to utf8, so it seems to believe that the spec is NOT utf8 encoded. If this is 
correct, then I can't UTF8 encode URI's, and should utf7 encode them, or 
something.

When I mentioned converting to utf8, I meant at the point where the nsIURI 
methods (particularly SetSpec and Resolve) gets called. Since the 
NS_MakeAbsoluteURI takes an nsString, this string is expected to be in unicode, 
and the conversion to utf8 happens at the point we start needing char* data.

If mail/news and/or rdf only deal with nsStrings, you shouldn't have to worry 
about utf8 conversion.
We deal with URI's, The nstring in question came from a URI, so it's not real 
unicode, just a const char * stuck into an nsString. That's because we're using 
GetResource. Perhaps if I use GetUnicodeResource, I'll be happier. I'm going to 
try that.
This is the second case today where I've seen a char* stuck into an nsString and 
bad things happen. I think we need to use a charset converter when we do that. 
If you got the string from a URL then it's supposed to be utf8. Putting utf8 
directly into an nsString will mangle things.

Frank: Do you agree that we need to use a charset converter here?
not sure if this is what you were talking about, but it seems like basically we
should never allow someone to put a char* into an nsString without telling us
what charset it's in. this would force people to do their research before
blindly dropping in the char*.. the nsString could do the charset conversion
automatically.
My comments exactly in bug 28474.
i think this is also part of the problem for 7844.  I can get folder names to 
show up, but the uris are incorrect.
OK, waterson and I came up with a fix for this - rdf_MakeAbsoluteURI needs to 
stop converting to utf8, basically, and take a const char * instead of an 
nsString. This will save some data allocation and copying as well. I'm going to 
code it up. The equivalent change (converting back to straight unicode from utf8 
)also works, but is inneficient.
Whiteboard: [PDT+] ETA 2-25-2000 → [PDT+] ETA 2-23-2000
I have a fix for this - waiting for checkin approval. Won't make tomorrow's 
build because I don't have approval yet, so moving to 2/24
Whiteboard: [PDT+] ETA 2-23-2000 → [PDT+] ETA 2-24-2000
fix checked in.
Status: ASSIGNED → RESOLVED
Closed: 25 years ago
Resolution: --- → FIXED
can not be verify because of a new bug # 28987
verified as such in 2000-02-24 Win build.
marked as verified
Status: RESOLVED → VERIFIED
Product: MailNews → Core
Product: Core → MailNews Core
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: