Closed Bug 20228 Opened 25 years ago Closed 25 years ago

[DOGFOOD]Can't change locale provider with the registry.rdf's replacement

Categories

(Core Graveyard :: RDF, defect, P3)

All
Windows NT
defect

Tracking

(Not tracked)

VERIFIED FIXED

People

(Reporter: tao, Assigned: rickg)

Details

(Whiteboard: [PDT+] 12/10 estimated fix)

Attachments

(1 file)

I edited an old registry.rdf, took out unnecessary entries, and drop it into
navigator/locale. It crashed Mozilla M11.

The chrome.rdf for addressbook
-------------------------------

<?xml version="1.0"?> <!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil
-*- -->

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns="http://chrome.mozilla.org/rdf#">

  <chrome about="chrome://addressbook/">

    <locale>
      <RDF:Description about="chrome://addressbook/locale/">
        <name>ja-JP</name>
      </RDF:Description>
    </locale>

  </chrome>

</RDF:RDF>


The stack trace:
----------------

     _heap_alloc_base(unsigned int 3722305024) line 161
     _heap_alloc_dbg(unsigned int 3722304976, int 1, const char * 0x00000000,
int 0) line 367 + 9 bytes
     _nh_malloc_dbg(unsigned int 3722304976, int 1, int 1, const char *
0x00000000, int 0) line 242 + 21 bytes

     _nh_malloc(unsigned int 3722304976, int 1) line 194 + 19 bytes
     operator new(unsigned int 3722304976) line 24 + 11 bytes
     nsDeque::GrowCapacity() line 139 + 12 bytes
     nsDeque::Push(void * 0x01b92f40) line 174
     nsHTMLTokenizer::AddToken(CToken * & 0x01b92f40, unsigned int 0, nsDeque &
{...},
     CTokenRecycler * 0x01b298a0) line 150
     nsExpatTokenizer::HandleDefault(void * 0x00000000, const char * 0x00d91eb8,
int 2) line 490 + 27 bytes

     reportDefault(void * 0x0227c170, const encoding * 0x019ec9c0
little2_encoding, const char *
     0x00d92756, const char * 0x00d92756) line 3059 + 32 bytes
     doProlog(void * 0x0227c170, const encoding * 0x019ec9c0 little2_encoding,
const char * 0x00d92752,
     const char * 0x00d9351a, int 15, const char * 0x00d92756, const char * *
0x00000000) line 2627 + 21
     bytes
     prologProcessor(void * 0x0227c170, const char * 0x00d92700, const char *
0x00d9351a, const char * *
     0x00000000) line 2144 + 36 bytes
     prologInitProcessor(void * 0x0227c170, const char * 0x00d92700, const char
* 0x00d9351a, const char *
     * 0x00000000) line 2133 + 21 bytes
     XML_Parse(void * 0x0227c170, const char * 0x00d92700, int 3610, int 1) line
860 + 38 bytes
     nsExpatTokenizer::HandleExternalEntityRef(void * 0x02ac72a0, const char *
0x00000000, const char *
     0x00dd1030, const char * 0x00dd10fa, const char * 0x00000000) line 674 + 30
bytes
     doProlog(void * 0x02ac72a0, const encoding * 0x019ec9c0 little2_encoding,
const char * 0x01eceac8,
     const char * 0x01ed2008, int 17, const char * 0x01eceaca, const char * *
0x0012fb98) line 2271 + 36
     bytes
     prologProcessor(void * 0x02ac72a0, const char * 0x01ece008, const char *
0x01ed2008, const char * *
     0x0012fb98) line 2144 + 36 bytes
     prologInitProcessor(void * 0x02ac72a0, const char * 0x01ece008, const char
* 0x01ed2008, const char *
     * 0x0012fb98) line 2133 + 21 bytes
     XML_Parse(void * 0x02ac72a0, const char * 0x01ece008, int 16384, int 0)
