Firefox4で動かないコードめも

String.replaceあたり

https://developer.mozilla.org/ja/E4Xに書いてあるバグ回避コードが動かないことがある
(E4XではXML宣言のパースができないので削除して対応しようというコード)

var response = xmlhttprequest.responseText; // bug 270553
response.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""); // bug 336551
var e4x = new XML(response);

ここで、responseの長さが一定の長さ以上だととかの文字列がちゃんとreplaceされないっぽい(Firefox3.6だと大丈夫)

let a = "";
for(let i=0; i<1000000; i++) {
    a += "a";
}
let b = '<?xml version="1.0"?>' + a;
//Firefox 4 β10 WinXPでは<?xml version="1.0"?>aaaaaa....となった
alert(b.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/,"")); 
b.replace(/^<\?xml\s+version\s*=\s*(["'])1.0\1[^?]*\?>/, "");

とかするとちゃんと動く*1ので特殊変数\1を使っている[^\1]の部分が問題なんじゃないかと思う

*1:汎用性は全く無いけど