Ticket #125 (assigned defect)
deal with Segmented long xml stanza in javascript XMLReader parser
| Reported by: | bug | Owned by: | desmaj |
|---|---|---|---|
| Priority: | major | Milestone: | Orbited 0.7.11 |
| Component: | Orbited JavaScript | Version: | Orbited 0.7.10 |
| Keywords: | Cc: |
Description
when xmpp server send Segmented long xml stanza to orbited client in javascript XMLReader parser,
Suppose user "terry" has 2000 roster user
when user "terry" login and get roster. the server will send such as
first orbited client received:
<iq from='terry@domain/Orbited' to='terry@domain/Orbited' type='result'><query xmlns='jabber:iq:roster'><item subscription='both' jid='1@domain'/><item subscription='both' jid='2@domain'/><item subscription='both' jid='3@domain'/> ... <item subscription='both' jid='1000@domain'/><item subscription='both' ,1218
second orbited client received:
jid='1001@domain'/> ... <item subscription='both' jid='2000@domain'/></query></iq>
in this case "xmpp.js" XMLReader private function separate_events should change
from
while (i != -1) {
if (buff.slice(i-2-name.length,i+1) == "</"+name+">") {
var frame = parse(buff.slice(0, i+1)).firstChild;
if (frame.nodeName == "parsererror") {
var frame = parse(buff.slice(0, i+1).replace("&","&")).firstChild;
}
buff = buff.slice(i+1);
checked = 0;
name = null;
cb(frame);
return separate_events();
}
else {
checked = i+1;
i = buff.indexOf(">", checked);
}
}
}
to
while (i != -1) {
if (buff.slice(i-2-name.length,i+1) == "</"+name+">") {
var frame = parse(buff.slice(0, i+1)).firstChild;
if (frame.nodeName == "parsererror") {
var frame = parse(buff.slice(0, i+1).replace("&","&")).firstChild;
}
buff = buff.slice(i+1);
checked = 0;
name = null;
cb(frame);
return separate_events();
}
else {
checked = i+1;
i = buff.indexOf(">", checked);
if(i==-1)buff = buff.slice(0,buff.lastIndexOf(",")) // add this line
}
}
}
Change History
Note: See
TracTickets for help on using
tickets.