Closed Bug 230104 Opened 21 years ago Closed 21 years ago

Web site using JavaScript broken when migrating from 1.4 to 1.6b (can't decode JavaScript from bogus charset)

Categories

(Core :: DOM: Core & HTML, defect)

x86
All
defect
Not set
normal

Tracking

()

RESOLVED FIXED

People

(Reporter: luke, Unassigned)

References

()

Details

Attachments

(3 files)

User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6b) Gecko/20031210 Build Identifier: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6b) Gecko/20031210 On waitrosedeliver.com their JavaScript based pages of items have somehow become broken when I upgraded from Mozilla 1.4 to 1.6b (all using mozilla.org RPMs). Previously the product lists were displayed correctly, but now they never have any other items under them and a JavaScript error is logged. The pages require you are logged in, I believe. Reproducible: Always Steps to Reproduce: 1. Log in to waitrosedeliver.com 2. Click "My Orders" in the top right 3. Click "Show mw all the prodicts I have ever ordered" Actual Results: A series of green categories are displayed, with no items under them. Expected Results: A series of green categories should be displayed with items under them. I borrowed a friend's Mozilla 1.01 to check, and the site still works correctly under the older versions. Sorry if this is an evangelism bug, but it seems odd it has just stopped working on new versions.
Attached image Old behaviour
Product list displayed.
Attached image New behaviour
Categories shown as blank
Apologies, some info I left off. I don't know if it works under Mozilla 1.5 because I never used it. The JavaScript error given on 1.6b is the rather unhelpful: Error: getAProblem is not defined Source File: http://www.waitrosedeliver.com/wdeliver/javaScripts/display_lists_1.js?v=v35p3ugo Line: 14
Luke, could you look through the page and the scripts it loads for the definition of the getAProblem function? The error message just says that we have no record of such a function ever being defined by the page....
I'm not having much headway here, not helped by the auto-generated HTML and JS being completely unreadable. Under both browsers, Save As Complete saves a set of files, and both have a function declaration for 'getAProblem' (the JS file they are in is identical between saves). The HTML does seem to differ but both seem to use <script src="..."></script> to load the right JS file to draw the categories. It might be possible to reproduce the problem without logging in. I'm seeing something similar if I go to http://www.waitrosedeliver.com/, click "Browse the shop" in the top right, and select a category (eg. Product Aisles > Bakery and Patisserie > Cakes). Previously the items were displayed in the right hand frame, but now it says 'Cakes Products 1-30 of 122 "Waitrose" to "Waitrose"' but listing no items. I'll try and drag a finer toothcomb over the saved file as best I can, but any essential changes might be lost because of the way Save As Complete and JavaScript interact :-( I can email zip files of both versions if interested, but they're likely to be around 1M.
just hoping this might help a little... The stylesheet used by 'browse the shop' page is probably at http://www.waitrosedeliver.com//wdeliver/styleSheets/ns_6_common.css?v=v1hc3uf8 (the sniffing code is at http://www.waitrosedeliver.com//wdeliver/javaScripts/browser.js?v=utec4ji0 ) The URL cited in comment #3 uses 'escape' in two places ('escape' has changed since 1.4)
changing OS to ALL, as this is broken with win98 too: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.7a) Gecko/20040104 tested working: Mozilla 1.4.1, Mozilla 1.5, Mozilla 1.6a BuildID 2003110115 Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.6a) Gecko/20031030 tested as described in comment 5 looking for cakes, and got first 30 displayed. 1.4.1 was showing a missing bracket in lists.js, but I didn´t see it, and the website was working. 1.5 and 1.6a didn´t show JS warnings or errors. 1.7a shows a lot of warnings, on every page. after selecting 'cakes' i get over 200 warnings of this one: Warning: reference to undefined property treeMenu[i][j][k] Source File: http://www.waitrosedeliver.com/wdeliver/javaScripts/tree_menu_code.js?v=v0161hgg Line: 322 Also some: Warning: reference to undefined property treeMenu[i][j] Source File: http://www.waitrosedeliver.com/wdeliver/javaScripts/tree_menu_code.js?v=v0161hgg Line: 321 Warning: reference to undefined property treeMenu[i] Source File: http://www.waitrosedeliver.com/wdeliver/javaScripts/tree_menu_code.js?v=v0161hgg Line: 320
OS: Linux → All
I made local copys of the 'cakes'-page using 1.4.1 and 1.7a. 1.4.1 did save all the images, 1.7a had the cake names as contents in a function, but did save less files and no images. 1.7a was displaying the local copy made with 1.4.1, so there is a regression. the saved js was working with each other version, seems, that there were only the images not saved by 1.7a, and the main file display.jsp.html was 12kb vs. 107 kb.
The problem with http://www.waitrosedeliver.com/ appeared between build 2003-11-10-05 and build 2003-11-13-12 (I have no nightlies in that range). Possible culprits: bug 221975 (not too likely), bug 217225, bug 224867 (neither very likely either), bug 222346 (just checked over that patch and it seems ok still), bug 219848, bug 44272 (my bet's on this one, esp. if the site browser-sniffs and uses different escaping based on the result), bug 224306 (I don't know enough to evaluate this one), bug 191699 (not likely).
Actually, in a debug build selecting "Cakes" gives me: ###!!! ASSERTION: Could not convert external JavaScript to Unicode!: 'NS_SUCCEEDED(rv)', file /home/bzbarsky/mozilla/xlib/mozilla/content/base/src/nsScriptLoader.cpp, line 856 The charset involved is 'ISO8859_1'; note that when you load the URI http://www.waitrosedeliver.com/wdeliver/servlet/JSPs/shop/flags_javascript_creator.jsp the server sends the header: Content-Type: text/html;charset=ISO8859_1 If I add the line: iso8859_1=ISO-8859-1 to charsetalias.properties, the page shows all the images. So we have the following options: 1) Make this code handle bogus server charsets like it used to (it would fall back on the document, etc, if it failed to get a resolved alias for what the server sent) 2) Add this string as an alias for ISO-8859-1 3) Just evangelize this site to send something sane. We already have aliases of "iso_8859-1" and "iso8859-1", so it's a short step to "iso8859_1", right? ;) In any case, this is not a JS engine bug, and I would say that we should log the encoding conversion failure to the JS console; that would have made debugging this a snap.
Assignee: general → general
Status: UNCONFIRMED → NEW
Component: JavaScript Engine → DOM
Ever confirmed: true
QA Contact: PhilSchwartau → ian
Summary: Web site using JavaScript broken when migrating from 1.4 to 1.6b → Web site using JavaScript broken when migrating from 1.4 to 1.6b (can't decode JavaScript from bogus charset)
I should clarify that this is all for the issue in comment 5 that does not require logging in, but I bet the same will help the rest of the site.
One other option would be to canonicalize aAlias by replacing all '_' with '-' in nsCharsetAlias2::GetPreferred (right where we ToLowerCase() it). This may be the best solution in general... (and update/remove the charsetalias.properties entries that use '_').
working: BuildID 2003111209 Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.6b) Gecko/20031112 broken: BuildID 2003111309 Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.6b) Gecko/20031113
Yeah, that's the time range the bug 222346 fix landed in.
Comments 10 and 11 are correct - I hacked a proxy to detect and fix the broken Content-Type (crudely) and the "show all products" page as shown in the screenshots starts working again.
re comment #12 I'm for it assuming we can do it w/o perf. loss. BTW, iirc, one canonical name we use has '_', Shift_JIS. Anyway, we have to write to the web master to fix their problem.
I think nsScriptLoader should at least do _some_ fallback when GetUnicodeDecoder() fails, or maybe GetUnicodeDecoder() itself should fallback to ISO-8859-1 if GetCharsetAlias() fails.
> nsScriptLoader should at least do _some_ fallback when > GetUnicodeDecoder() fails, I agree. Alternatively, GetUnicodeDecoderRaw can fallback not because GetCharsetAlias fails (it never fails but it just returns the original if there's no alias) but because there's no decoder for the 'resolved' charset. However, there may be some consumers that rely on the current behavior. So, probably just adding a fallback in the script loader seems 'safer' than the alternative.
Yeah, I don't like GetUnicodeDecoderRaw doing a fallback.... For comment 16, does the Shift_JIS thing matter for purposes of the key string we use in the properties file? I don't know this code all that well... I suppose just changing nsScriptLoader to fallback to ISO-8859-1 is ok with me.
So is the fix here going to be to the effect of? mozilla/content/base/src/nsScriptLoader.cpp 812 if (NS_SUCCEEDED(rv) && charsetConv) { 813 rv = charsetConv->GetUnicodeDecoder(characterSet.get(), 814 getter_AddRefs(unicodeDecoder)); +++ if (NS_FAILED(rv)) { +++ rv = charsetConv->GetUnicodeDecoder("ISO-8859-1", +++ getter_AddRefs(unicodeDecoder)); +++ } 815 } Or is something more clever needed?
Attached patch patchSplinter Review
Luke, sorry for the delay. This is the same as yours except that 'Raw' version is used because 'ISO-8859-1' is canonical (no alias resolution is necessary). I guess this is too late for 1.6. You should really write to the web master of the site to use 'ISO-8859-1'. Just adding one line to their jsp files will do that. re: Shift_JIS, I'd love to change it to Shift-JIS (as internal keys, actually shiftjis, iso88591, euckr, utf8, koi8r, windows1252, etc would be best), but things are a bit more complex because that is the preferred MIME name in the IANA MIME charset registry and we want to use it for outgoing emails / html documents (produced by Composer).
I've sent Waitrose a message explaining the issue, and I'll add a comment here when I get a reply.
Comment on attachment 138858 [details] [diff] [review] patch asking for r/sr. btw, I fixed the indentatio n in my tree and added the following comment: // fall back to ISO-8859-1 if charset is not supported. (bug 230104)
Attachment #138858 - Flags: superreview?(bz-vacation)
Attachment #138858 - Flags: review?(smontagu)
Comment on attachment 138858 [details] [diff] [review] patch Yeah, looks good.
Attachment #138858 - Flags: superreview?(bz-vacation) → superreview+
Comment on attachment 138858 [details] [diff] [review] patch r=smontagu
Attachment #138858 - Flags: review?(smontagu) → review+
thanks for r/sr. patch checked into the trunk, but it won't be landed in 1.6 (at least in the 1.6.0). So, Luke, they have to fix their bug (hope they will listen to you :-))
Status: NEW → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Just for the record, I got the following reply from waitrosedeliver.com (the reference to Netscape was because I referred to Mozilla as being the Netscape development version, to avoid the "we don't support strange browsers" response): Dear Luke, Thank you for your e-mail. Our Technical team were very grateful for all your comments and help regarding the problems with the Netscape browser. We are going to be making the changes that you suggested on our next update in early February. ... Regards, Nicky Lyons Waitrose Customer Service.
Component: DOM → DOM: Core & HTML
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: