Open
Bug 267980
Opened 20 years ago
Updated 2 years ago
URL with german characters not parsed correctly when protocol file:/ missing
Categories
(Core :: Internationalization, defect)
Core
Internationalization
Tracking
()
NEW
People
(Reporter: christophe_cornu, Unassigned)
References
Details
(Keywords: intl)
Attachments
(1 file)
(deleted),
patch
|
Details | Diff | Splinter Review |
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4.1) Gecko/20031128
Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4.1) Gecko/20031128
Under a Linux Box (I am using RH9, german language set - LANG is de_DE.UTF-8)
Create a folder with german characters äö as in below. Add any html file into it.
/chrisx/äö/test.html
Open Mozilla. Paste the following URL (that's an absolute path)
file:///chrisx/äö/test.html
It works.
Paste the following URL:
/chrisx/äö/test.html
Mozilla brings up a dialog:
The file /chrisx/%E4%F6/test.html cannot be found. Please check the location and
try again.
Verified with Mozilla 1.4 and Mozilla 1.7.2
It looks like when going through the code that 'guesses' the protocol that part
of that code is not handling UTF8 correctly?
Reproducible: Always
Steps to Reproduce:
See above
Actual Results:
Expected Results:
Should be the same with or without file:/
Comment 1•20 years ago
|
||
> /chrisx/%E4%F6/test.html
0xE4 and 0xF6 are the representation of "äö" in ISO-8859-1. I tried the
following cases under ko_KR.UTF-8 locale:
/home/jshin/가각 (U+AC00 U+AC01)
/home/jshin/가각/abc
/home/jshin/ġĢ (U+0121 U+0122)
/home/jshin/αβ (U+03B1 U+03B2)
/home/jshin/äö
/home/jshin/äö/abc
The first four cases (Korean, Latin letters above U+0100, Greek letters) work
fine while the last two (letters in [U+00A0, U+00FF]) don't work as reported
here. This is very interesting because I expected all six cases to fail or to
succeed together. It seems like somewhere we use 'if (uniChar < 0x100)' where we
should use 'if (uniChar < 0x80)'.
We have to test on Mac OS X and Windows to see if it's platform-specific or XP.
Comment 2•20 years ago
|
||
per code inspection, looks like it's win/os2/unix only (this includes mac)
http://lxr.mozilla.org/seamonkey/source/docshell/base/nsDefaultURIFixup.cpp#461
521 if (PossiblyByteExpandedFileName(in)) {
522 // removes high byte
523 rv = NS_NewNativeLocalFile(NS_LossyConvertUCS2toASCII(in),
PR_FALSE, getter_AddRefs(filePath));
524 }
525 else {
526 // input is unicode
527 rv = NS_NewLocalFile(in, PR_FALSE, getter_AddRefs(filePath));
528 }
PossiblyByteExpandedFilename returns true for any non-ascii latin1 character...
a better check would be to always try to interpret it as valid UTF-16 and check
if the file exists. if it does, use that.
otherwise, fall back to the LossyConvertUCS2 codepath.
Comment 3•20 years ago
|
||
I made a patch following cbie's suggestion. I'm wondering if we still need that
fallback, though.
Assignee: smontagu → jshin
Status: NEW → ASSIGNED
Comment 4•20 years ago
|
||
Comment on attachment 164851 [details] [diff] [review]
patch
asking for r/sr
Attachment #164851 -
Flags: superreview?(darin)
Attachment #164851 -
Flags: review?(bzbarsky)
Comment 5•20 years ago
|
||
1) We have existing bugs on removing that docshell code, as I recall. All this
mess is a workaround for the fact that our command line code is buggy. My
questions as to whether this is still a problem in the relevant bugs went
rather unanswered... jshin, could you look that stuff up, please?
2) If there is still an issue, I'd MUCH rather fix the command line code than
hack this code yet more.
Comment 6•20 years ago
|
||
On Linux, I tested under ll_RR.UTF-8, ll_RR.ISO-8859-1 and ko_KR.EUC-KR. WIth
the fallback code removed, it just worked, which is a bit unexpected (see the
second paragraph from this) in a sense. When I added a couple of debug
statements, it became a bit clearer as to why. When I invoked mozilla with
'/full/path' on the command line, |ConvertFileToStringURI| is not invoked at
all. I haven't checked where it's 'fixed up'. Unless there's a
platform-dependency (other than '\' and vs '/'), which I don't think is the case
, that long comment and fallback code can be removed.
As for nsICmdLine* implementations, I don't see anything wrong (after a cursory
look) [1]. Well, I don't like very much the fact that nsICmdLineService APIs
return 'string' in the native encoding (and are still declared as 'scriptable').
However, that may be inevitable to avoid the round-trip between the native
encoding and UTF-16. Perhaps, documenting clearly that those APIs return values
in the native encoding would be necessary.
What's suspicious is their consumers (especially nsAppRunner [2]) that apply
'*WithConversion' and friends to what's returned by nsICmdLine as if they're
ASCII-only.
[1]
I read comments on bug 58866 and bug 86948, but it seems to me that the problem
in nsICmdLineService implementation that made necessary the hack in the current
code has gone.
[2]
http://lxr.mozilla.org/seamonkey/source/xpfe/bootstrap/nsAppRunner.cpp#656
Updated•20 years ago
|
Attachment #164851 -
Flags: superreview?(darin)
Attachment #164851 -
Flags: review?(bzbarsky)
Comment 7•20 years ago
|
||
This code does the right thing (converting from the native encoding to Unicode):
http://lxr.mozilla.org/seamonkey/source/xpfe/components/startup/src/nsAppStartup.cpp#850
This code can be simplified using NS_CopyNativeToUnicode as is done for
nsProfile.cpp in bug 268266.
An alternative is to change nsICmdLineService::URLtoLoad as talked about in bug
87127.
Anyway, the fallback code can be safely removed.
Comment 8•20 years ago
|
||
(In reply to comment #6)
> What's suspicious is their consumers (especially nsAppRunner [2]) that apply
> '*WithConversion' and friends to what's returned by nsICmdLine as if they're
> ASCII-only.
Right. This code used to be called by such a codepath, hence the stuff about
"byte-inflated" and so forth...
> I read comments on bug 58866 and bug 86948, but it seems to me that the
> problem in nsICmdLineService implementation that made necessary the hack in
> the current code has gone.
That's what it seems like to me to, but as I said in comment 58866 someone with
a relevant Windows system would have to test removal of the fallback code....
In particular testing would need to be done on both initial startup and DDE
invokations. Similar testing should be done for xremote.
(Don't misunderstand me, as the comments in bug 87127 and bug 58866 indicate I
would love to remove this code... if you're sure it's ok to remove, I'll gladly
review the patch to do so.)
Comment 9•20 years ago
|
||
Thanks for the explanation. I was also looking at XRemote code (as you
suggested). I can test this on Windows, but I'm not familiar with DDE (and don't
know how to test it. I'll google it :-)).
Overall, I guess we have to put off removing the fallback code until removing it
is demonstrated to be safe on all three tier-1 platforms. In the meantime, do
you think it's worth fixing this bug only on branches using attachment 164851 [details] [diff] [review]?
This is rather minor so that we can just release-note it if necessary.
Comment 10•20 years ago
|
||
(In reply to comment #9)
> Overall, I guess we have to put off removing the fallback code until removing
> it is demonstrated to be safe on all three tier-1 platforms.
We should just aim to do that, and remove the code. CCing Javier in the hope
that he can help out on Mac.
> In the meantime, do you think it's worth fixing this bug only on branches
> using attachment 164851 [details] [diff] [review]?
I think pretty much any changes to this code are dangerous... if you're very
sure the patch is safe, I guess we can try to put it on branches, but it won't
make Firefox 1.0 anyway, so I'm not sure whether we care.
Comment 11•20 years ago
|
||
Tested the patch on the Mac, and it fixes the problem.
Comment 12•20 years ago
|
||
Thanks for testing. However, the patch still has the fallback code and I'm sure
that it's safe. What we're talking about is removing the following
+ PRBool exist = PR_FALSE;
+ if (NS_SUCCEEDED(rv)) {
+ filePath->Exists(&exist);
+ }
+ if (NS_FAILED(rv) || !exist) {
+ // try deflating assuming it's byte-expanded
+ rv = NS_NewNativeLocalFile(NS_LossyConvertUTF16toASCII(in),
+ PR_FALSE, getter_AddRefs(filePath));
+ }
Comment 13•20 years ago
|
||
Yes, still works with that bit of code removed.
What's odd is that when I first open the file with non-ASCII characters, it gets
escaped in the URL bar. If I go to the URL bar and remove "file://" from the
escaped file name, it will fail to load, complaining that it cannot find the
file. However, Mozilla opens the file just fine if I manually enter the file
name (non-escaped).
Comment 14•20 years ago
|
||
(In reply to comment #13)
> Yes, still works with that bit of code removed.
Thanks again for testing. My Mac is back up again (after a mysterious
post-10.3.6-upgrade syndrom :-)), I can test it, too. Can you tell me what's Mac
OS X equivalent of Xremote (X11) and DDE (Windows)? That is, how can I pass a
url to a running instance of mozilla? '-remote' option doesn't work on OS X.
> What's odd is that when I first open the file with non-ASCII characters, it gets
> escaped in the URL bar. If I go to the URL bar and remove "file://" from the
> escaped file name, it will fail to load, complaining that it cannot find the
> file. However, Mozilla opens the file just fine if I manually enter the file
> name (non-escaped).
That's just normal. Without 'file://', '/some/path/%41%42' is interpreted
literally rather than 'file:///some/path/AB'. Unless you have a file '%41%42' in
'/some/path', it should fail.
OS: Linux → All
Hardware: PC → All
Comment 15•20 years ago
|
||
(In reply to comment #14)
> Can you tell me what's Mac
> OS X equivalent of Xremote (X11) and DDE (Windows)? That is, how can I pass a
> url to a running instance of mozilla?
You know, I'm not quite sure. I think it just uses LaunchServices API to handle
this. So if you set your browser as the default, and click on an HTML link in
another app (Mail for example), then it will open it up in the browser.
Ooh, actually, you can use the 'open' command from the command line. Just do
"open -a .../MozillaDebug.app test.html".
Comment 16•20 years ago
|
||
Thanks, Javier. I'll play with it. Adding Masayuki to Cc for help with testing
(see comment #12) DDE on Windows. (I can test it on Windows, but I rarely boot
up Windows)
Comment 17•20 years ago
|
||
On DDE, it doesn't work.
I try to test with 'file://D:/wwwtest/テスト/test.html'.
But Mozilla read 'file://D:/wwwtest/eXg/test.html'.
Comment 18•20 years ago
|
||
Oops...
I forget important comment.
I tested on 'Current' build and 'Patched build',
but both build failed my test.
Comment 19•20 years ago
|
||
Thanks for testing.
'テスト' in Shift_JIS is 0x83 0x65 0x83 0x58 0x83 0x67. Apparently, that was
inflated to UTF-16 with AssignWithConversion or equivalent.
How about 'mozilla \\D:\wwwtest\テスト\test.html' in Start | Run with an
instance of Mozilla already running?
Comment 20•20 years ago
|
||
No, I use HTML Editor.
The editor convert the path to file://.
If I use explorer with DDE(WWW_OpenURL), Mozilla returns error message.
The message is "'d' protocol is not supported".
Should I test "mozilla %1"? Does not use DDE?
Comment 21•20 years ago
|
||
I tested "mozilla %1".
If the code is removed(comment 12), it does _not_ work fine.
But if the code exists, it works fine.
On the removed case, mozilla return message following.
'd:/wwwtest/_e_X_g/test.html' is not found.
Comment 22•19 years ago
|
||
(In reply to comment #5)
> 2) If there is still an issue, I'd MUCH rather fix the command line code than
> hack this code yet more.
Fixing the command line code is kinda 'put on hold' by Benjamin's plan for overhauling XUL(runner). See bug 98952. Should we go ahead with the patch with the fallback for 1.8 branch?
Comment 23•19 years ago
|
||
The nsICommandLine code was bug 276588 and has replaced all of this (in toolkit apps). If this is still an issue in FF1.5 it's caused by a different codepath.
Updated•15 years ago
|
QA Contact: amyy → i18n
Comment 24•2 years ago
|
||
The bug assignee didn't login in Bugzilla in the last 7 months, so the assignee is being reset.
Assignee: jshin1987 → nobody
Status: ASSIGNED → NEW
Updated•2 years ago
|
Severity: normal → S3
You need to log in
before you can comment on or make changes to this bug.
Description
•