line 867 + 40 bytes
     nsExpatTokenizer::ParseXMLBuffer(const char * 0x01ece008, unsigned int
16384, int 0) line 293 + 24
     bytes
     nsExpatTokenizer::ConsumeToken(nsScanner & {...}) line 336 + 18 bytes
     nsParser::Tokenize(int 0) line 1414 + 21 bytes
     nsParser::ResumeParse(nsIDTD * 0x00000000, int 0) line 959 + 12 bytes
     nsParser::OnDataAvailable(nsParser * const 0x02ac5594, nsIChannel *
0x02ac3ac0, nsISupports *
     0x00000000, nsIInputStream * 0x02ac3b98, unsigned int 0, unsigned int 8192)
line 1310 + 19 bytes
     nsDocumentBindInfo::OnDataAvailable(nsDocumentBindInfo * const 0x02ac2200,
nsIChannel *
     0x02ac3ac0, nsISupports * 0x00000000, nsIInputStream * 0x02ac3b98, unsigned
int 0, unsigned int 8192)
     line 1414 + 43 bytes
     nsChannelListener::OnDataAvailable(nsChannelListener * const 0x02ac3a40,
nsIChannel * 0x02ac3ac0,
     nsISupports * 0x00000000, nsIInputStream * 0x02ac3b98, unsigned int 0,
unsigned int 8192) line 1567
     nsFileChannel::OnDataAvailable(nsFileChannel * const 0x02ac3ac4, nsIChannel
* 0x02ac20b0,
     nsISupports * 0x00000000, nsIInputStream * 0x02ac3b98, unsigned int 0,
unsigned int 8192) line 495
     nsOnDataAvailableEvent::HandleEvent(nsOnDataAvailableEvent * const
0x02ac6460) line 417
     nsStreamListenerEvent::HandlePLEvent(PLEvent * 0x02ac6410) line 173 + 12
bytes
     PL_HandleEvent(PLEvent * 0x02ac6410) line 537 + 10 bytes
     PL_ProcessPendingEvents(PLEventQueue * 0x00c75640) line 498 + 9 bytes
     _md_EventReceiverProc(HWND__ * 0x01ec06ce, unsigned int 49215, unsigned int
0, long 13063744)
     line 972 + 9 bytes
     USER32! 77e713ed()
     00c75640()
Assignee: waterson → hyatt
M11 isn't in a working state as far as the chrome.rdf file is concerned.  You
need to do this with a current build.

Also your RDF file is wrong.  It should be...

<RDF:RDF xmlns:RDF="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns="http://chrome.mozilla.org/rdf#">
      <RDF:Description about="chrome://addressbook/locale/">
        <name>ja-JP</name>
      </RDF:Description>
</RDF:RDF>
tao, we need more info...we believe this may be a "power-user" error.  Can you
provide more info?  We will re-evaluate tomorrow.
I retested it with Hyatt's chrome.rdf and it still crashed with the same stack
trace.

The chrome.rdf file is used to inform Mozilla where to pick up
locale-specific information (choosing between English and localized UI).

Localization group won't be able to indicate the location of localized UI
resources files if this mechanism does not work. We can't ship localized build
without fixing this bug.

Feel free to contact me if you need help reproducing the crash or
explaining why this is a show stopper!
Was this on M11 or a current build?
Sorry that I missed out the build date in previous comments.

It crashed on M11 build, Nov-11-29 commerical build, and my local build of
Nov-23-99.

Thanks
Whiteboard: [PDT+]
Putting on PDT+ radar.
Assignee: hyatt → tao
Hi, Hyatt:

I don't understand why would you reassign the bug to me. Do you see it as a user
error or the stack trace indicate you're not the owner?

CC nisheeth.
Assignee: tao → nisheeth
I inserted a printf in the chrome conversion routine and it did correctly
map the chrome URL to the proper "resource" URL.

Reassign to Nisheeth.
Assignee: nisheeth → rickg
Rick, I have 3 PDT+ bugs on my plate currently.  Going by the stack trace it
seems like the XML tokenizer is crashing while trying to add a token to the
token queue.  Do you think you could spend some time on this?  Please re-assign
this back to me if you can't and I'll get to it as soon as I can. Thanks.
Target Milestone: M12
I had attached a purify session, mozilla.pfy, to this report. It appears that
there are tons of IPR and IPW before crashing. They occur mostly in this calling
chain:

    nsFileSpecHelpers::UnixToNative(nsSimpleCharString&) [nsFileSpecWin.cpp:113]
    nsFileSpec::+=(char const*) [nsFileSpecWin.cpp:394]
    nsChromeRegistry::CheckForProfileFile(nsCAutoString const&,nsCAutoString&)
[nsChromeRegistry.cpp:1171]
    nsChromeRegistry::LoadDataSource(nsCAutoString const&,nsIRDFDataSource *
*,int) [nsChromeRegistry.cpp:595]
    nsChromeRegistry::InitializeDataSource(nsString&,nsString&,nsIRDFDataSource
* *,int) [nsChromeRegistry.cpp:666]
    nsChromeRegistry::ConvertChromeURL(nsIURI *) [nsChromeRegistry.cpp:405]
    nsChromeProtocolHandler::NewChannel(char const*,nsIURI *,nsILoadGroup
*,nsIInterfaceRequestor *,UINT,nsIURI *,nsIChannel * *)
[nsChromeProtocolHandler.cpp:142]
    nsIOService::NewChannelFromURI(char const*,nsIURI *,nsILoadGroup
*,nsIInterfaceRequestor *,UINT,nsIURI *,nsIChannel * *) [nsIOService.cpp:247]
    NS_OpenURI(nsIChannel * *,nsIURI *,nsILoadGroup *,nsIInterfaceRequestor
*,UINT) [nsNeckoUtil.cpp:71]
    nsDocumentBindInfo::Bind(nsIURI *,nsILoadGroup *,nsIInputStream *,WORD
const*) [nsDocLoader.cpp:1297]



Hope that this helps.
Assignee: rickg → waterson
Chris -- this one looks like fun for you.
Assignee: waterson → hyatt
QA Contact: tever → tao
Status: NEW → ASSIGNED
Whiteboard: [PDT+] → [PDT+] 12/10 estimated fix
Assignee: hyatt → pinkerton
Status: ASSIGNED → NEW
I'll take this away from an overworked hyatt. Give me a few days, though, I've
never seen any of this code before in my life.
Status: NEW → ASSIGNED
Assignee: pinkerton → rickg
Status: ASSIGNED → NEW
Nisheeth and I looked at this and here is what is happening:

The crash occurs while we are parsing hiddenWindow.xul. It loads in navigator.dtd
and we're parsing the first comment in that file. At this point, the global deque
|gTokenDeque| in the expatTokenizer has been deleted by the time that the comment
is being parsed, and so trying to call AddToken() crashes because the deque is
garbage.

I think the purify logs pointing to the chrome registry code that accompany this
bug might be red herrings and unrelated, though should be investigated
separately.

per Nisheeth's advice, pushing to rickg. Nisheeth says he will be away for the
xml '99 conference until Thurs. so he will be unavailable to take this bug
himself.
Status: NEW → ASSIGNED
Tell Nisheeth I said "thanks a lot" for this bug.
Fix in hand. Doing verification and awaiting approval for checkin.
Status: ASSIGNED → RESOLVED
Closed: 25 years ago
Resolution: --- → FIXED
There were 3 classes of problems here. First, we needed to use refcounting on
tokenizers because their scope has now exceeded the parser (alone). Second, we
have interesting stack problems, which are eliminated by adding a self ref-count
on expattokenizer while expat runs. Third, expattokenizer was dereferencing ptrs
without checking.

In addition to testing for this bug, I also did the precheckin smoke tests,
viewed-source on files, and saved HTML documents in the editor.
Thanks, Rick! I appreciate you looking at this!
Blocks: 21564
Status: RESOLVED → VERIFIED
I tested dec-10-99 mozilla build and dec-13-99 commercial build on NT. It does
 not crash anymore; instead, when a chrome.rdf presents in a locale/ directory,
the first attempt to bring up the affected window (e.g. Addressbook) will
cause a funky browser frame to pop up with an oversized canvas/pixmap.
If you close this funky window and reopen it (Addressbook) again, the new
window will just render fine with the proper localized UI.

I'll "VERIFY" this bug and log a second one for the funky window problem.
A separate bug for the funky window problem:
http://bugzilla.mozilla.org/show_bug.cgi?id=21647, "[BETA] locale/chrome.rdf
hangs or causes funky window".
No longer blocks: 21564
Product: Core → Core Graveyard
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: